changeset 13544:e123501bb47c

copy-acl: ignore ENOTSUP on HP-UX Fixes Coreutils bug 6053. * lib/acl-internal.h (ACL_NOT_WELL_SUPPORTED): Move definition up, so that it is available for HP-UX. * lib/copy-acl.c (qcopy_acl): Use it. Reported by Patrick M. Callahan. Signed-off-by: Eric Blake <eblake@redhat.com>
author Pádraig Brady <P@draigBrady.com>
date Thu, 10 Jun 2010 15:12:48 +0100
parents 88145cbcc224
children 1531149632e8
files ChangeLog lib/acl-internal.h lib/copy-acl.c
diffstat 3 files changed, 23 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2010-08-10  Pádraig Brady <P@draigbrady.com>
+	and Eric Blake  <eblake@redhat.com>
+
+	copy-acl: ignore ENOTSUP on HP-UX
+	* lib/acl-internal.h (ACL_NOT_WELL_SUPPORTED): Move definition up,
+	so that it is available for HP-UX.
+	* lib/copy-acl.c (qcopy_acl): Use it.
+	Reported by Patrick M. Callahan.
+
 2010-08-10  Eric Blake  <eblake@redhat.com>
 
 	open, chown: relax license
--- a/lib/acl-internal.h
+++ b/lib/acl-internal.h
@@ -51,6 +51,18 @@
 # define fchmod(fd, mode) (-1)
 #endif
 
+/* Recognize some common errors such as from an NFS mount that does
+   not support ACLs, even when local drives do.  */
+#if defined __APPLE__ && defined __MACH__ /* MacOS X */
+# define ACL_NOT_WELL_SUPPORTED(Err) \
+     ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == ENOENT)
+#elif defined EOPNOTSUPP /* Tru64 NFS */
+# define ACL_NOT_WELL_SUPPORTED(Err) \
+     ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == EOPNOTSUPP)
+#else
+# define ACL_NOT_WELL_SUPPORTED(Err) \
+     ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY)
+#endif
 
 #if USE_ACL
 
@@ -125,17 +137,6 @@
 #   define MODE_INSIDE_ACL 1
 #  endif
 
-#  if defined __APPLE__ && defined __MACH__ /* MacOS X */
-#   define ACL_NOT_WELL_SUPPORTED(Err) \
-     ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == ENOENT)
-#  elif defined EOPNOTSUPP /* Tru64 NFS */
-#   define ACL_NOT_WELL_SUPPORTED(Err) \
-     ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == EOPNOTSUPP)
-#  else
-#   define ACL_NOT_WELL_SUPPORTED(Err) \
-     ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY)
-#  endif
-
 /* Return the number of entries in ACL.
    Return -1 and set errno upon failure to determine it.  */
 /* Define a replacement for acl_entries if needed. (Only Linux has it.)  */
--- a/lib/copy-acl.c
+++ b/lib/copy-acl.c
@@ -420,7 +420,7 @@
 
       if (count < 0)
         {
-          if (errno == ENOSYS || errno == EOPNOTSUPP)
+          if (ACL_NOT_WELL_SUPPORTED (errno))
             {
               count = 0;
               break;
@@ -455,7 +455,7 @@
     {
       int saved_errno = errno;
 
-      if (errno == ENOSYS || errno == EOPNOTSUPP)
+      if (ACL_NOT_WELL_SUPPORTED (errno))
         {
           struct stat source_statbuf;