summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tclIO.c4
-rw-r--r--tests/io.test9
2 files changed, 11 insertions, 2 deletions
diff --git a/generic/tclIO.c b/generic/tclIO.c
index 376ab36..6b7ccdf 100644
--- a/generic/tclIO.c
+++ b/generic/tclIO.c
@@ -4435,8 +4435,8 @@ Write(
}
ReleaseChannelBuffer(bufPtr);
}
- if ((flushed < total) && (GotFlag(statePtr, CHANNEL_UNBUFFERED) ||
- (needNlFlush && GotFlag(statePtr, CHANNEL_LINEBUFFERED)))) {
+ if (((flushed < total) && GotFlag(statePtr, CHANNEL_UNBUFFERED)) ||
+ (needNlFlush && GotFlag(statePtr, CHANNEL_LINEBUFFERED))) {
if (FlushChannel(NULL, chanPtr, 0) != 0) {
return -1;
}
diff --git a/tests/io.test b/tests/io.test
index 3b374c1..0a34019 100644
--- a/tests/io.test
+++ b/tests/io.test
@@ -330,6 +330,15 @@ test io-3.8 {WriteChars: reset sawLF after each buffer} {
close $f
lappend x [contents $path(test1)]
} [list "abcdefg\nhijklmno" "abcdefg\nhijklmnopqrstuvwxyz"]
+test io-3.9 {Write: flush line-buffered channels when crlf is split over two buffers} -body {
+ # https://core.tcl-lang.org/tcllib/tktedit?name=c9d8a52fe
+ set f [open $path(test1) w]
+ fconfigure $f -buffering line -translation crlf -buffersize 8
+ puts $f "1234567"
+ string map {"\r" "<cr>" "\n" "<lf>"} [contents $path(test1)]
+} -cleanup {
+ close $f
+} -result "1234567<cr><lf>"
test io-4.1 {TranslateOutputEOL: lf} {
# search for \n