Mercurial > hg > octave-lyh > gnulib-hg
changeset 13664:241057e2e60f
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.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Fri, 10 Sep 2010 11:55:27 -0700 |
parents | 9dc0f85b1c1c |
children | a660297efbdc |
files | ChangeLog doc/posix-headers/fcntl.texi lib/dup-safer-flag.c lib/dup3.c lib/fcntl.in.h lib/open.c lib/pipe2.c lib/popen-safer.c lib/progreloc.c tests/test-dup-safer.c tests/test-dup3.c tests/test-fcntl.c tests/test-pipe2.c |
diffstat | 13 files changed, 42 insertions(+), 45 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2010-09-10 Paul Eggert <eggert@cs.ucla.edu> + + 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. + 2010-09-10 Bruno Haible <bruno@clisp.org> langinfo, nl_langinfo: Fix for IRIX 5.3.
--- a/doc/posix-headers/fcntl.texi +++ b/doc/posix-headers/fcntl.texi @@ -8,9 +8,14 @@ Portability problems fixed by Gnulib: @itemize @item -@samp{O_NOCTTY}, @samp{O_DSYNC}, @samp{O_NONBLOCK}, @samp{O_RSYNC}, -@samp{O_SYNC}, @samp{O_DIRECTORY}, @samp{O_NOFOLLOW}, and -@samp{O_TTY_INIT} are not defined on some platforms. +@samp{O_CLOEXEC}, @samp{O_DIRECTORY}, @samp{O_DSYNC}, @samp{O_NOCTTY}, +@samp{O_NOFOLLOW}, @samp{O_NONBLOCK}, @samp{O_RSYNC}, @samp{O_SYNC}, +and @samp{O_TTY_INIT} are not defined on some platforms. Gnulib defines +these macros to 0. + +@item +@samp{O_EXEC} and @samp{O_SEARCH} are not defined on some platforms. +Gnulib defines these macros to @samp{O_RDONLY}, which is typically 0. @item @samp{O_BINARY}, @samp{O_TEXT} (not specified by POSIX, but essential for @@ -49,14 +54,6 @@ Portability problems not fixed by Gnulib: @itemize @item -@samp{O_CLOEXEC} is not defined on some platforms. The gnulib -replacement is not atomic on these platforms. - -@item -@samp{O_SEARCH} and @samp{O_EXEC} are not defined -on some platforms. - -@item @samp{F_SETFD}, @samp{F_GETFL}, @samp{F_SETFL}, @samp{F_GETLK}, @samp{F_SETLK}, @samp{F_SETLOKW}, @samp{F_GETOWN}, and @samp{F_SETOWN} are not defined on some platforms:
--- a/lib/dup-safer-flag.c +++ b/lib/dup-safer-flag.c @@ -28,10 +28,6 @@ #include "cloexec.h" -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - /* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. If FLAG contains O_CLOEXEC, behave like fcntl(F_DUPFD_CLOEXEC) rather than fcntl(F_DUPFD). */
--- a/lib/dup3.c +++ b/lib/dup3.c @@ -38,13 +38,6 @@ /* Upper bound on getdtablesize(). See lib/getdtablesize.c. */ # define OPEN_MAX_MAX 0x10000 -#else -/* Unix API. */ - -# ifndef O_CLOEXEC -# define O_CLOEXEC 0 -# endif - #endif int
--- a/lib/fcntl.in.h +++ b/lib/fcntl.in.h @@ -170,6 +170,10 @@ # define O_CLOEXEC O_NOINHERIT #endif +#ifndef O_CLOEXEC +# define O_CLOEXEC 0 +#endif + #ifndef O_DIRECT # define O_DIRECT 0 #endif @@ -182,6 +186,10 @@ # define O_DSYNC 0 #endif +#ifndef O_EXEC +# define O_EXEC O_RDONLY /* This is often close enough in older systems. */ +#endif + #ifndef O_NDELAY # define O_NDELAY 0 #endif
--- a/lib/open.c +++ b/lib/open.c @@ -111,7 +111,8 @@ 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))
--- a/lib/pipe2.c +++ b/lib/pipe2.c @@ -30,13 +30,6 @@ # include <io.h> -#else -/* Unix API. */ - -# ifndef O_CLOEXEC -# define O_CLOEXEC 0 -# endif - #endif int
--- a/lib/popen-safer.c +++ b/lib/popen-safer.c @@ -34,7 +34,7 @@ open_noinherit (char const *name, int flags) { int fd; -#ifdef O_CLOEXEC +#if O_CLOEXEC /* 0 = unknown, 1 = yes, -1 = no. */ static int have_cloexec; if (have_cloexec >= 0)
--- a/lib/progreloc.c +++ b/lib/progreloc.c @@ -189,7 +189,7 @@ if (link != NULL && link[0] != '[') return link; if (executable_fd < 0) - executable_fd = open ("/proc/self/exe", O_RDONLY, 0); + executable_fd = open ("/proc/self/exe", O_EXEC, 0); { char buf[6+10+5]; @@ -198,7 +198,7 @@ if (link != NULL && link[0] != '[') return link; if (executable_fd < 0) - executable_fd = open (buf, O_RDONLY, 0); + executable_fd = open (buf, O_EXEC, 0); } } #endif
--- a/tests/test-dup-safer.c +++ b/tests/test-dup-safer.c @@ -38,9 +38,6 @@ # define setmode(f,m) zero () static int zero (void) { return 0; } #endif -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif /* This test intentionally closes stderr. So, we arrange to have fd 10 (outside the range of interesting fd's during the test) set up to
--- a/tests/test-dup3.c +++ b/tests/test-dup3.c @@ -75,7 +75,7 @@ { int use_cloexec; -#if defined O_CLOEXEC +#if O_CLOEXEC for (use_cloexec = 0; use_cloexec <= 1; use_cloexec++) #else use_cloexec = 0; @@ -87,7 +87,7 @@ char buffer[1]; o_flags = 0; -#if defined O_CLOEXEC +#if O_CLOEXEC if (use_cloexec) o_flags |= O_CLOEXEC; #endif
--- a/tests/test-fcntl.c +++ b/tests/test-fcntl.c @@ -39,11 +39,6 @@ #include "binary-io.h" #include "macros.h" -/* Use O_CLOEXEC if available, but test works without it. */ -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - #if !O_BINARY # define setmode(f,m) zero () static int zero (void) { return 0; }
--- a/tests/test-pipe2.c +++ b/tests/test-pipe2.c @@ -92,7 +92,7 @@ #else use_nonblocking = 0; #endif -#if defined O_CLOEXEC +#if O_CLOEXEC for (use_cloexec = 0; use_cloexec <= 1; use_cloexec++) #else use_cloexec = 0; @@ -106,7 +106,7 @@ if (use_nonblocking) o_flags |= O_NONBLOCK; #endif -#if defined O_CLOEXEC +#if O_CLOEXEC if (use_cloexec) o_flags |= O_CLOEXEC; #endif