Fix bug with --compare-dest option where missing parent directories in the
[rsync/rsync.git] / receiver.c
index 5882e60..816d69f 100644 (file)
@@ -83,7 +83,7 @@ static void add_delete_entry(struct file_struct *file)
 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));
@@ -417,7 +417,8 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
                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);