diff options
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); } |
