-
- qsort(flist->files,flist->count,
- sizeof(flist->files[0]),
- (int (*)())file_compare);
-
- for (i=1;i<flist->count;i++) {
- if (flist->files[i]->basename &&
- flist->files[i-1]->basename &&
- strcmp(f_name(flist->files[i]),
- f_name(flist->files[i-1])) == 0) {
- if (verbose > 1 && !am_server)
- rprintf(FINFO,"removing duplicate name %s from file list %d\n",
- f_name(flist->files[i-1]),i-1);
- free_file(flist->files[i]);
- }
+
+ qsort(flist->files, flist->count,
+ sizeof(flist->files[0]), (int (*)()) file_compare);
+
+ for (i = no_dups? 0 : flist->count; i < flist->count; i++) {
+ if (flist->files[i]->basename) {
+ prev_name = f_name(flist->files[i]);
+ break;
+ }
+ }
+ while (++i < flist->count) {
+ if (!flist->files[i]->basename)
+ continue;
+ name = f_name(flist->files[i]);
+ if (strcmp(name, prev_name) == 0) {
+ if (verbose > 1 && !am_server) {
+ rprintf(FINFO,
+ "removing duplicate name %s from file list %d\n",
+ name, i);
+ }
+ /* it's not great that the flist knows the semantics of
+ * the file memory usage, but i'd rather not add a flag
+ * byte to that struct.
+ * XXX can i use a bit in the flags field? */
+ if (flist->string_area)
+ flist->files[i][0] = null_file;
+ else
+ free_file(flist->files[i]);
+ }
+ prev_name = name;