summaryrefslogtreecommitdiffstats
path: root/generic/tclIO.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclIO.c')
-rw-r--r--generic/tclIO.c59
1 files changed, 6 insertions, 53 deletions
diff --git a/generic/tclIO.c b/generic/tclIO.c
index 880b669..b12adf6 100644
--- a/generic/tclIO.c
+++ b/generic/tclIO.c
@@ -4645,7 +4645,6 @@ Tcl_GetsObj(
/* State info for channel */
ChannelBuffer *bufPtr;
int inEofChar, skip, copiedTotal, oldFlags, oldRemoved;
- int reportError = 0;
int oldLength;
Tcl_Encoding encoding;
char *dst, *dstEnd, *eol, *eof;
@@ -4654,7 +4653,6 @@ Tcl_GetsObj(
if (GotFlag(statePtr, CHANNEL_ENCODING_ERROR)) {
UpdateInterest(chanPtr);
Tcl_SetErrno(EILSEQ);
- ResetFlag(statePtr, CHANNEL_ENCODING_ERROR);
return TCL_INDEX_NONE;
}
@@ -4914,19 +4912,6 @@ Tcl_GetsObj(
goto done;
}
goto gotEOL;
- } else if (gs.bytesWrote == 0
- && GotFlag(statePtr, CHANNEL_ENCODING_ERROR)) {
- /* Set eol to the position that caused the encoding error, and then
- * coninue to gotEOL, which stores the data that was decoded
- * without error to objPtr. This allows the caller to do something
- * useful with the data decoded so far, and also results in the
- * position of the file being the first byte that was not
- * succesfully decoded, allowing further processing at exactly that
- * point, if desired.
- */
- eol = dstEnd;
- reportError = 1;
- goto gotEOL;
}
dst = dstEnd;
}
@@ -4970,16 +4955,7 @@ Tcl_GetsObj(
Tcl_SetObjLength(objPtr, eol - objPtr->bytes);
CommonGetsCleanup(chanPtr);
ResetFlag(statePtr, CHANNEL_BLOCKED);
- if (reportError) {
- ResetFlag(statePtr, CHANNEL_BLOCKED|INPUT_SAW_CR|CHANNEL_ENCODING_ERROR);
- /* reset CHANNEL_ENCODING_ERROR to afford a chance to reconfigure
- * the channel and try again
- */
- Tcl_SetErrno(EILSEQ);
- copiedTotal = -1;
- } else {
- copiedTotal = gs.totalChars + gs.charsWrote - skip;
- }
+ copiedTotal = gs.totalChars + gs.charsWrote - skip;
goto done;
/*
@@ -6007,9 +5983,8 @@ DoReadChars(
}
if (GotFlag(statePtr, CHANNEL_ENCODING_ERROR)) {
- /* TODO: UpdateInterest not needed here? */
+ /* TODO: We don't need this call? */
UpdateInterest(chanPtr);
-
Tcl_SetErrno(EILSEQ);
return -1;
}
@@ -6025,7 +6000,7 @@ DoReadChars(
assert(statePtr->inputEncodingFlags & TCL_ENCODING_END);
assert(!GotFlag(statePtr, CHANNEL_BLOCKED|INPUT_SAW_CR));
- /* TODO: UpdateInterest not needed here? */
+ /* TODO: We don't need this call? */
UpdateInterest(chanPtr);
return 0;
}
@@ -6039,7 +6014,7 @@ DoReadChars(
}
ResetFlag(statePtr, CHANNEL_BLOCKED|CHANNEL_EOF);
statePtr->inputEncodingFlags &= ~TCL_ENCODING_END;
- /* TODO: UpdateInterest not needed here? */
+ /* TODO: We don't need this call? */
UpdateInterest(chanPtr);
return 0;
}
@@ -6070,7 +6045,7 @@ DoReadChars(
}
/*
- * Recycle current buffer if empty.
+ * If the current buffer is empty recycle it.
*/
bufPtr = statePtr->inQueueHead;
@@ -6083,24 +6058,6 @@ DoReadChars(
statePtr->inQueueTail = NULL;
}
}
-
- /*
- * If CHANNEL_ENCODING_ERROR and CHANNEL_STICKY_EOF are both set,
- * then CHANNEL_ENCODING_ERROR was caused by data that occurred
- * after the EOF character was encountered, so it doesn't count as
- * a real error.
- */
-
- if (GotFlag(statePtr, CHANNEL_ENCODING_ERROR)
- && !GotFlag(statePtr, CHANNEL_STICKY_EOF)
- && !GotFlag(statePtr, CHANNEL_NONBLOCKING)) {
- /* Channel is synchronous. Return an error so that callers
- * like [read] can return an error.
- */
- Tcl_SetErrno(EILSEQ);
- copied = -1;
- goto finish;
- }
}
if (copiedNow < 0) {
@@ -6129,7 +6086,6 @@ DoReadChars(
}
}
-finish:
/*
* Failure to fill a channel buffer may have left channel reporting a
* "blocked" state, but so long as we fulfilled the request here, the
@@ -6793,14 +6749,11 @@ TranslateInputEOL(
* EOF character was seen in EOL translated range. Leave current file
* position pointing at the EOF character, but don't store the EOF
* character in the output string.
- *
- * If CHANNEL_ENCODING_ERROR is set, it can only be because of data
- * encountered after the EOF character, so it is nonsense. Unset it.
*/
SetFlag(statePtr, CHANNEL_EOF | CHANNEL_STICKY_EOF);
statePtr->inputEncodingFlags |= TCL_ENCODING_END;
- ResetFlag(statePtr, CHANNEL_BLOCKED|INPUT_SAW_CR|CHANNEL_ENCODING_ERROR);
+ ResetFlag(statePtr, CHANNEL_BLOCKED|INPUT_SAW_CR);
}
}