diff options
Diffstat (limited to 'winsup/cygwin/fhandler.cc')
-rw-r--r-- | winsup/cygwin/fhandler.cc | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc index c3970c803..abeef9e55 100644 --- a/winsup/cygwin/fhandler.cc +++ b/winsup/cygwin/fhandler.cc @@ -1012,20 +1012,21 @@ int fhandler_base::fcntl (int cmd, void *arg) break; case F_GETFL: res = get_flags (); + debug_printf ("GETFL: %d", res); break; case F_SETFL: { /* - * Only O_APPEND, O_ASYNC and O_NONBLOCK are allowed. + * Only O_APPEND, O_ASYNC and O_NONBLOCK/O_NDELAY are allowed. * Each other flag will be ignored. * Since O_ASYNC isn't defined in fcntl.h it's currently * ignored as well. * There's no functionality at all, so... */ - int flags = get_flags (); - flags &= ~(O_APPEND | O_NONBLOCK); - flags |= ((int) arg & (O_APPEND | O_NONBLOCK)); - set_flags (flags); + const int allowed_flags = O_APPEND | O_NONBLOCK | OLD_O_NDELAY; + + int flags = get_flags () & ~allowed_flags; + set_flags (flags | ((int)arg & allowed_flags)); } res = 0; break; |