changeset 16071:1bf33e67ddd8

fstatat: work with cross-compilation Problem reported by Ludovic Courtès in <http://lists.gnu.org/archive/html/bug-gnulib/2011-11/msg00136.html>. * m4/fstatat.m4 (gl_FUNC_FSTATAT): When cross-compiling, report "cross-compiling" and assume the bug is present. Replace FSTATAT_ZERO_FLAG_BROKEN with HAVE_WORKING_FSTATAT_ZERO_FLAG with an inverted sense, to be more conservative about our assumptions. * lib/fstatat.c (rpl_fstatat): Adjust to renamed macro.
author Paul Eggert <eggert@cs.ucla.edu>
date Wed, 09 Nov 2011 16:11:40 -0800
parents 4aded9fb6c6b
children 511350e22a48
files ChangeLog lib/fstatat.c m4/fstatat.m4
diffstat 3 files changed, 23 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2011-11-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+	fstatat: work with cross-compilation
+	Problem reported by Ludovic Courtès in
+	<http://lists.gnu.org/archive/html/bug-gnulib/2011-11/msg00136.html>.
+	* m4/fstatat.m4 (gl_FUNC_FSTATAT): When cross-compiling, report
+	"cross-compiling" and assume the bug is present.  Replace
+	FSTATAT_ZERO_FLAG_BROKEN with HAVE_WORKING_FSTATAT_ZERO_FLAG with
+	an inverted sense, to be more conservative about our assumptions.
+	* lib/fstatat.c (rpl_fstatat): Adjust to renamed macro.
+
 2011-11-09  Bruno Haible  <bruno@clisp.org>
 
 	Improve MODULES.html output.
--- a/lib/fstatat.c
+++ b/lib/fstatat.c
@@ -45,7 +45,7 @@
 #include <fcntl.h>
 #include <string.h>
 
-#if HAVE_FSTATAT && !FSTATAT_ZERO_FLAG_BROKEN
+#if HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG
 
 # ifndef LSTAT_FOLLOWS_SLASHED_SYMLINK
 #  define LSTAT_FOLLOWS_SLASHED_SYMLINK 0
@@ -90,7 +90,7 @@
   return result;
 }
 
-#else /* !HAVE_FSTATAT || FSTATAT_ZERO_FLAG_BROKEN */
+#else /* ! (HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG) */
 
 /* On mingw, the gnulib <sys/stat.h> defines `stat' as a function-like
    macro; but using it in AT_FUNC_F2 causes compilation failure
@@ -118,7 +118,7 @@
    then give a diagnostic and exit nonzero.
    Otherwise, this function works just like Solaris' fstatat.  */
 
-# if FSTATAT_ZERO_FLAG_BROKEN
+# if ! HAVE_WORKING_FSTATAT_ZERO_FLAG
 #  define AT_FUNC_NAME rpl_fstatat
 # else
 #  define AT_FUNC_NAME fstatat
--- a/m4/fstatat.m4
+++ b/m4/fstatat.m4
@@ -1,4 +1,4 @@
-# fstatat.m4 serial 1
+# fstatat.m4 serial 2
 dnl Copyright (C) 2004-2011 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -22,8 +22,7 @@
     dnl <http://lists.gnu.org/archive/html/bug-tar/2011-09/msg00015.html>.
     AC_CACHE_CHECK([whether fstatat (..., 0) works],
       [gl_cv_func_fstatat_zero_flag],
-      [gl_cv_func_fstatat_zero_flag=no
-       AC_RUN_IFELSE(
+      [AC_RUN_IFELSE(
          [AC_LANG_SOURCE(
             [[
               #include <fcntl.h>
@@ -35,15 +34,17 @@
                 return fstatat (AT_FDCWD, ".", &a, 0) != 0;
               }
             ]])],
-         [gl_cv_func_fstatat_zero_flag=yes])])
+         [gl_cv_func_fstatat_zero_flag=yes],
+         [gl_cv_func_fstatat_zero_flag=no],
+         [gl_cv_func_fstatat_zero_flag=cross-compiling])])
 
     case $gl_cv_func_fstatat_zero_flag+$gl_cv_func_lstat_dereferences_slashed_symlink in
     yes+yes) ;;
     *) REPLACE_FSTATAT=1
-       if test $gl_cv_func_fstatat_zero_flag != yes; then
-         AC_DEFINE([FSTATAT_ZERO_FLAG_BROKEN], [1],
-           [Define to 1 if fstatat (..., 0) does not work,
-            as in AIX 7.1.])
+       if test $gl_cv_func_fstatat_zero_flag = yes; then
+         AC_DEFINE([HAVE_WORKING_FSTATAT_ZERO_FLAG], [1],
+           [Define to 1 if fstatat (..., 0) works.
+            For example, it does not work in AIX 7.1.])
        fi
        ;;
     esac