Ignore when preserving extended attributes is not supported or allowed

* src/common.h (ENOTSUP): Make sure this error code is defined.
* src/util.c (set_file_attributes): Ignore ENOSYS, ENOTSUP, and EPERM errors.
This commit is contained in:
Andreas Gruenbacher 2012-09-21 22:55:52 +02:00
parent 1d9d403394
commit d24f630fbc
2 changed files with 13 additions and 6 deletions

View File

@ -214,3 +214,7 @@ bool merge_hunk (int hunk, struct outstate *, lin where, bool *);
#else
# define merge_hunk(hunk, outstate, where, somefailed) false
#endif
#ifndef ENOTSUP
#define ENOTSUP (-1)
#endif

View File

@ -179,10 +179,13 @@ copy_attr_error (struct error_context *ctx, char const *fmt, ...)
int err = errno;
va_list ap;
/* use verror module to print error message */
va_start (ap, fmt);
verror (0, err, fmt, ap);
va_end (ap);
if (err != ENOSYS && err != ENOTSUP && err != EPERM)
{
/* use verror module to print error message */
va_start (ap, fmt);
verror (0, err, fmt, ap);
va_end (ap);
}
}
static char const *
@ -274,9 +277,9 @@ set_file_attributes (char const *to, enum file_attributes attr,
quotearg (to));
}
if (attr & FA_XATTRS)
if (copy_attr (from, to))
if (copy_attr (from, to) != 0
&& errno != ENOSYS && errno != ENOTSUP && errno != EPERM)
fatal_exit (0);
/* FIXME: There may be other attributes to preserve. */
if (attr & FA_MODE)
{
#if 0 && defined HAVE_LCHMOD