Christopher Faylor <me.cygwin2012@cgf.cx>
* fhandler.h (wait_return): Add overlapped_nullread. * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Detect zero-byte read as a special case. (fhandler_base_overlapped::raw_read): Keep looping when zero-byte read detected without EOF. (fhandler_base_overlapped::raw_write): Quiet gcc warning by adding overlapped_nullread to switch statement even though it will never actually be hit.
This commit is contained in:
parent
6c95669d23
commit
3617fc8859
@ -1,3 +1,15 @@
|
||||
2012-03-12 Corinna Vinschen <corinna@vinschen.de>
|
||||
Christopher Faylor <me.cygwin2012@cgf.cx>
|
||||
|
||||
* fhandler.h (wait_return): Add overlapped_nullread.
|
||||
* fhandler.cc (fhandler_base_overlapped::wait_overlapped): Detect
|
||||
zero-byte read as a special case.
|
||||
(fhandler_base_overlapped::raw_read): Keep looping when zero-byte read
|
||||
detected without EOF.
|
||||
(fhandler_base_overlapped::raw_write): Quiet gcc warning by adding
|
||||
overlapped_nullread to switch statement even though it will never
|
||||
actually be hit.
|
||||
|
||||
2012-03-10 Christopher Faylor <me.cygwin2012@cgf.cx>
|
||||
|
||||
* dtable.cc (fh_alloc): Treat pc.dev as unsigned.
|
||||
|
@ -1982,7 +1982,11 @@ fhandler_base_overlapped::wait_overlapped (bool inres, bool writing, DWORD *byte
|
||||
}
|
||||
|
||||
if (res == overlapped_success)
|
||||
debug_printf ("normal %s, %u bytes", writing ? "write" : "read", *bytes);
|
||||
{
|
||||
debug_printf ("normal %s, %u bytes ispipe() %d", writing ? "write" : "read", *bytes, ispipe ());
|
||||
if (*bytes == 0 && !writing && ispipe ())
|
||||
res = overlapped_nullread;
|
||||
}
|
||||
else if (res == overlapped_nonblocking_no_data)
|
||||
{
|
||||
*bytes = (DWORD) -1;
|
||||
@ -2020,6 +2024,9 @@ fhandler_base_overlapped::raw_read (void *ptr, size_t& len)
|
||||
get_overlapped ());
|
||||
switch (wait_overlapped (res, false, &nbytes, is_nonblocking ()))
|
||||
{
|
||||
case overlapped_nullread:
|
||||
keep_looping = true;
|
||||
break;
|
||||
default: /* Added to quiet gcc */
|
||||
case overlapped_success:
|
||||
case overlapped_error:
|
||||
@ -2076,6 +2083,7 @@ fhandler_base_overlapped::raw_write (const void *ptr, size_t len)
|
||||
case overlapped_error:
|
||||
len = 0; /* terminate loop */
|
||||
case overlapped_unknown:
|
||||
case overlapped_nullread:
|
||||
case overlapped_nonblocking_no_data:
|
||||
break;
|
||||
}
|
||||
|
@ -629,6 +629,7 @@ protected:
|
||||
overlapped_unknown = 0,
|
||||
overlapped_success,
|
||||
overlapped_nonblocking_no_data,
|
||||
overlapped_nullread,
|
||||
overlapped_error
|
||||
};
|
||||
bool io_pending;
|
||||
|
Loading…
Reference in New Issue
Block a user