summaryrefslogtreecommitdiffstats
path: root/generic/tclMain.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2025-05-26 12:59:04 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2025-05-26 12:59:04 (GMT)
commit05271f5f1347de19b568daa4ac49eccca923ca96 (patch)
tree57b76e599dd2d588c440328588d069ecb33889f2 /generic/tclMain.c
parent31df7569748f126a4cc0e88854b1019531b5073e (diff)
parentc21ec96ab359f5f26f51e1103bb3671e240be592 (diff)
downloadtcl-core-attemptgetstring.zip
tcl-core-attemptgetstring.tar.gz
tcl-core-attemptgetstring.tar.bz2
Add some more Tcl_Attempt* functionscore-attemptgetstring
Diffstat (limited to 'generic/tclMain.c')
-rw-r--r--generic/tclMain.c36
1 files changed, 25 insertions, 11 deletions
diff --git a/generic/tclMain.c b/generic/tclMain.c
index e604a60..53c39e7 100644
--- a/generic/tclMain.c
+++ b/generic/tclMain.c
@@ -533,13 +533,20 @@ Tcl_MainEx(
} else if (is.tty) {
resultPtr = Tcl_GetObjResult(interp);
Tcl_IncrRefCount(resultPtr);
- (void)Tcl_GetStringFromObj(resultPtr, &length);
- chan = Tcl_GetStdChannel(TCL_STDOUT);
- if ((length > 0) && chan) {
- if (Tcl_WriteObj(chan, resultPtr) < 0) {
- Tcl_WriteChars(chan, ENCODING_ERROR, -1);
+ (void)Tcl_AttemptGetStringFromObj(resultPtr, &length);
+ if (!resultPtr->bytes) {
+ chan = Tcl_GetStdChannel(TCL_STDERR);
+ if (chan) {
+ Tcl_WriteChars(chan, "Memory allocation error\n", -1);
+ }
+ } else {
+ chan = Tcl_GetStdChannel(TCL_STDOUT);
+ if ((length > 0) && chan) {
+ if (Tcl_WriteObj(chan, resultPtr) < 0) {
+ Tcl_WriteChars(chan, ENCODING_ERROR, -1);
+ }
+ Tcl_WriteChars(chan, "\n", 1);
}
- Tcl_WriteChars(chan, "\n", 1);
}
Tcl_DecrRefCount(resultPtr);
}
@@ -813,12 +820,19 @@ StdinProc(
chan = Tcl_GetStdChannel(TCL_STDOUT);
Tcl_IncrRefCount(resultPtr);
- (void)Tcl_GetStringFromObj(resultPtr, &length);
- if ((length > 0) && (chan != NULL)) {
- if (Tcl_WriteObj(chan, resultPtr) < 0) {
- Tcl_WriteChars(chan, ENCODING_ERROR, -1);
+ (void)Tcl_AttemptGetStringFromObj(resultPtr, &length);
+ if (!resultPtr->bytes) {
+ chan = Tcl_GetStdChannel(TCL_STDERR);
+ if (chan) {
+ Tcl_WriteChars(chan, "Memory allocation error\n", -1);
+ }
+ } else {
+ if ((length > 0) && (chan != NULL)) {
+ if (Tcl_WriteObj(chan, resultPtr) < 0) {
+ Tcl_WriteChars(chan, ENCODING_ERROR, -1);
+ }
+ Tcl_WriteChars(chan, "\n", 1);
}
- Tcl_WriteChars(chan, "\n", 1);
}
Tcl_DecrRefCount(resultPtr);
}