From c098d6b8a714de15c81ee72f86f9b7c268554682 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 9 Nov 2011 16:11:40 -0800 Subject: [PATCH] fstatat: work with cross-compilation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Problem reported by Ludovic Courtès in . * 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. --- ChangeLog | 11 +++++++++++ lib/fstatat.c | 6 +++--- m4/fstatat.m4 | 17 +++++++++-------- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index f4ba7252f..f8c765bfe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2011-11-09 Paul Eggert + + fstatat: work with cross-compilation + Problem reported by Ludovic Courtès in + . + * 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 Improve MODULES.html output. diff --git a/lib/fstatat.c b/lib/fstatat.c index 4b01d6660..e7b0a09a1 100644 --- a/lib/fstatat.c +++ b/lib/fstatat.c @@ -45,7 +45,7 @@ orig_fstatat (int fd, char const *filename, struct stat *buf, int flags) #include #include -#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 @@ rpl_fstatat (int fd, char const *file, struct stat *st, int flag) return result; } -#else /* !HAVE_FSTATAT || FSTATAT_ZERO_FLAG_BROKEN */ +#else /* ! (HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG) */ /* On mingw, the gnulib defines `stat' as a function-like macro; but using it in AT_FUNC_F2 causes compilation failure @@ -118,7 +118,7 @@ stat_func (char const *name, struct stat *st) 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 diff --git a/m4/fstatat.m4 b/m4/fstatat.m4 index 58025372e..df539eb8e 100644 --- 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 @@ AC_DEFUN([gl_FUNC_FSTATAT], dnl . 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 @@ -35,15 +34,17 @@ AC_DEFUN([gl_FUNC_FSTATAT], 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 -- 2.11.0