diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2025-05-26 12:59:04 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2025-05-26 12:59:04 (GMT) |
| commit | 05271f5f1347de19b568daa4ac49eccca923ca96 (patch) | |
| tree | 57b76e599dd2d588c440328588d069ecb33889f2 /generic/tclMain.c | |
| parent | 31df7569748f126a4cc0e88854b1019531b5073e (diff) | |
| parent | c21ec96ab359f5f26f51e1103bb3671e240be592 (diff) | |
| download | tcl-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.c | 36 |
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); } |
