Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- We need to send exclude info from the client to a server-receiver
[rsync/rsync.git]
/
generator.c
diff --git
a/generator.c
b/generator.c
index
0a63f00
..
b7aa8cf
100644
(file)
--- 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 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;
extern int preserve_hard_links;
extern int preserve_perms;
extern int preserve_uid;
@@
-325,10
+326,10
@@
int unchanged_attrs(struct file_struct *file, STRUCT_STAT *st)
&& (st->st_mode & CHMOD_BITS) != (file->mode & CHMOD_BITS))
return 0;
&& (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;
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;
return 0;
return 1;
@@
-351,10
+352,10
@@
void itemize(struct file_struct *file, int ndx, int statret, STRUCT_STAT *st,
if (preserve_perms
&& (file->mode & CHMOD_BITS) != (st->st_mode & CHMOD_BITS))
iflags |= ITEM_REPORT_PERMS;
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;
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;
iflags |= ITEM_REPORT_GROUP;
} else
iflags |= ITEM_IS_NEW;
@@
-986,7
+987,8
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
return;
}
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,
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;
&& 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",
statret = -1;
if (verbose > 2) {
rprintf(FINFO,"mknod(%s,0%o,0x%x)\n",