X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/90a973fe8ae1ff16198271be561bbc6068cafb40..6ed6d7f5a8703d1d8702015c6a46d2ea4ee6be07:/flist.c diff --git a/flist.c b/flist.c index bc216eb9..35bbed1f 100644 --- a/flist.c +++ b/flist.c @@ -539,6 +539,7 @@ void receive_file_entry(struct file_struct **fptr, unsigned short flags, rdev_major = 0; uid = 0, gid = 0; *lastname = '\0'; + lastdir_len = -1; return; } @@ -745,7 +746,7 @@ struct file_struct *make_file(char *fname, char *basename, *dirname, *bp; unsigned short flags = 0; - if (!flist) /* lastdir isn't valid if flist is NULL */ + if (!flist || !flist->count) /* Ignore lastdir when invalid. */ lastdir_len = -1; if (strlcpy(thisname, fname, sizeof thisname) @@ -1517,11 +1518,17 @@ int f_name_cmp(struct file_struct *f1, struct file_struct *f2) if (!(c1 = (uchar*)f1->dirname)) { state1 = fnc_BASE; c1 = (uchar*)f1->basename; + } else if (!*c1) { + state1 = fnc_SLASH; + c1 = (uchar*)"/"; } else state1 = fnc_DIR; if (!(c2 = (uchar*)f2->dirname)) { state2 = fnc_BASE; c2 = (uchar*)f2->basename; + } else if (!*c2) { + state2 = fnc_SLASH; + c2 = (uchar*)"/"; } else state2 = fnc_DIR;