diff options
author | Christopher Faylor <me@cgf.cx> | 2005-04-28 03:41:09 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2005-04-28 03:41:09 +0000 |
commit | 5c70f2f92e610ea1504e62db0a08469b4864424e (patch) | |
tree | cc99d52ce06de244cb631c3e14bd4f2bd5b0f463 /winsup | |
parent | faae8c50a563e507fc32dd129d1f83fb2835deca (diff) | |
download | cygnal-5c70f2f92e610ea1504e62db0a08469b4864424e.tar.gz cygnal-5c70f2f92e610ea1504e62db0a08469b4864424e.tar.bz2 cygnal-5c70f2f92e610ea1504e62db0a08469b4864424e.zip |
(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.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/fhandler.cc | 4 | ||||
-rw-r--r-- | 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; |