summaryrefslogtreecommitdiffstats
path: root/generic/tclMain.c
diff options
context:
space:
mode:
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);
}