static void delete_one(struct file_struct *f)
{
if (!S_ISDIR(f->mode)) {
- if (do_unlink(f_name(f)) != 0) {
+ if (robust_unlink(f_name(f)) != 0) {
rprintf(FERROR,"unlink %s : %s\n",f_name(f),strerror(errno));
} else if (verbose) {
rprintf(FINFO,"deleting %s\n",f_name(f));
fd2 = do_open(fnametmp,O_WRONLY|O_CREAT|O_EXCL,
file->mode & INITACCESSPERMS);
- if (fd2 == -1 && relative_paths && errno == ENOENT &&
+ if (fd2 == -1 && errno == ENOENT &&
+ (relative_paths || (compare_dest != NULL)) &&
create_directory_path(fnametmp) == 0) {
fd2 = do_open(fnametmp,O_WRONLY|O_CREAT|O_EXCL,
file->mode & INITACCESSPERMS);