summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/syscalls.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2009-02-11 16:06:39 +0000
committerCorinna Vinschen <corinna@vinschen.de>2009-02-11 16:06:39 +0000
commit64d6e1d43e0b749f8eb2dc58ceeb592b9154d6e1 (patch)
treef1f691946e634f2150c9eb192820b369551e3474 /winsup/cygwin/syscalls.cc
parent29915d8ef2142e7adbe66ff5d8f243d5cd00f164 (diff)
downloadcygnal-64d6e1d43e0b749f8eb2dc58ceeb592b9154d6e1.tar.gz
cygnal-64d6e1d43e0b749f8eb2dc58ceeb592b9154d6e1.tar.bz2
cygnal-64d6e1d43e0b749f8eb2dc58ceeb592b9154d6e1.zip
* syscalls.cc (open): Handle O_DIRECTORY flag.
* include/fcntl.h: Add SUSv4 flags O_DIRECTORY, O_EXEC and O_SEARCH. * include/cygwin/version.h: Bump API minor number.
Diffstat (limited to 'winsup/cygwin/syscalls.cc')
-rw-r--r--winsup/cygwin/syscalls.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index c68599246..af26e008b 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -969,6 +969,12 @@ open (const char *unix_path, int flags, ...)
res = -1;
set_errno (ELOOP);
}
+ else if ((flags & O_DIRECTORY) && !fh->pc.isdir ())
+ {
+ delete fh;
+ res = -1;
+ set_errno (ENOTDIR);
+ }
else if (((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL)) && fh->exists ())
{
delete fh;