static struct file_struct null_file;
-static void clean_flist(struct file_list *flist, int strip_root);
+static void clean_flist(struct file_list *flist, int strip_root, int no_dups);
static int show_filelist_p(void)
finish_filelist_progress(flist);
}
- clean_flist(flist, 0);
+ clean_flist(flist, 0, 0);
/* now send the uid/gid list. This was introduced in protocol
version 15 */
if (verbose > 2)
rprintf(FINFO, "received %d names\n", flist->count);
- clean_flist(flist, relative_paths);
+ clean_flist(flist, relative_paths, 1);
if (show_filelist_p()) {
finish_filelist_progress(flist);
* This routine ensures we don't have any duplicate names in our file list.
* duplicate names can cause corruption because of the pipelining
*/
-static void clean_flist(struct file_list *flist, int strip_root)
+static void clean_flist(struct file_list *flist, int strip_root, int no_dups)
{
int i;
char *name, *prev_name = NULL;
qsort(flist->files, flist->count,
sizeof(flist->files[0]), (int (*)()) file_compare);
- for (i = 0; i < flist->count; i++) {
+ for (i = no_dups? 0 : flist->count; i < flist->count; i++) {
if (flist->files[i]->basename) {
prev_name = f_name(flist->files[i]);
break;