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
Use umask kluge from rsync.fns to try to get rid of a potential
[rsync/rsync.git]
/
flist.c
diff --git
a/flist.c
b/flist.c
index
ad02b89
..
5526e20
100644
(file)
--- a/
flist.c
+++ b/
flist.c
@@
-1524,8
+1524,8
@@
static void clean_flist(struct file_list *flist, int strip_root, int no_dups)
}
/* Make sure that if we unduplicate '.', that we don't
* lose track of a user-specified top directory. */
}
/* Make sure that if we unduplicate '.', that we don't
* lose track of a user-specified top directory. */
- if (flist->files[drop]->flags & FLAG_TOP_DIR)
-
flist->files[keep]->flags |= FLAG_TOP_DIR
;
+ flist->files[keep]->flags |= flist->files[drop]->flags
+
& (FLAG_TOP_DIR|FLAG_DEL_HERE)
;
clear_file(drop, flist);
clear_file(drop, flist);
@@
-1680,8
+1680,13
@@
int f_name_cmp(struct file_struct *f1, struct file_struct *f2)
break;
case s_SLASH:
type1 = S_ISDIR(f1->mode) ? t_path : t_ITEM;
break;
case s_SLASH:
type1 = S_ISDIR(f1->mode) ? t_path : t_ITEM;
- state1 = s_BASE;
c1 = (uchar*)f1->basename;
c1 = (uchar*)f1->basename;
+ if (type1 == t_PATH && *c1 == '.' && !c1[1]) {
+ type1 = t_ITEM;
+ state1 = s_TRAILING;
+ c1 = (uchar*)"";
+ } else
+ state1 = s_BASE;
break;
case s_BASE:
state1 = s_TRAILING;
break;
case s_BASE:
state1 = s_TRAILING;
@@
-1705,8
+1710,13
@@
int f_name_cmp(struct file_struct *f1, struct file_struct *f2)
break;
case s_SLASH:
type2 = S_ISDIR(f2->mode) ? t_path : t_ITEM;
break;
case s_SLASH:
type2 = S_ISDIR(f2->mode) ? t_path : t_ITEM;
- state2 = s_BASE;
c2 = (uchar*)f2->basename;
c2 = (uchar*)f2->basename;
+ if (type2 == t_PATH && *c2 == '.' && !c2[1]) {
+ type2 = t_ITEM;
+ state2 = s_TRAILING;
+ c2 = (uchar*)"";
+ } else
+ state2 = s_BASE;
break;
case s_BASE:
state2 = s_TRAILING;
break;
case s_BASE:
state2 = s_TRAILING;