X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/8c2ffaf09553a85be1d2f7d135b959dbb8fa75c8..4f1f94d1de3a5bbd5e5134f461d58dd9b2f80ee8:/receiver.c diff --git a/receiver.c b/receiver.c index 565fa9d9..a9a9cd2a 100644 --- a/receiver.c +++ b/receiver.c @@ -56,29 +56,20 @@ extern struct filter_list_struct server_filter_list; * sending side. This is used by --delete-before and --delete-after. */ void delete_files(struct file_list *flist) { - struct file_list *dir_list; - char *argv[1], fbuf[MAXPATHLEN]; + char fbuf[MAXPATHLEN]; int j; - if (io_error && !(lp_ignore_errors(module_id) || ignore_errors)) { - rprintf(FINFO, - "IO error encountered -- skipping file deletion\n"); - return; - } - for (j = 0; j < flist->count; j++) { - if (!(flist->files[j]->flags & FLAG_DEL_START) - || !S_ISDIR(flist->files[j]->mode)) - continue; - - argv[0] = f_name_to(flist->files[j], fbuf); + struct file_struct *file = flist->files[j]; - if (!(dir_list = send_file_list(-1, 1, argv))) + if (!(file->flags & FLAG_DEL_HERE)) continue; - delete_missing(flist, dir_list, fbuf); + f_name_to(file, fbuf); + if (verbose > 1 && file->flags & FLAG_TOP_DIR) + rprintf(FINFO, "deleting in %s\n", safe_fname(fbuf)); - flist_free(dir_list); + delete_in_dir(flist, fbuf, file); } } @@ -132,7 +123,8 @@ static int get_tmpname(char *fnametmp, char *fname) maxname = MIN(MAXPATHLEN - 7 - length, NAME_MAX - 8); if (maxname < 1) { - rprintf(FERROR, "temporary filename too long: %s\n", fname); + rprintf(FERROR, "temporary filename too long: %s\n", + safe_fname(fname)); fnametmp[0] = '\0'; return 0; } @@ -586,12 +578,14 @@ int recv_files(int f_in, struct file_list *flist, char *local_name, continue; if (verbose > 2) { rprintf(FINFO, "renaming %s to %s\n", - partialptr, fname); + safe_fname(partialptr), + safe_fname(fname)); } if (do_rename(partialptr, fname) < 0) { rsyserr(FERROR, errno, "rename failed for %s (from %s)", - fname, partialptr); + full_fname(fname), + safe_fname(partialptr)); } else { handle_partial_dir(partialptr, PDIR_DELETE);