summaryrefslogtreecommitdiffstats
path: root/generic/tclIOCmd.c
diff options
context:
space:
mode:
authoroehhar <harald.oehlmann@elmicron.de>2023-11-07 12:42:54 (GMT)
committeroehhar <harald.oehlmann@elmicron.de>2023-11-07 12:42:54 (GMT)
commit436509ded2037b6ff1e430320e2f3cfddcfa937f (patch)
treee69f9ff0626f3cc90d33e28e4baff720a04bdc7b /generic/tclIOCmd.c
parentb072039e2175a46e30af3538857dd83f656b5ea4 (diff)
downloadtcl-436509ded2037b6ff1e430320e2f3cfddcfa937f.zip
tcl-436509ded2037b6ff1e430320e2f3cfddcfa937f.tar.gz
tcl-436509ded2037b6ff1e430320e2f3cfddcfa937f.tar.bz2
TIP 653: adopted implementation to new text to only return "-data" if potential data loss. Check for non-blocking missing
Diffstat (limited to 'generic/tclIOCmd.c')
-rw-r--r--generic/tclIOCmd.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/generic/tclIOCmd.c b/generic/tclIOCmd.c
index cd7fbff..0827858 100644
--- a/generic/tclIOCmd.c
+++ b/generic/tclIOCmd.c
@@ -318,9 +318,7 @@ Tcl_GetsObjCmd(
lineLen = Tcl_GetsObj(chan, linePtr);
if (lineLen == TCL_IO_FAILURE) {
if (!Tcl_Eof(chan) && !Tcl_InputBlocked(chan)) {
- Tcl_Obj *returnOptsPtr = Tcl_NewDictObj();
- Tcl_DictObjPut(NULL, returnOptsPtr, Tcl_NewStringObj("-data", -1),
- linePtr);
+ Tcl_DecrRefCount(linePtr);
/*
* TIP #219.
@@ -335,7 +333,6 @@ Tcl_GetsObjCmd(
TclGetString(chanObjPtr), Tcl_PosixError(interp)));
}
code = TCL_ERROR;
- Tcl_SetReturnOptions(interp, returnOptsPtr);
goto done;
}
lineLen = TCL_IO_FAILURE;
@@ -462,9 +459,14 @@ Tcl_ReadObjCmd(
TclChannelPreserve(chan);
charactersRead = Tcl_ReadChars(chan, resultPtr, toRead, 0);
if (charactersRead == TCL_IO_FAILURE) {
+
Tcl_Obj *returnOptsPtr = Tcl_NewDictObj();
- Tcl_DictObjPut(NULL, returnOptsPtr, Tcl_NewStringObj("-data", -1),
- resultPtr);
+ /* check for blocking and encoding error */
+ /* TODO: check for blocking missing */
+ if ( Tcl_GetErrno() == EILSEQ ) {
+ Tcl_DictObjPut(NULL, returnOptsPtr, Tcl_NewStringObj("-data", -1),
+ resultPtr);
+ }
/*
* TIP #219.
* Capture error messages put by the driver into the bypass area and