X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Ffcntl_h.m4;h=fe7dffdaa06e23e4624c7504d6d070faf3de58b0;hb=ce401f14c2ef12dc46725ffd6f076b75c6ec72a0;hp=35e4b514875e4fe20af0ee4774bbde62300f7616;hpb=4f8569913ab93ef1bd615457b60ae6bd07cf7173;p=gnulib.git diff --git a/m4/fcntl_h.m4 b/m4/fcntl_h.m4 index 35e4b5148..fe7dffdaa 100644 --- a/m4/fcntl_h.m4 +++ b/m4/fcntl_h.m4 @@ -15,6 +15,9 @@ AC_DEFUN([gl_FCNTL_H], #include #include #include + #ifndef O_NOATIME + #define O_NOATIME 0 + #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif @@ -24,23 +27,52 @@ AC_DEFUN([gl_FCNTL_H], 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\"