From 38a17986453e32c9801da519f0e857e067a46dd7 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Mon, 23 Oct 2000 20:29:31 +0000 Subject: [PATCH] * fhandler.cc (fhandler_base::fcntl): Setting flags in F_SETFL branch according to Linux documentation. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/fhandler.cc | 25 +++++++++++++------------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index e43c4a537..fd4531055 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +Mon Oct 23 22:27:00 2000 Corinna Vinschen + + * fhandler.cc (fhandler_base::fcntl): Setting flags in F_SETFL + branch according to Linux documentation. + Mon Oct 23 21:43:00 2000 Corinna Vinschen * fcntl.cc (_fcntl): Rearrange as wrapper function. Move all diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc index 8e6c33161..c3970c803 100644 --- a/winsup/cygwin/fhandler.cc +++ b/winsup/cygwin/fhandler.cc @@ -1001,8 +1001,6 @@ int fhandler_base::fcntl (int cmd, void *arg) { int res; - /*int temp = 0;*/ - switch (cmd) { case F_GETFD: @@ -1016,16 +1014,19 @@ int fhandler_base::fcntl (int cmd, void *arg) res = get_flags (); break; case F_SETFL: - /* Only O_APPEND, O_NONBLOCK and O_ASYNC may be set. */ - /* - if (arg & O_RDONLY) - temp |= GENERIC_READ; - if (arg & O_WRONLY) - temp |= GENERIC_WRITE; - syscall_printf ("fcntl (F_SETFL, %d)", (int) arg); - set_access (temp); - */ - set_flags ((int) arg); + { + /* + * Only O_APPEND, O_ASYNC and O_NONBLOCK 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); + } res = 0; break; case F_GETLK: