Mercurial > hg > octave-nkf > gnulib-hg
changeset 7408:e23b1333a117
[lib/ChangeLog]
* fcntl_.h (O_NOFOLLOW): Don't depend on O_NOFOLLOW_IS_INEFFECTIVE;
we now test for that separately.
* fts.c (fts_safe_changedir): Inspect HAVE_WORKING_O_NOFOLLOW
rather than O_NOFOLLOW, when testing whether it's possible to
avoid a race condition reliably.
* savewd.c (savewd_chdir): Likewise.
[m4/ChangeLog]
* fcntl_h.m4 (gl_FCNTL_H): Define HAVE_WORKING_O_NOFOLLOW instead
of O_NOFOLLOW_IS_INEFFECTIVE. Define HAVE_WORKING_O_NOATIME if
O_NOATIME works.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Thu, 05 Oct 2006 21:38:10 +0000 |
parents | cb56735ed8f5 |
children | 830788a4cbd4 |
files | lib/ChangeLog lib/fcntl_.h lib/fts.c lib/savewd.c m4/ChangeLog m4/fcntl_h.m4 |
diffstat | 6 files changed, 62 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,5 +1,12 @@ 2006-10-05 Paul Eggert <eggert@cs.ucla.edu> + * fcntl_.h (O_NOFOLLOW): Don't depend on O_NOFOLLOW_IS_INEFFECTIVE; + we now test for that separately. + * fts.c (fts_safe_changedir): Inspect HAVE_WORKING_O_NOFOLLOW + rather than O_NOFOLLOW, when testing whether it's possible to + avoid a race condition reliably. + * savewd.c (savewd_chdir): Likewise. + Remove macros that are no longer needed now that stdint.h is reliable. * fsusage.c (UINTMAX_MAX): Remove.
--- a/lib/fcntl_.h +++ b/lib/fcntl_.h @@ -59,9 +59,6 @@ # define O_NOCTTY 0 #endif -#ifdef O_NOFOLLOW_IS_INEFFECTIVE -# undef O_NOFOLLOW -#endif #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif
--- a/lib/fts.c +++ b/lib/fts.c @@ -1421,7 +1421,7 @@ general (when the target is not ".."), diropen's use of O_NOFOLLOW ensures we don't mistakenly follow a symlink, so we can avoid the expense of this fstat. */ - if (ISSET(FTS_LOGICAL) || O_NOFOLLOW == 0 + if (ISSET(FTS_LOGICAL) || ! HAVE_WORKING_O_NOFOLLOW || (dir && STREQ (dir, ".."))) { struct stat sb;
--- a/lib/savewd.c +++ b/lib/savewd.c @@ -103,7 +103,8 @@ /* Open the directory if requested, or if avoiding a race condition is requested and possible. */ - if (open_result || (options & (O_NOFOLLOW ? SAVEWD_CHDIR_NOFOLLOW : 0))) + if (open_result + || (options & (HAVE_WORKING_O_NOFOLLOW ? SAVEWD_CHDIR_NOFOLLOW : 0))) { fd = open (dir, (O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK
--- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,9 @@ +2006-10-05 Paul Eggert <eggert@cs.ucla.edu> + + * fcntl_h.m4 (gl_FCNTL_H): Define HAVE_WORKING_O_NOFOLLOW instead + of O_NOFOLLOW_IS_INEFFECTIVE. Define HAVE_WORKING_O_NOATIME if + O_NOATIME works. + 2006-10-01 Bruno Haible <bruno@clisp.org> Make it possible to invoke AC_GNU_SOURCE after gl_LOCK_EARLY.
--- a/m4/fcntl_h.m4 +++ b/m4/fcntl_h.m4 @@ -15,6 +15,9 @@ #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> + #ifndef O_NOATIME + #define O_NOATIME 0 + #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif @@ -24,23 +27,52 @@ O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; ]], - [[static char const sym[] = "conftest.sym"; - if (O_NOFOLLOW) - { - if (symlink (".", sym) != 0) - return 1; - if (0 <= open (sym, O_RDONLY | O_NOFOLLOW)) - return 1; - } - return !constants;]])], + [[ + int status = !constants; + { + static char const sym[] = "conftest.sym"; + if (symlink (".", sym) != 0 + || close (open (sym, O_RDONLY | O_NOFOLLOW)) == 0) + status |= 32; + } + { + static char const file[] = "confdefs.h"; + int fd = open (file, O_RDONLY | O_NOATIME); + char c; + struct stat st0, st1; + if (fd < 0 + || fstat (fd, &st0) != 0 + || sleep (1) != 0 + || read (fd, &c, 1) != 1 + || close (fd) != 0 + || stat (file, &st1) != 0 + || st1.st_mtime <= st0.st_mtime + || close (fd) != 0) + status |= 64; + } + return status;]])], [gl_cv_header_working_fcntl_h=yes], - [gl_cv_header_working_fcntl_h=no], + [case $? in #( + 32) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( + 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( + 96) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( + *) gl_cv_header_working_fcntl_h='no';; + esac], [gl_cv_header_working_fcntl_h=cross-compiling])]) - if test $gl_cv_header_working_fcntl_h != yes; then - AC_DEFINE([O_NOFOLLOW_IS_INEFFECTIVE], 1, - [Define to 1 if O_NOFOLLOW is ineffective.]) - fi + case $gl_cv_header_working_fcntl_h in #( + *O_NOATIME* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], + [Define to 1 if O_NOATIME works.]) + + case $gl_cv_header_working_fcntl_h in #( + *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], + [Define to 1 if O_NOFOLLOW works.]) gl_ABSOLUTE_HEADER([fcntl.h]) ABSOLUTE_FCNTL_H=\"$gl_cv_absolute_fcntl_h\"