Commit 94fee9e7 authored by simonmar's avatar simonmar

[project @ 2005-01-18 15:08:39 by simonmar]

Win32: attempt to make inputReady() work on pipes too.  Fixes bug
#995658.
parent 33197cc6
......@@ -49,7 +49,32 @@ inputReady(int fd, int msecs, int isSock)
else {
DWORD rc;
HANDLE hFile = (HANDLE)_get_osfhandle(fd);
DWORD avail;
// WaitForMultipleObjects() works for Console input, but it
// doesn't work for pipes (it always returns WAIT_OBJECT_0
// even when no data is available). There doesn't seem to be
// an easy way to distinguish the two kinds of HANDLE, so we
// try to detect pipe input first, and if that fails we try
// WaitForMultipleObjects().
//
rc = PeekNamedPipe( hFile, NULL, 0, NULL, &avail, NULL );
if (rc != 0) {
if (avail != 0) {
return 1;
} else {
return 0;
}
} else {
rc = GetLastError();
if (rc == ERROR_BROKEN_PIPE) {
return 1; // this is probably what we want
}
if (rc != ERROR_INVALID_HANDLE) {
return -1;
}
}
rc = WaitForMultipleObjects( 1,
&hFile,
TRUE, /* wait all */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment