+ if (delete_during) {
+ recurse = 1; /* allow one level only */
+ xfer_dirs = 1;
+ implied_dirs = 0;
+ relative_paths = 1;
+ }
+
+ argv[0] = fname;
+ del_flist = send_file_list(-1, 1, argv);
+
+ relative_paths = save_relative_paths;
+ implied_dirs = save_implied_dirs;
+ xfer_dirs = save_xfer_dirs;
+ recurse = save_recurse;
+
+ if (!del_flist)
+ return;
+
+ if (verbose > 1)
+ rprintf(FINFO, "deleting in %s\n", safe_fname(fname));
+
+ for (i = del_flist->count-1; i >= 0; i--) {
+ if (max_delete && deletion_count >= max_delete)
+ break;
+ if (!del_flist->files[i]->basename)
+ continue;
+ mode = del_flist->files[i]->mode;
+ if ((j = flist_find(flist, del_flist->files[i])) < 0
+ || (delete_during && S_ISDIR(mode)
+ && !S_ISDIR(flist->files[j]->mode))) {
+ char *f = f_name(del_flist->files[i]);
+ if (make_backups && (backup_dir || !is_backup_file(f))
+ && !S_ISDIR(mode)) {
+ make_backup(f);
+ if (verbose) {
+ rprintf(FINFO, "deleting %s\n",
+ safe_fname(f));
+ }
+ } else {
+ delete_file(f, S_ISDIR(mode)
+ ? DEL_DIR | DEL_RECURSE : 0);
+ }
+ deletion_count++;
+ }
+ }
+ flist_free(del_flist);