fcntl-h: check for AIX 7.1 bug with O_NOFOLLOW and O_CREAT
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 10 Sep 2012 20:37:18 +0000 (13:37 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 10 Sep 2012 20:37:43 +0000 (13:37 -0700)
* m4/fcntl-o.m4 (gl_FCNTL_O_FLAGS): Check for AIX 7.1 bug
that caused a GNU tar test failure.  Problem reported by Jez Wain; see
<http://lists.gnu.org/archive/html/bug-tar/2012-07/msg00018.html>.

ChangeLog
m4/fcntl-o.m4

index 282e060..18225e4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-09-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       fcntl-h: check for AIX 7.1 bug with O_NOFOLLOW and O_CREAT
+       * m4/fcntl-o.m4 (gl_FCNTL_O_FLAGS): Check for AIX 7.1 bug
+       that caused a GNU tar test failure.  Problem reported by Jez Wain; see
+       <http://lists.gnu.org/archive/html/bug-tar/2012-07/msg00018.html>.
+
 2012-09-06  Eric Blake  <eblake@redhat.com>
 
        net_if: give more details about the bug being fixed
index 9862741..a413810 100644 (file)
@@ -50,7 +50,18 @@ AC_DEFUN([gl_FCNTL_O_FLAGS],
             #if HAVE_SYMLINK
             {
               static char const sym[] = "conftest.sym";
-              if (symlink (".", sym) != 0)
+              if (symlink ("/dev/null", sym) != 0)
+                result |= 2;
+              else
+                {
+                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
+                  if (fd >= 0)
+                    {
+                      close (fd);
+                      result |= 1;
+                    }
+                }
+              if (unlink (sym) != 0 || symlink (".", sym) != 0)
                 result |= 2;
               else
                 {