* 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.
This commit is contained in:
Corinna Vinschen 2009-02-11 16:06:39 +00:00
parent 29915d8ef2
commit 64d6e1d43e
4 changed files with 20 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2009-02-11 Corinna Vinschen <corinna@vinschen.de>
* 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.
2009-02-09 Corinna Vinschen <corinna@vinschen.de>
* fhandler_floppy.cc (fhandler_dev_floppy::open): Fix format. Add

View File

@ -342,12 +342,13 @@ details. */
191: Export glob_pattern_p
192: CW_SETERRNO added
193: Export wcstok.
194: fcntl.h flags O_DIRECTORY, O_EXEC and O_SEARCH added.
*/
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
#define CYGWIN_VERSION_API_MAJOR 0
#define CYGWIN_VERSION_API_MINOR 193
#define CYGWIN_VERSION_API_MINOR 194
/* There is also a compatibity version number associated with the
shared memory regions. It is incremented when incompatible

View File

@ -1,6 +1,6 @@
/* fcntl.h
Copyright 1996, 1998, 2001, 2005, 2006 Red Hat, Inc.
Copyright 1996, 1998, 2001, 2005, 2006, 2009 Red Hat, Inc.
This file is part of Cygwin.
@ -17,11 +17,16 @@ details. */
/* sys/fcntl defines values up to 0x40000 (O_NOINHERIT). */
#define _FDIRECT 0x80000
#define _FNOFOLLOW 0x100000
#define _FDIRECTORY 0x200000
#define _FEXECSRCH 0x400000
#define O_DIRECT _FDIRECT
#define O_NOFOLLOW _FNOFOLLOW
#define O_DSYNC _FSYNC
#define O_RSYNC _FSYNC
#define O_DIRECTORY _FDIRECTORY
#define O_EXEC _FEXECSRCH
#define O_SEARCH _FEXECSRCH
#define POSIX_FADV_NORMAL 0
#define POSIX_FADV_SEQUENTIAL 1

View File

@ -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;