+2008-06-07 Bruno Haible <bruno@clisp.org>
+
+ * lib/set-mode-acl.c (chmod_or_fchmod): Document return value
+ precisely.
+ * lib/copy-acl.c (qcopy_acl): Trivial code simplifications.
+
2008-06-07 Bruno Haible <bruno@clisp.org>
* lib/copy-acl.c (qcopy_acl): Make the #if branches independent.
{
int saved_errno = errno;
- if (ACL_NOT_WELL_SUPPORTED (errno))
+ if (ACL_NOT_WELL_SUPPORTED (errno) && !acl_access_nontrivial (acl))
{
- int nontrivial = acl_access_nontrivial (acl);
-
acl_free (acl);
-
- if (!nontrivial)
- {
- if (chmod_or_fchmod (dst_name, dest_desc, mode) != 0)
- saved_errno = errno;
- else
- return 0;
- }
- else
- chmod_or_fchmod (dst_name, dest_desc, mode);
+ return chmod_or_fchmod (dst_name, dest_desc, mode);
}
else
{
acl_free (acl);
chmod_or_fchmod (dst_name, dest_desc, mode);
+ errno = saved_errno;
+ return -1;
}
- errno = saved_errno;
- return -1;
}
else
acl_free (acl);
/* If DESC is a valid file descriptor use fchmod to change the
file's mode to MODE on systems that have fchown. On systems
that don't have fchown and if DESC is invalid, use chown on
- NAME instead. */
+ NAME instead.
+ Return 0 if successful. Return -1 and set errno upon failure. */
int
chmod_or_fchmod (const char *name, int desc, mode_t mode)