summaryrefslogtreecommitdiffstats
path: root/generic/tclIO.c
diff options
context:
space:
mode:
authorandreas_kupries <akupries@shaw.ca>2008-04-15 18:32:00 (GMT)
committerandreas_kupries <akupries@shaw.ca>2008-04-15 18:32:00 (GMT)
commit627d3c8418d40dedf7495731024e2de6ba51ed58 (patch)
treebe6ef99b6ba62d9c825aca5ca981a29f4b4e549f /generic/tclIO.c
parentf88631b9936341c9a94380101b6559f74e91eafd (diff)
downloadtcl-627d3c8418d40dedf7495731024e2de6ba51ed58.zip
tcl-627d3c8418d40dedf7495731024e2de6ba51ed58.tar.gz
tcl-627d3c8418d40dedf7495731024e2de6ba51ed58.tar.bz2
* generic/tclIO.c (CopyData): Applied another patch by Alexandre
* io.test (io-53.8a): Ferrieux <ferrieux@users.sourceforge.net>, * chanio.test (chan-io-53.8a): to shift EOF handling to the async part of the command if a callback is specified, should the channel be at EOF already when fcopy is called. Testcase by myself.
Diffstat (limited to 'generic/tclIO.c')
-rw-r--r--generic/tclIO.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/generic/tclIO.c b/generic/tclIO.c
index 77d586c..6de2cbe 100644
--- a/generic/tclIO.c
+++ b/generic/tclIO.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclIO.c,v 1.137.2.4 2008/04/07 22:33:29 andreas_kupries Exp $
+ * RCS: @(#) $Id: tclIO.c,v 1.137.2.5 2008/04/15 18:32:01 andreas_kupries Exp $
*/
#include "tclInt.h"
@@ -8641,15 +8641,17 @@ CopyData(
break;
} else if (underflow) {
/*
- * We had an underflow on the read side. If we are at EOF, then
- * the copying is done, otherwise set up a channel handler to
- * detect when the channel becomes readable again.
+ * We had an underflow on the read side. If we are at EOF, and not
+ * in the synchronous part of an asynchronous fcopy, then the
+ * copying is done, otherwise set up a channel handler to detect
+ * when the channel becomes readable again.
*/
- if ((size == 0) && Tcl_Eof(inChan)) {
+ if ((size == 0) && Tcl_Eof(inChan) && !(cmdPtr && (mask == 0))) {
break;
}
- if (! Tcl_Eof(inChan) && !(mask & TCL_READABLE)) {
+ if (((!Tcl_Eof(inChan)) || (cmdPtr && (mask == 0))) &&
+ !(mask & TCL_READABLE)) {
if (mask & TCL_WRITABLE) {
Tcl_DeleteChannelHandler(outChan, CopyEventProc, csPtr);
}