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
Fixed a bug in the sending of rdev when the high-bits match.
[rsync/rsync.git]
/
flist.c
diff --git
a/flist.c
b/flist.c
index
0906f39
..
0007656
100644
(file)
--- a/
flist.c
+++ b/
flist.c
@@
-33,6
+33,7
@@
extern int verbose;
extern int do_progress;
extern int am_root;
extern int am_server;
extern int do_progress;
extern int am_root;
extern int am_server;
+extern int am_daemon;
extern int always_checksum;
extern int module_id;
extern int ignore_errors;
extern int always_checksum;
extern int module_id;
extern int ignore_errors;
@@
-366,11
+367,12
@@
void send_file_entry(struct file_struct *file, int f, unsigned short base_flags)
} else
rdev = 0;
} else if (IS_DEVICE(mode)) {
} else
rdev = 0;
} else if (IS_DEVICE(mode)) {
- if ((file->u.rdev & ~
0xFF) == rdev_high)
+ if ((file->u.rdev & ~
(DEV64_T)0xFF) == rdev_high) {
flags |= XMIT_SAME_HIGH_RDEV;
flags |= XMIT_SAME_HIGH_RDEV;
- else {
rdev = file->u.rdev;
rdev = file->u.rdev;
- rdev_high = rdev & ~0xFF;
+ } else {
+ rdev = file->u.rdev;
+ rdev_high = rdev & ~(DEV64_T)0xFF;
}
}
}
}
}
}
@@
-593,7
+595,7
@@
void receive_file_entry(struct file_struct **fptr, unsigned short flags,
} else if (IS_DEVICE(mode)) {
if (!(flags & XMIT_SAME_HIGH_RDEV)) {
rdev = (DEV64_T)read_int(f);
} else if (IS_DEVICE(mode)) {
if (!(flags & XMIT_SAME_HIGH_RDEV)) {
rdev = (DEV64_T)read_int(f);
- rdev_high = rdev & ~0xFF;
+ rdev_high = rdev & ~
(DEV64_T)
0xFF;
} else
rdev = rdev_high | (DEV64_T)read_byte(f);
}
} else
rdev = rdev_high | (DEV64_T)read_byte(f);
}
@@
-747,18
+749,26
@@
struct file_struct *make_file(char *fname,
if (readlink_stat(thisname, &st, linkname) != 0) {
int save_errno = errno;
if (readlink_stat(thisname, &st, linkname) != 0) {
int save_errno = errno;
- if (errno == ENOENT && exclude_level != NO_EXCLUDES) {
+ if (errno == ENOENT) {
+ enum logcode c = am_daemon && protocol_version < 28
+ ? FERROR : FINFO;
/* either symlink pointing nowhere or file that
* was removed during rsync run; see if excluded
* before reporting an error */
/* either symlink pointing nowhere or file that
* was removed during rsync run; see if excluded
* before reporting an error */
- if (check_exclude_file(thisname, 0, exclude_level)) {
+ if (exclude_level != NO_EXCLUDES
+ && check_exclude_file(thisname, 0, exclude_level)) {
/* file is excluded anyway, ignore silently */
return NULL;
}
/* file is excluded anyway, ignore silently */
return NULL;
}
+ io_error |= IOERR_VANISHED;
+ rprintf(c, "file has vanished: %s\n",
+ full_fname(thisname));
+ }
+ else {
+ io_error |= IOERR_GENERAL;
+ rprintf(FERROR, "readlink %s failed: %s\n",
+ full_fname(thisname), strerror(save_errno));
}
}
- io_error |= IOERR_GENERAL;
- rprintf(FERROR, "readlink %s failed: %s\n",
- full_fname(thisname), strerror(save_errno));
return NULL;
}
return NULL;
}