summaryrefslogtreecommitdiff
path: root/lib/open.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2010-09-10 11:55:27 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2010-09-10 11:55:27 -0700
commitffb0b29997c66526985e1f4a496335d0ab4ef111 (patch)
tree855831d96cb87ac718f45362cd6bdea26cfa2ae3 /lib/open.c
parent3f322af6c93f7eb4c6ce5ceb789416aae10a50bd (diff)
downloadgnulib-ffb0b29997c66526985e1f4a496335d0ab4ef111.tar.gz
fcntl-h: define O_CLOEXEC and O_EXEC if not defined; use new defines
* doc/posix-headers/fcntl.texi (fcntl.h): Document that O_CLOEXEC is now defined to 0 if it is not defined, like other flags. Also, O_EXEC is now defined to be O_RDONLY if O_EXEC is not defined. Similarly for O_SEARCH; this last was already true, but not documented. * lib/fcntl.in.h (O_CLOEXEC): Define to 0 if not defined. * lib/dup-safer-flag.c (O_CLOEXEC): Remove now-useless #define. * lib/dup3.c, lib/pipe2.c, tests/test-dup-safer.c, tests/test-fcntl.c: Likewise. * lib/popen-safer.c (open_noinherit): Check whether O_CLOEXEC is zero, not whether it is defined. * tests/test-dup3.c, tests/test-pipe2.c (main): Likewise. * lib/progreloc.c (find_executable): Use O_EXEC rather than O_RDONLY. * lib/open.c (open): Check for O_SEARCH as well as for O_RDONLY.
Diffstat (limited to 'lib/open.c')
-rw-r--r--lib/open.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/open.c b/lib/open.c
index f612b802d2..4e44936584 100644
--- a/lib/open.c
+++ b/lib/open.c
@@ -111,7 +111,8 @@ open (const char *filename, int flags, ...)
override fstat() in fchdir.c to hide the fact that we have a
dummy. */
if (REPLACE_OPEN_DIRECTORY && fd < 0 && errno == EACCES
- && (flags & O_ACCMODE) == O_RDONLY)
+ && ((flags & O_ACCMODE) == O_RDONLY
+ || (O_SEARCH != O_RDONLY && (flags & O_ACCMODE) == O_SEARCH)))
{
struct stat statbuf;
if (stat (filename, &statbuf) == 0 && S_ISDIR (statbuf.st_mode))