summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--changes2
-rw-r--r--generic/tclIO.c28
-rw-r--r--tests/io.test5
-rw-r--r--win/tclsh.exe.manifest.in18
4 files changed, 31 insertions, 22 deletions
diff --git a/changes b/changes
index 0b56ec0..4b5ba55 100644
--- a/changes
+++ b/changes
@@ -7893,4 +7893,4 @@ of Tcl_Channel (porter)
2014-08-12 tzdata updated to Olson's tzdata2014f (kenny)
---- Released 8.5.16, August, 2014 --- http://core.tcl.tk/tcl/ for details
+--- Released 8.5.16, August 25, 2014 --- http://core.tcl.tk/tcl/ for details
diff --git a/generic/tclIO.c b/generic/tclIO.c
index afffeb8..93ac937 100644
--- a/generic/tclIO.c
+++ b/generic/tclIO.c
@@ -7716,7 +7716,7 @@ Tcl_NotifyChannel(
if ((chPtr->mask & mask) != 0) {
nh.nextHandlerPtr = chPtr->nextPtr;
- (*(chPtr->proc))(chPtr->clientData, mask);
+ (*(chPtr->proc))(chPtr->clientData, chPtr->mask & mask);
chPtr = nh.nextHandlerPtr;
} else {
chPtr = chPtr->nextPtr;
@@ -8853,34 +8853,22 @@ DoRead(
break;
}
- /* If there is no full buffer, attempt to create and/or fill one. */
-
- while (!IsBufferFull(bufPtr)) {
- int code;
+ /*
+ * If there is not enough data in the buffers to possibly
+ * complete the read, then go get more.
+ */
+ if (bufPtr == NULL || BytesLeft(bufPtr) < bytesToRead) {
moreData:
- code = GetInput(chanPtr);
- bufPtr = statePtr->inQueueHead;
-
- assert (bufPtr != NULL);
-
- if (GotFlag(statePtr, CHANNEL_EOF|CHANNEL_BLOCKED)) {
- /* Further reads cannot do any more */
- break;
- }
-
- if (code) {
+ if (GetInput(chanPtr)) {
/* Read error */
UpdateInterest(chanPtr);
TclChannelRelease((Tcl_Channel)chanPtr);
return -1;
}
-
- assert (IsBufferFull(bufPtr));
+ bufPtr = statePtr->inQueueHead;
}
- assert (bufPtr != NULL);
-
bytesRead = BytesLeft(bufPtr);
bytesWritten = bytesToRead;
diff --git a/tests/io.test b/tests/io.test
index 925f8c6..7698cea 100644
--- a/tests/io.test
+++ b/tests/io.test
@@ -4924,7 +4924,10 @@ test io-36.1 {Tcl_InputBlocked on nonblocking pipe} {stdio openpipe} {
test io-36.1.1 {Tcl_InputBlocked on nonblocking binary pipe} {stdio openpipe} {
set f1 [open "|[list [interpreter]]" r+]
chan configure $f1 -encoding binary -translation lf -eofchar {}
- puts $f1 {puts hello_from_pipe}
+ puts $f1 {
+ chan configure stdout -encoding binary -translation lf -eofchar {}
+ puts hello_from_pipe
+ }
flush $f1
gets $f1
fconfigure $f1 -blocking off -buffering full
diff --git a/win/tclsh.exe.manifest.in b/win/tclsh.exe.manifest.in
index aaa34e1..b7c4381 100644
--- a/win/tclsh.exe.manifest.in
+++ b/win/tclsh.exe.manifest.in
@@ -30,4 +30,22 @@
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
+ <asmv3:application>
+ <asmv3:windowsSettings
+ xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
+ <dpiAware>true</dpiAware>
+ </asmv3:windowsSettings>
+ </asmv3:application>
+ <dependency>
+ <dependentAssembly>
+ <assemblyIdentity
+ type="win32"
+ name="Microsoft.Windows.Common-Controls"
+ version="6.0.0.0"
+ processorArchitecture="@MACHINE@"
+ publicKeyToken="6595b64144ccf1df"
+ language="*"
+ />
+ </dependentAssembly>
+ </dependency>
</assembly>