X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/0e82af2d27d1db8cad2d7621a2923c9ba9d5a033..b5c6a6aeeb7d526e023454ea681b7381945bced8:/generator.c diff --git a/generator.c b/generator.c index fb0bc2dd..b7aa8cfa 100644 --- a/generator.c +++ b/generator.c @@ -38,6 +38,7 @@ extern int relative_paths; 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; @@ -986,7 +987,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, 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, @@ -1007,7 +1009,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, && 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",