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 handling of -R with --delete
[rsync/rsync.git]
/
rsync.c
diff --git
a/rsync.c
b/rsync.c
index
e359adc
..
c1ce0b5
100644
(file)
--- a/
rsync.c
+++ b/
rsync.c
@@
-649,6
+649,8
@@
static int delete_already_done(struct file_list *flist,int j)
exit_cleanup(1);
}
exit_cleanup(1);
}
+ name[strlen(name)-2] = 0;
+
p = strrchr(name,'/');
if (!p) {
free(name);
p = strrchr(name,'/');
if (!p) {
free(name);
@@
-656,6
+658,8
@@
static int delete_already_done(struct file_list *flist,int j)
}
*p = 0;
}
*p = 0;
+ strcat(name,"/.");
+
while (low != high) {
int mid = (low+high)/2;
int ret = strcmp(f_name(flist->files[flist_up(flist, mid)]),name);
while (low != high) {
int mid = (low+high)/2;
int ret = strcmp(f_name(flist->files[flist_up(flist, mid)]),name);
@@
-703,6
+707,8
@@
static void delete_files(struct file_list *flist)
if (!S_ISDIR(flist->files[j]->mode)) continue;
if (!S_ISDIR(flist->files[j]->mode)) continue;
+ if (strlen(name)<2 || strcmp(name+strlen(name)-2,"/.")!=0) continue;
+
if (delete_already_done(flist, j)) continue;
if (!(local_file_list = send_file_list(-1,1,&name)))
if (delete_already_done(flist, j)) continue;
if (!(local_file_list = send_file_list(-1,1,&name)))