summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/fhandler.cc')
-rw-r--r--winsup/cygwin/fhandler.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index abeef9e55..811b03888 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -1021,12 +1021,17 @@ int fhandler_base::fcntl (int cmd, void *arg)
* 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...
*/
const int allowed_flags = O_APPEND | O_NONBLOCK | OLD_O_NDELAY;
+ /* Care for the old O_NDELAY flag. If one of the flags is set,
+ both flags are set. */
+ int new_flags = (int) arg;
+ if (new_flags & (O_NONBLOCK | OLD_O_NDELAY))
+ new_flags |= O_NONBLOCK | OLD_O_NDELAY;
+
int flags = get_flags () & ~allowed_flags;
- set_flags (flags | ((int)arg & allowed_flags));
+ set_flags (flags | (new_flags & allowed_flags));
}
res = 0;
break;