let the receiver do that, since they are the one that requests names and
we want to be sure the sender has any name the receiver may ask for.
static struct file_struct null_file;
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)
static int show_filelist_p(void)
finish_filelist_progress(flist);
}
finish_filelist_progress(flist);
}
+ clean_flist(flist, 0, 0);
/* now send the uid/gid list. This was introduced in protocol
version 15 */
/* now send the uid/gid list. This was introduced in protocol
version 15 */
if (verbose > 2)
rprintf(FINFO, "received %d names\n", flist->count);
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);
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
*/
* 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;
{
int i;
char *name, *prev_name = NULL;
qsort(flist->files, flist->count,
sizeof(flist->files[0]), (int (*)()) file_compare);
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;
if (flist->files[i]->basename) {
prev_name = f_name(flist->files[i]);
break;