freopen: Don't crash if the filename argument is NULL.
[gnulib.git] / m4 / chown.m4
index 0dced4b..fa46981 100644 (file)
@@ -1,8 +1,8 @@
-# serial 22
+# serial 25
 # Determine whether we need the chown wrapper.
 
-dnl Copyright (C) 1997-2001, 2003-2005, 2007, 2009
-dnl Free Software Foundation, Inc.
+dnl Copyright (C) 1997-2001, 2003-2005, 2007, 2009-2011 Free Software
+dnl Foundation, Inc.
 
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -25,12 +25,10 @@ AC_DEFUN_ONCE([gl_FUNC_CHOWN],
   dnl mingw lacks chown altogether.
   if test $ac_cv_func_chown = no; then
     HAVE_CHOWN=0
-    AC_LIBOBJ([chown])
   else
     dnl Some old systems treated chown like lchown.
     if test $gl_cv_func_chown_follows_symlink = no; then
       REPLACE_CHOWN=1
-      AC_LIBOBJ([chown])
     fi
 
     dnl Some old systems tried to use uid/gid -1 literally.
@@ -38,11 +36,11 @@ AC_DEFUN_ONCE([gl_FUNC_CHOWN],
       AC_DEFINE([CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE], [1],
         [Define if chown is not POSIX compliant regarding IDs of -1.])
       REPLACE_CHOWN=1
-      AC_LIBOBJ([chown])
     fi
 
     dnl Solaris 9 ignores trailing slash.
     dnl FreeBSD 7.2 mishandles trailing slash on symlinks.
+    dnl Likewise for AIX 7.1.
     AC_CACHE_CHECK([whether chown honors trailing slash],
       [gl_cv_func_chown_slash_works],
       [touch conftest.file && rm -f conftest.link
@@ -61,7 +59,6 @@ AC_DEFUN_ONCE([gl_FUNC_CHOWN],
       AC_DEFINE([CHOWN_TRAILING_SLASH_BUG], [1],
         [Define to 1 if chown mishandles trailing slash.])
       REPLACE_CHOWN=1
-      AC_LIBOBJ([chown])
     fi
 
     dnl OpenBSD fails to update ctime if ownership does not change.
@@ -89,11 +86,6 @@ AC_DEFUN_ONCE([gl_FUNC_CHOWN],
       AC_DEFINE([CHOWN_CHANGE_TIME_BUG], [1], [Define to 1 if chown fails
         to change ctime when at least one argument was not -1.])
       REPLACE_CHOWN=1
-      AC_LIBOBJ([chown])
-    fi
-
-    if test $REPLACE_CHOWN = 1 && test $ac_cv_func_fchown = no; then
-      AC_LIBOBJ([fchown-stub])
     fi
   fi
 ])
@@ -110,24 +102,28 @@ AC_DEFUN_ONCE([gl_FUNC_CHOWN_FOLLOWS_SYMLINK],
 #include <stdlib.h>
 #include <errno.h>
 
-       int
-       main ()
-       {
-         char const *dangling_symlink = "conftest.dangle";
+        int
+        main ()
+        {
+          int result = 0;
+          char const *dangling_symlink = "conftest.dangle";
 
-         unlink (dangling_symlink);
-         if (symlink ("conftest.no-such", dangling_symlink))
-           abort ();
+          unlink (dangling_symlink);
+          if (symlink ("conftest.no-such", dangling_symlink))
+            abort ();
 
-         /* Exit successfully on a conforming system,
-            i.e., where chown must fail with ENOENT.  */
-         exit ( ! (chown (dangling_symlink, getuid (), getgid ()) != 0
-                   && errno == ENOENT));
-       }
-       ]])],
-       [gl_cv_func_chown_follows_symlink=yes],
-       [gl_cv_func_chown_follows_symlink=no],
-       [gl_cv_func_chown_follows_symlink=yes]
+          /* Exit successfully on a conforming system,
+             i.e., where chown must fail with ENOENT.  */
+          if (chown (dangling_symlink, getuid (), getgid ()) == 0)
+            result |= 1;
+          if (errno != ENOENT)
+            result |= 2;
+          return result;
+        }
+        ]])],
+        [gl_cv_func_chown_follows_symlink=yes],
+        [gl_cv_func_chown_follows_symlink=no],
+        [gl_cv_func_chown_follows_symlink=yes]
       )
     ]
   )