extern int keep_dirlinks;
extern int preserve_links;
extern int preserve_devices;
+extern int preserve_specials;
extern int preserve_hard_links;
extern int preserve_perms;
extern int preserve_uid;
&& (st->st_mode & CHMOD_BITS) != (file->mode & CHMOD_BITS))
return 0;
- if (am_root && preserve_uid && st->st_uid != file->ids->uid)
+ if (am_root && preserve_uid && st->st_uid != file->uid)
return 0;
- if (preserve_gid && file->ids->gid != GID_NONE && st->st_gid != file->ids->gid)
+ if (preserve_gid && file->gid != GID_NONE && st->st_gid != file->gid)
return 0;
return 1;
if (preserve_perms
&& (file->mode & CHMOD_BITS) != (st->st_mode & CHMOD_BITS))
iflags |= ITEM_REPORT_PERMS;
- if (preserve_uid && am_root && file->ids->uid != st->st_uid)
+ if (preserve_uid && am_root && file->uid != st->st_uid)
iflags |= ITEM_REPORT_OWNER;
- if (preserve_gid && file->ids->gid != GID_NONE
- && st->st_gid != file->ids->gid)
+ if (preserve_gid && file->gid != GID_NONE
+ && st->st_gid != file->gid)
iflags |= ITEM_REPORT_GROUP;
} else
iflags |= ITEM_IS_NEW;
return;
}
- if (am_root && preserve_devices && IS_DEVICE(file->mode)) {
+ if ((am_root && preserve_devices && IS_DEVICE(file->mode))
+ || (preserve_specials && IS_SPECIAL(file->mode))) {
if (statret != 0
&& (basis_dir[0] != NULL && can_link_devices)) {
if (try_dests_non(file, fname, ndx, itemizing,
&& hard_link_check(file, ndx, fname, -1, &st,
itemizing, code, HL_SKIP))
return;
- if (!IS_DEVICE(st.st_mode))
+ if ((IS_DEVICE(file->mode) && !IS_DEVICE(st.st_mode))
+ || (IS_SPECIAL(file->mode) && !IS_SPECIAL(st.st_mode)))
statret = -1;
if (verbose > 2) {
rprintf(FINFO,"mknod(%s,0%o,0x%x)\n",