extern int do_xfers;
extern int link_dest;
extern int preserve_acls;
+extern int preserve_xattrs;
extern int make_backups;
extern int protocol_version;
extern int remove_source_files;
int j = 0;
#ifdef SUPPORT_ACLS
alt_sx.acc_acl = alt_sx.def_acl = NULL;
+#endif
+#ifdef SUPPORT_XATTRS
+ alt_sx.xattr = NULL;
#endif
do {
pathjoin(cmpbuf, MAXPATHLEN, basis_dir[j], fname);
sxp->st = alt_sx.st;
#ifdef SUPPORT_ACLS
if (preserve_acls && !S_ISLNK(file->mode)) {
- if (!ACL_READY(*sxp))
+ free_acl(sxp);
+ if (!ACL_READY(alt_sx))
get_acl(cmpbuf, sxp);
else {
sxp->acc_acl = alt_sx.acc_acl;
sxp->def_acl = alt_sx.def_acl;
+ alt_sx.acc_acl = alt_sx.def_acl = NULL;
}
}
#endif
- }
+#ifdef SUPPORT_XATTRS
+ if (preserve_xattrs) {
+ free_xattr(sxp);
+ if (!XATTR_READY(alt_sx))
+ get_xattr(cmpbuf, sxp);
+ else {
+ sxp->xattr = alt_sx.xattr;
+ alt_sx.xattr = NULL;
+ }
+ }
+#endif
+ } else {
#ifdef SUPPORT_ACLS
- else if (preserve_acls)
- free_acl(&alt_sx);
+ if (preserve_acls)
+ free_acl(&alt_sx);
+#endif
+#ifdef SUPPORT_XATTRS
+ if (preserve_xattrs)
+ free_xattr(&alt_sx);
#endif
+ }
}
if (maybe_hard_link(file, ndx, fname, statret, sxp, prev_name, &prev_st,
#ifdef SUPPORT_ACLS
prev_sx.acc_acl = prev_sx.def_acl = NULL;
#endif
+#ifdef SUPPORT_XATTRS
+ prev_sx.xattr = NULL;
+#endif
while ((ndx = prev_ndx) >= 0) {
int val;
#ifdef SUPPORT_ACLS
if (preserve_acls)
free_acl(&prev_sx);
+#endif
+#ifdef SUPPORT_XATTRS
+ if (preserve_xattrs)
+ free_xattr(&prev_sx);
#endif
if (val < 0)
continue;