summaryrefslogtreecommitdiff
path: root/lib/fcntl.in.h
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2010-09-01 13:45:53 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2010-09-01 13:46:21 -0700
commit24816be6c14cbc51938d036533ec5ccaa9a056e2 (patch)
treed806ac747bd2de1b5d730c7c74f22f2ae41474d5 /lib/fcntl.in.h
parent89c0f8b3c26bc3a218969bda3d7116a0528409c8 (diff)
downloadgnulib-24816be6c14cbc51938d036533ec5ccaa9a056e2.tar.gz
fcntl-h, etc.: prefer O_SEARCH to O_RDONLY when applicable
POSIX 2008 specifies a new 'open' flag O_SEARCH, which can be used when one needs search access to a directory but not read access. On systems where it is available, it works in some cases where O_RDONLY does not, namely on directories that are searchable but not readable, and which need only to be searchable. If O_SEARCH is not available, fall back to the traditional method of using O_RDONLY. * lib/fcntl.in.h (O_SEARCH): #define to O_RDONLY if not defined. * lib/chdir-long.c (cdb_advance_fd): Use O_SEARCH, not O_RDONLY, when opening a directory that needs only to be searchable. * lib/chdir-safer.c (chdir_no_follow): Likewise. * lib/fts.c (diropen, fts_open, fd_ring_check): Likewise. * lib/openat-proc.c (openat_proc_name): Likewise. * lib/openat.c (openat_needs_fchdir): Likewise. * lib/save-cwd.c (save_cwd): Likewise. * lib/savewd.c (savewd_save, savewd_chdir): Likewise.
Diffstat (limited to 'lib/fcntl.in.h')
-rw-r--r--lib/fcntl.in.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/fcntl.in.h b/lib/fcntl.in.h
index 8fb7852204..42fb81bfb0 100644
--- a/lib/fcntl.in.h
+++ b/lib/fcntl.in.h
@@ -210,6 +210,10 @@ _GL_WARN_ON_USE (openat, "openat is not portable - "
# define O_RSYNC 0
#endif
+#ifndef O_SEARCH
+# define O_SEARCH O_RDONLY /* This is often close enough in older systems. */
+#endif
+
#ifndef O_SYNC
# define O_SYNC 0
#endif