From: Pádraig Brady Date: Thu, 10 Jun 2010 14:12:48 +0000 (+0100) Subject: copy-acl: ignore ENOTSUP on HP-UX X-Git-Tag: v0.1~3943 X-Git-Url: http://erislabs.net/gitweb/?p=gnulib.git;a=commitdiff_plain;h=91fd3b18b755b77c4bb3f7556ddedb055c16c834 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 --- diff --git a/ChangeLog b/ChangeLog index a9fdc9ce6..dffc9ed62 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2010-08-10 Pádraig Brady + and Eric Blake + + 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 open, chown: relax license diff --git a/lib/acl-internal.h b/lib/acl-internal.h index 676e57aba..7f9cde16d 100644 --- 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 @@ rpl_acl_set_fd (int fd, acl_t acl) # 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.) */ diff --git a/lib/copy-acl.c b/lib/copy-acl.c index c047913d4..421907de9 100644 --- a/lib/copy-acl.c +++ b/lib/copy-acl.c @@ -420,7 +420,7 @@ qcopy_acl (const char *src_name, int source_desc, const char *dst_name, if (count < 0) { - if (errno == ENOSYS || errno == EOPNOTSUPP) + if (ACL_NOT_WELL_SUPPORTED (errno)) { count = 0; break; @@ -455,7 +455,7 @@ qcopy_acl (const char *src_name, int source_desc, const char *dst_name, { int saved_errno = errno; - if (errno == ENOSYS || errno == EOPNOTSUPP) + if (ACL_NOT_WELL_SUPPORTED (errno)) { struct stat source_statbuf;