dirfd: Avoid link error on AIX 7.1.
authorBruno Haible <bruno@clisp.org>
Fri, 30 Jul 2010 21:54:44 +0000 (23:54 +0200)
committerBruno Haible <bruno@clisp.org>
Fri, 30 Jul 2010 22:42:36 +0000 (00:42 +0200)
ChangeLog
doc/posix-functions/dirfd.texi
lib/dirent.in.h
m4/dirent_h.m4
m4/dirfd.m4
modules/dirent

index 9b86422..54678bd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2010-07-30  Bruno Haible  <bruno@clisp.org>
+
+       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  <eblake@redhat.com>
 
        strtod: next round of AIX fixes
index d79c2db..d0c58bc 100644 (file)
@@ -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:
index e684928..8414f26 100644 (file)
@@ -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
index 361296a..8d9d565 100644 (file)
@@ -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])
 ])
index 7fefa2e..48b7bae 100644 (file)
@@ -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,
index 8783d83..42a70f4 100644 (file)
@@ -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)' \