# fcntl-o.m4 serial 4 dnl Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. # Test whether the flags O_NOATIME and O_NOFOLLOW actually work. # Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. # Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. AC_DEFUN([gl_FCNTL_O_FLAGS], [ dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW. dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes dnl AC_GNU_SOURCE. m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], [AC_REQUIRE([AC_GNU_SOURCE])]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS_ONCE([symlink]) AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/stat.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> # include <stdlib.h> # defined sleep(n) _sleep ((n) * 1000) #endif #include <fcntl.h> #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; ]], [[ int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result;]])], [gl_cv_header_working_fcntl_h=yes], [case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) 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])]) 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.]) ])
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
argz.m4 | File | 2.56 KB | 0644 |
|
bison-i18n.m4 | File | 1.88 KB | 0644 |
|
codeset.m4 | File | 842 B | 0644 |
|
extern-inline.m4 | File | 4.27 KB | 0644 |
|
fcntl-o.m4 | File | 4.56 KB | 0644 |
|
fontutil.m4 | File | 13.83 KB | 0644 |
|
freetype2.m4 | File | 6.18 KB | 0644 |
|
gettext.m4 | File | 15.49 KB | 0644 |
|
glibc2.m4 | File | 830 B | 0644 |
|
glibc21.m4 | File | 907 B | 0644 |
|
gpg-error.m4 | File | 3.52 KB | 0644 |
|
iconv.m4 | File | 9.06 KB | 0644 |
|
intdiv0.m4 | File | 2.35 KB | 0644 |
|
intl.m4 | File | 11.84 KB | 0644 |
|
intldir.m4 | File | 917 B | 0644 |
|
intlmacosx.m4 | File | 2.47 KB | 0644 |
|
intmax.m4 | File | 1.1 KB | 0644 |
|
inttypes-pri.m4 | File | 1.22 KB | 0644 |
|
inttypes_h.m4 | File | 1020 B | 0644 |
|
lcmessage.m4 | File | 1.33 KB | 0644 |
|
lib-ld.m4 | File | 3.6 KB | 0644 |
|
lib-link.m4 | File | 32.28 KB | 0644 |
|
lib-prefix.m4 | File | 8.27 KB | 0644 |
|
libgcrypt.m4 | File | 4.62 KB | 0644 |
|
libtool.m4 | File | 279.78 KB | 0644 |
|
libxml.m4 | File | 7.7 KB | 0644 |
|
libxslt.m4 | File | 7.93 KB | 0644 |
|
lock.m4 | File | 1.43 KB | 0644 |
|
longlong.m4 | File | 4.63 KB | 0644 |
|
ltdl.m4 | File | 26.42 KB | 0644 |
|
ltoptions.m4 | File | 12.06 KB | 0644 |
|
ltsugar.m4 | File | 4.27 KB | 0644 |
|
ltversion.m4 | File | 690 B | 0644 |
|
lt~obsolete.m4 | File | 5.98 KB | 0644 |
|
mysql.m4 | File | 4.53 KB | 0644 |
|
nls.m4 | File | 1.19 KB | 0644 |
|
pkg.m4 | File | 7.15 KB | 0644 |
|
po.m4 | File | 18.52 KB | 0644 |
|
printf-posix.m4 | File | 1.54 KB | 0644 |
|
progtest.m4 | File | 3.02 KB | 0644 |
|
size_max.m4 | File | 2.99 KB | 0644 |
|
stdint_h.m4 | File | 995 B | 0644 |
|
threadlib.m4 | File | 14.8 KB | 0644 |
|
uintmax_t.m4 | File | 1.09 KB | 0644 |
|
visibility.m4 | File | 3.27 KB | 0644 |
|
wchar_t.m4 | File | 818 B | 0644 |
|
wint_t.m4 | File | 1.03 KB | 0644 |
|
xsize.m4 | File | 406 B | 0644 |
|