Compare commits

...
5 Commits
2 changed files with 36 additions and 29 deletions
+8 -2
View File
@@ -318,7 +318,9 @@ Tcl_GetsObjCmd(
lineLen = Tcl_GetsObj(chan, linePtr);
if (lineLen == TCL_IO_FAILURE) {
if (!Tcl_Eof(chan) && !Tcl_InputBlocked(chan)) {
Tcl_DecrRefCount(linePtr);
Tcl_Obj *returnOptsPtr = Tcl_NewDictObj();
Tcl_DictObjPut(NULL, returnOptsPtr, Tcl_NewStringObj("-data", -1),
linePtr);
/*
* TIP #219.
@@ -333,6 +335,7 @@ Tcl_GetsObjCmd(
TclGetString(chanObjPtr), Tcl_PosixError(interp)));
}
code = TCL_ERROR;
Tcl_SetReturnOptions(interp, returnOptsPtr);
goto done;
}
lineLen = TCL_IO_FAILURE;
@@ -459,7 +462,9 @@ Tcl_ReadObjCmd(
TclChannelPreserve(chan);
charactersRead = Tcl_ReadChars(chan, resultPtr, toRead, 0);
if (charactersRead == TCL_IO_FAILURE) {
Tcl_DecrRefCount(resultPtr);
Tcl_Obj *returnOptsPtr = Tcl_NewDictObj();
Tcl_DictObjPut(NULL, returnOptsPtr, Tcl_NewStringObj("-data", -1),
resultPtr);
/*
* TIP #219.
* Capture error messages put by the driver into the bypass area and
@@ -473,6 +478,7 @@ Tcl_ReadObjCmd(
TclGetString(chanObjPtr), Tcl_PosixError(interp)));
}
TclChannelRelease(chan);
Tcl_SetReturnOptions(interp, returnOptsPtr);
return TCL_ERROR;
}
+28 -27
View File
@@ -1560,9 +1560,9 @@ test io-12.9 {ReadChars: multibyte chars split} -body {
read $f
scan [string index $in end] %c
} -cleanup {
catch {close $f}
close $f
} -result 194
test io-12.11 {ReadChars: multibyte chars split} -body {
test io-12.10 {ReadChars: multibyte chars split} -body {
set f [open $path(test1) w]
fconfigure $f -translation binary
puts -nonewline $f [string repeat a 9]\xC2
@@ -1576,7 +1576,7 @@ test io-12.11 {ReadChars: multibyte chars split} -body {
catch {close $f}
} -returnCodes 1 -match glob -result {error reading "file*":\
invalid or incomplete multibyte or wide character}
test io-12.12 {ReadChars: multibyte chars split} -body {
test io-12.11 {ReadChars: multibyte chars split} -body {
set f [open $path(test1) w]
fconfigure $f -translation binary
puts -nonewline $f [string repeat a 9]\xC2
@@ -9224,13 +9224,13 @@ test io-75.7 {
fconfigure $f -encoding utf-8 -buffering none -eofchar {} -translation lf \
-profile strict
} -body {
list [catch {read $f} msg] $msg
list [catch {read $f} msg data] $msg [dict get $data -data]
} -cleanup {
close $f
removeFile io-75.7
unset msg f fn
unset msg data f fn
} -match glob -result {1 {error reading "file*":\
invalid or incomplete multibyte or wide character}}
invalid or incomplete multibyte or wide character} A}
test io-75.8 {invalid utf-8 encoding eof handling (-profile strict)} -setup {
set fn [makeFile {} io-75.8]
@@ -9248,10 +9248,11 @@ test io-75.8 {invalid utf-8 encoding eof handling (-profile strict)} -setup {
binary scan $d H* hd
lappend hd [eof $f]
lappend hd [read $f]
close $f
set hd
} -cleanup {
close $f
removeFile io-75.8
unset f d hd
} -result {41 1 {}}
test io-75.8.eoflater {invalid utf-8 encoding eof handling (-profile strict)} -setup {
@@ -9266,17 +9267,17 @@ test io-75.8.eoflater {invalid utf-8 encoding eof handling (-profile strict)} -s
fconfigure $f -encoding utf-8 -buffering none -eofchar \x1A \
-translation lf -profile strict
} -body {
set res [list [catch {read $f} msg] [eof $f]]
set res [list [catch {read $f} msg data] [eof $f] [dict get $data -data]]
chan configure $f -encoding iso8859-1
lappend res [read $f 1]
chan configure $f -encoding utf-8
lappend res [catch {read $f 1} msg] $msg
lappend res [catch {read $f 1} msg data] $msg [dict get $data -data]
} -cleanup {
close $f
removeFile io-75.8
unset res msg fn f
} -match glob -result "1 0 \x81 1 {error reading \"*\":\
invalid or incomplete multibyte or wide character}"
unset res msg data fn f
} -match glob -result "1 0 A \x81 1 {error reading \"*\":\
invalid or incomplete multibyte or wide character} {}"
test io-strict-multibyte-eof {
@@ -9291,12 +9292,12 @@ test io-strict-multibyte-eof {
seek $chan 0
chan configure $chan -encoding utf-8 -profile strict
} -body {
list [catch {read $chan 1} msg] $msg
list [catch {read $chan 1} msg data] $msg [dict get $data -data]
} -cleanup {
close $chan
unset msg chan
unset msg chan data
} -match glob -result {1 {error reading "*":\
invalid or incomplete multibyte or wide character}}
invalid or incomplete multibyte or wide character} {}}
test io-75.9 {unrepresentable character write passes and is replaced by ?} -setup {
set fn [makeFile {} io-75.9]
@@ -9353,13 +9354,13 @@ test io-75.11 {shiftjis encoding error read results in raw bytes} -setup {
} -body {
set d [read $f]
binary scan $d H* hd
lappend hd [catch {set d [read $f]} msg] $msg
lappend hd [catch {set d [read $f]} msg data] $msg [dict get $data -data]
} -cleanup {
close $f
removeFile io-75.11
unset d hd msg f
unset d hd msg data f
} -match glob -result {41 1 {error reading "file*":\
invalid or incomplete multibyte or wide character}}
invalid or incomplete multibyte or wide character} {}}
test io-75.12 {invalid utf-8 encoding read is ignored} -setup {
set fn [makeFile {} io-75.12]
@@ -9394,13 +9395,13 @@ test io-75.13 {
} -body {
set d [read $f]
binary scan $d H* hd
lappend hd [catch {read $f} msg] $msg
lappend hd [catch {read $f} msg data] $msg [dict get $data -data]
} -cleanup {
close $f
removeFile io-75.13
unset d hd msg f fn
unset d hd msg data f fn
} -match glob -result {41 1 {error reading "file*":\
invalid or incomplete multibyte or wide character}}
invalid or incomplete multibyte or wide character} {}}
test io-75.14 {
[gets] succesfully returns lines prior to error
@@ -9418,16 +9419,16 @@ test io-75.14 {
} -body {
set res [gets $chan]
lappend res [gets $chan]
lappend res [catch {gets $chan} msg] $msg
lappend res [catch {gets $chan} msg data] $msg [dict get $data -data]
chan configure $chan -profile tcl8
lappend res [gets $chan]
lappend res [gets $chan]
return $res
} -cleanup {
close $chan
unset chan res msg
unset chan res msg data
} -match glob -result {a b 1 {error reading "*":\
invalid or incomplete multibyte or wide character} cÀ d}
invalid or incomplete multibyte or wide character} c cÀ d}
test io-75.15 {
invalid utf-8 encoding strict
@@ -9445,8 +9446,8 @@ test io-75.15 {
fconfigure $chan -encoding utf-8 -profile strict
lappend res [gets $chan]
lappend res [gets $chan]
lappend res [catch {gets $chan} msg] $msg
lappend res [catch {gets $chan} msg] $msg
lappend res [catch {gets $chan} msg data] $msg [dict get $data -data]
lappend res [catch {gets $chan} msg data] $msg [dict get $data -data]
chan configure $chan -translation binary
set data [read $chan 4]
foreach char [split $data {}] {
@@ -9461,7 +9462,7 @@ test io-75.15 {
close $chan
unset chan res msg data
} -match glob -result {hello AB 1 {error reading "*": invalid or incomplete multibyte or wide character}\
1 {error reading "*": invalid or incomplete multibyte or wide character} 43 44 c0 40 EF GHI}
CD 1 {error reading "*": invalid or incomplete multibyte or wide character} CD 43 44 c0 40 EF GHI}
# ### ### ### ######### ######### #########