New module 'fmaf'.
[gnulib.git] / m4 / fstatat.m4
1 # fstatat.m4 serial 1
2 dnl Copyright (C) 2004-2011 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
6
7 # Written by Jim Meyering.
8
9 # If we have the fstatat function, and it has the bug (in AIX 7.1)
10 # that it does not fill in st_size correctly, use the replacement function.
11 AC_DEFUN([gl_FUNC_FSTATAT],
12 [
13   AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
14   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
15   AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
16   AC_CHECK_FUNCS_ONCE([fstatat])
17
18   if test $ac_cv_func_fstatat = no; then
19     HAVE_FSTATAT=0
20   else
21     dnl Test for an AIX 7.1 bug; see
22     dnl <http://lists.gnu.org/archive/html/bug-tar/2011-09/msg00015.html>.
23     AC_CACHE_CHECK([whether fstatat (..., 0) works],
24       [gl_cv_func_fstatat_zero_flag],
25       [gl_cv_func_fstatat_zero_flag=no
26        AC_RUN_IFELSE(
27          [AC_LANG_SOURCE(
28             [[
29               #include <fcntl.h>
30               #include <sys/stat.h>
31               int
32               main (void)
33               {
34                 struct stat a;
35                 return fstatat (AT_FDCWD, ".", &a, 0) != 0;
36               }
37             ]])],
38          [gl_cv_func_fstatat_zero_flag=yes])])
39
40     case $gl_cv_func_fstatat_zero_flag+$gl_cv_func_lstat_dereferences_slashed_symlink in
41     yes+yes) ;;
42     *) REPLACE_FSTATAT=1
43        if test $gl_cv_func_fstatat_zero_flag != yes; then
44          AC_DEFINE([FSTATAT_ZERO_FLAG_BROKEN], [1],
45            [Define to 1 if fstatat (..., 0) does not work,
46             as in AIX 7.1.])
47        fi
48        ;;
49     esac
50   fi
51 ])