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
Made delete_one() handle a failed rmdir on a symlink when
[rsync/rsync.git]
/
receiver.c
diff --git
a/receiver.c
b/receiver.c
index
c7cde82
..
f39a9e5
100644
(file)
--- a/
receiver.c
+++ b/
receiver.c
@@
-30,6
+30,7
@@
extern struct stats stats;
extern int dry_run;
extern int am_server;
extern int relative_paths;
extern int dry_run;
extern int am_server;
extern int relative_paths;
+extern int keep_dirlinks;
extern int preserve_hard_links;
extern int preserve_perms;
extern int cvs_exclude;
extern int preserve_hard_links;
extern int preserve_perms;
extern int cvs_exclude;
@@
-46,6
+47,7
@@
extern int module_id;
extern int ignore_errors;
extern int orig_umask;
extern int keep_partial;
extern int ignore_errors;
extern int orig_umask;
extern int keep_partial;
+extern int checksum_seed;
static void delete_one(char *fn, int is_dir)
{
static void delete_one(char *fn, int is_dir)
{
@@
-58,6
+60,8
@@
static void delete_one(char *fn, int is_dir)
}
} else {
if (do_rmdir(fn) != 0) {
}
} else {
if (do_rmdir(fn) != 0) {
+ if (errno == ENOTDIR && keep_dirlinks)
+ return delete_one(fn, 0);
if (errno != ENOTEMPTY && errno != EEXIST) {
rsyserr(FERROR, errno,
"delete_one: rmdir %s failed",
if (errno != ENOTEMPTY && errno != EEXIST) {
rsyserr(FERROR, errno,
"delete_one: rmdir %s failed",
@@
-206,7
+210,7
@@
static int receive_data(int f_in,struct map_struct *mapbuf,int fd,char *fname,
read_sum_head(f_in, &sum);
read_sum_head(f_in, &sum);
- sum_init();
+ sum_init(
checksum_seed
);
while ((i = recv_token(f_in, &data)) != 0) {
if (do_progress)
while ((i = recv_token(f_in, &data)) != 0) {
if (do_progress)