From: Bruno Haible Date: Fri, 30 Jul 2010 21:54:44 +0000 (+0200) Subject: dirfd: Avoid link error on AIX 7.1. X-Git-Tag: v0.1~3979 X-Git-Url: http://erislabs.net/gitweb/?p=gnulib.git;a=commitdiff_plain;h=d614713a565235b36338496fe3b67a7932a8c78a dirfd: Avoid link error on AIX 7.1. --- diff --git a/ChangeLog b/ChangeLog index 9b86422b0..54678bd75 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2010-07-30 Bruno Haible + + dirfd: Avoid link error on AIX 7.1. + * lib/dirent.in.h (dirfd): Use modern idiom with REPLACE_DIRFD. + * m4/dirfd.m4 (gl_FUNC_DIRFD): If the function is declared but does not + exist, set REPLACE_DIRFD. + * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): Initialize REPLACE_DIRFD. + * modules/dirent (Makefile.am): Substitute REPLACE_DIRFD. + * doc/posix-functions/dirfd.texi: Update. + Reported by Rainer Tammer. + 2010-07-30 Eric Blake strtod: next round of AIX fixes diff --git a/doc/posix-functions/dirfd.texi b/doc/posix-functions/dirfd.texi index d79c2dbb7..d0c58bc87 100644 --- a/doc/posix-functions/dirfd.texi +++ b/doc/posix-functions/dirfd.texi @@ -10,7 +10,7 @@ Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: -AIX 5.1, HP-UX 11, OSF/1 5.1, Solaris 10, mingw. +AIX 7.1, HP-UX 11, OSF/1 5.1, Solaris 10, mingw. @end itemize Portability problems not fixed by Gnulib: diff --git a/lib/dirent.in.h b/lib/dirent.in.h index e6849286b..8414f2636 100644 --- a/lib/dirent.in.h +++ b/lib/dirent.in.h @@ -50,11 +50,22 @@ _GL_CXXALIAS_SYS (closedir, int, (DIR *)); _GL_CXXALIASWARN (closedir); #if @GNULIB_DIRFD@ -# if !@HAVE_DECL_DIRFD@ && !defined dirfd /* Return the file descriptor associated with the given directory stream, or -1 if none exists. */ -_GL_EXTERN_C int dirfd (DIR *dir) _GL_ARG_NONNULL ((1)); +# if @REPLACE_DIRFD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef dirfd +# define dirfd rpl_dirfd +# endif +_GL_FUNCDECL_RPL (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (dirfd, int, (DIR *)); +# else +# if !(@HAVE_DECL_DIRFD@ || defined dirfd) +_GL_FUNCDECL_SYS (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (dirfd, int, (DIR *)); # endif +_GL_CXXALIASWARN (dirfd); #elif defined GNULIB_POSIXCHECK # undef dirfd # if HAVE_RAW_DECL_DIRFD diff --git a/m4/dirent_h.m4 b/m4/dirent_h.m4 index 361296a6c..8d9d56547 100644 --- a/m4/dirent_h.m4 +++ b/m4/dirent_h.m4 @@ -1,4 +1,4 @@ -# dirent_h.m4 serial 12 +# dirent_h.m4 serial 13 dnl Copyright (C) 2008-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -51,6 +51,7 @@ AC_DEFUN([gl_DIRENT_H_DEFAULTS], HAVE_SCANDIR=1; AC_SUBST([HAVE_SCANDIR]) HAVE_ALPHASORT=1; AC_SUBST([HAVE_ALPHASORT]) REPLACE_CLOSEDIR=0; AC_SUBST([REPLACE_CLOSEDIR]) + REPLACE_DIRFD=0; AC_SUBST([REPLACE_DIRFD]) REPLACE_FDOPENDIR=0; AC_SUBST([REPLACE_FDOPENDIR]) REPLACE_OPENDIR=0; AC_SUBST([REPLACE_OPENDIR]) ]) diff --git a/m4/dirfd.m4 b/m4/dirfd.m4 index 7fefa2e48..48b7bae1a 100644 --- a/m4/dirfd.m4 +++ b/m4/dirfd.m4 @@ -1,4 +1,4 @@ -# serial 17 -*- Autoconf -*- +# serial 18 -*- Autoconf -*- dnl Find out how to get the file descriptor associated with an open DIR*. @@ -40,11 +40,13 @@ AC_DEFUN([gl_FUNC_DIRFD], gl_cv_func_dirfd_macro=yes, gl_cv_func_dirfd_macro=no)]) - # Use the replacement only if we have no function, macro, - # or declaration with that name. - if test $ac_cv_func_dirfd,$ac_cv_have_decl_dirfd,$gl_cv_func_dirfd_macro \ - = no,no,no; then - AC_REPLACE_FUNCS([dirfd]) + # Use the replacement only if we have no function or macro with that name. + if test $ac_cv_func_dirfd,$gl_cv_func_dirfd_macro = no,no; then + if test $ac_cv_have_decl_dirfd = yes; then + # If the system declares dirfd already, let's declare rpl_dirfd instead. + REPLACE_DIRFD=1 + fi + AC_LIBOBJ([dirfd]) AC_CACHE_CHECK( [how to get the file descriptor associated with an open DIR*], gl_cv_sys_dir_fd_member_name, diff --git a/modules/dirent b/modules/dirent index 8783d83a6..42a70f469 100644 --- a/modules/dirent +++ b/modules/dirent @@ -36,6 +36,7 @@ dirent.h: dirent.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \ -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \ -e 's|@''REPLACE_CLOSEDIR''@|$(REPLACE_CLOSEDIR)|g' \ + -e 's|@''REPLACE_DIRFD''@|$(REPLACE_DIRFD)|g' \ -e 's|@''REPLACE_FDOPENDIR''@|$(REPLACE_FDOPENDIR)|g' \ -e 's|@''REPLACE_OPENDIR''@|$(REPLACE_OPENDIR)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \