Mercurial > hg > octave-kai > gnulib-hg
changeset 17152:22b1a8f00587
fcntl-h: default O_SEARCH, O_EXEC back to O_RDONLY
O_PATH doesn't work with Linux kernel 3.6.5, as fchmod (fd, ...)
fails with errno == EBADF when fd is opened with O_PATH.
Reported by Jim Meyering in
<http://lists.gnu.org/archive/html/bug-gnulib/2012-11/msg00026.html>.
* doc/posix-headers/fcntl.texi (fcntl.h): Document this.
* lib/fcntl.in.h (O_EXEC, O_SEARCH) [O_PATH]: Default back to O_RDONLY.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Thu, 08 Nov 2012 01:23:20 -0800 |
parents | d20cbb4d40be |
children | dd4bcf7b9f4f |
files | ChangeLog doc/posix-headers/fcntl.texi lib/fcntl.in.h |
diffstat | 3 files changed, 16 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2012-11-08 Paul Eggert <eggert@cs.ucla.edu> + + fcntl-h: default O_SEARCH, O_EXEC back to O_RDONLY + O_PATH doesn't work with Linux kernel 3.6.5, as fchmod (fd, ...) + fails with errno == EBADF when fd is opened with O_PATH. + Reported by Jim Meyering in + <http://lists.gnu.org/archive/html/bug-gnulib/2012-11/msg00026.html>. + * doc/posix-headers/fcntl.texi (fcntl.h): Document this. + * lib/fcntl.in.h (O_EXEC, O_SEARCH) [O_PATH]: Default back to O_RDONLY. + 2012-11-07 Paul Eggert <eggert@cs.ucla.edu> test-utimens: speed up by taking shorter naps
--- a/doc/posix-headers/fcntl.texi +++ b/doc/posix-headers/fcntl.texi @@ -28,9 +28,10 @@ @item @samp{O_EXEC} and @samp{O_SEARCH} are not defined on some platforms. -On platforms such as GNU/Linux 2.6.39 and later that have @samp{O_PATH}, -Gnulib defines these macros to @samp{O_PATH}. -On other platforms, it defines them to @samp{O_RDONLY}, which is typically 0. +Gnulib defines these macros to @samp{O_RDONLY}, which is typically 0. +The @samp{O_PATH} macro of GNU/Linux is not a suitable substitute, as +fchmod fails with @samp{errno==EBADF} when invoked on a file +descriptor that was opened with @samp{O_PATH}. @item @samp{O_ACCMODE} is not defined on some platforms:
--- a/lib/fcntl.in.h +++ b/lib/fcntl.in.h @@ -213,11 +213,7 @@ #endif #ifndef O_EXEC -# ifdef O_PATH -# define O_EXEC O_PATH -# else -# define O_EXEC O_RDONLY /* This is often close enough in older systems. */ -# endif +# define O_EXEC O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_IGNORE_CTTY @@ -274,11 +270,7 @@ #endif #ifndef O_SEARCH -# ifdef O_PATH -# define O_SEARCH O_PATH -# else -# define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ -# endif +# define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_SYNC