X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/3556fe5d8640e5932676ca5ba1036332a59dc192..468d7668191980c337e37cd3980f80dcd8e9c0fd:/generator.c diff --git a/generator.c b/generator.c index 13749f0b..262ffe23 100644 --- a/generator.c +++ b/generator.c @@ -249,19 +249,24 @@ static void delete_in_dir(struct file_list *flist, char *fbuf, if (link_stat(fbuf, &st, keep_dirlinks) < 0) return; - if (one_file_system && file->flags & FLAG_TOP_DIR) - filesystem_dev = st.st_dev; + if (one_file_system) { + if (file->flags & FLAG_TOP_DIR) + filesystem_dev = st.st_dev; + else if (filesystem_dev != st.st_dev) + return; + } dirlist = get_dirlist(fbuf, dlen, 0); /* If an item in dirlist is not found in flist, delete it * from the filesystem. */ for (i = dirlist->count; i--; ) { - if (!dirlist->files[i]->basename) + struct file_struct *fp = dirlist->files[i]; + if (!fp->basename) continue; - if (flist_find(flist, dirlist->files[i]) < 0) { - int mode = dirlist->files[i]->mode; - f_name_to(dirlist->files[i], delbuf); + if (flist_find(flist, fp) < 0) { + int mode = fp->mode; + f_name_to(fp, delbuf); if (delete_item(delbuf, mode, DEL_FORCE_RECURSE) < 0) break; }