- if (am_root < 0 && name_len == XSTAT_LEN + 1
- && name[RPRE_LEN] == '%' && strcmp(name, XSTAT_ATTR) == 0)
+ /* No rsync.%FOO attributes are copied w/o 2 -X options. */
+ if (preserve_xattrs < 2 && name_len > RPRE_LEN
+ && name[RPRE_LEN] == '%' && HAS_PREFIX(name, RSYNC_PREFIX))
- if (am_root < 0 && name_len == XSTAT_LEN + 1
- && name[RPRE_LEN] == '%' && strcmp(name, XSTAT_ATTR) == 0) {
+ /* No rsync.%FOO attributes are copied w/o 2 -X options. */
+ if (preserve_xattrs < 2 && name_len > RPRE_LEN
+ && name[RPRE_LEN] == '%' && HAS_PREFIX(name, RSYNC_PREFIX)) {
/* xst.st_mode will be 0 if there's no current stat xattr */
if (xst.st_mode && sys_lremovexattr(fname, XSTAT_ATTR) < 0) {
rsyserr(FERROR, errno,
/* xst.st_mode will be 0 if there's no current stat xattr */
if (xst.st_mode && sys_lremovexattr(fname, XSTAT_ATTR) < 0) {
rsyserr(FERROR, errno,
char buf[256];
int len = snprintf(buf, sizeof buf, "%o %u,%u %u:%u",
to_wire_mode(fmode),
(int)major(rdev), (int)minor(rdev),
char buf[256];
int len = snprintf(buf, sizeof buf, "%o %u,%u %u:%u",
to_wire_mode(fmode),
(int)major(rdev), (int)minor(rdev),
if (sys_lsetxattr(fname, XSTAT_ATTR, buf, len) < 0) {
if (errno == EPERM && S_ISLNK(fst.st_mode))
return 0;
if (sys_lsetxattr(fname, XSTAT_ATTR, buf, len) < 0) {
if (errno == EPERM && S_ISLNK(fst.st_mode))
return 0;