From 5c70f2f92e610ea1504e62db0a08469b4864424e Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Thu, 28 Apr 2005 03:41:09 +0000 Subject: [PATCH] (check in files that should have been checked in previously) * fhandler.cc (fhandler_base::open_9x): Remove (broken) check for O_CREAT|O_EXCL. * syscalls.cc (open): Do O_CREAT|O_EXCL check here first. --- winsup/cygwin/fhandler.cc | 4 +--- winsup/cygwin/syscalls.cc | 6 ++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc index e2d0344aa..ba81cd3a6 100644 --- a/winsup/cygwin/fhandler.cc +++ b/winsup/cygwin/fhandler.cc @@ -520,9 +520,7 @@ fhandler_base::open_9x (int flags, mode_t mode) { if (pc.isdir ()) { - if (flags & (O_CREAT | O_EXCL) == (O_CREAT | O_EXCL)) - set_errno (EEXIST); - else if (flags & (O_WRONLY | O_RDWR)) + if (flags & (O_WRONLY | O_RDWR)) set_errno (EISDIR); else nohandle (true); diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index bf4d6a3fa..5f2b4420d 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -564,6 +564,12 @@ open (const char *unix_path, int flags, ...) { if (!(fh = build_fh_name (unix_path, NULL, PC_SYM_FOLLOW))) res = -1; // errno already set + else if (((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL)) && fh->exists ()) + { + delete fh; + res = -1; + set_errno (EEXIST); + } else if (fh->is_fs_special () && fh->device_access_denied (flags)) { delete fh;