Changed rprintf() calls that included strerror() to use rsyserr().
[rsync/rsync.git] / receiver.c
index 1975e58..c7cde82 100644 (file)
@@ -45,21 +45,23 @@ extern int cleanup_got_literal;
 extern int module_id;
 extern int ignore_errors;
 extern int orig_umask;
+extern int keep_partial;
 
 static void delete_one(char *fn, int is_dir)
 {
        if (!is_dir) {
                if (robust_unlink(fn) != 0) {
-                       rprintf(FERROR, "delete_one: unlink %s failed: %s\n",
-                               full_fname(fn), strerror(errno));
+                       rsyserr(FERROR, errno, "delete_one: unlink %s failed",
+                               full_fname(fn));
                } else if (verbose) {
                        rprintf(FINFO, "deleting %s\n", fn);
                }
        } else {
                if (do_rmdir(fn) != 0) {
                        if (errno != ENOTEMPTY && errno != EEXIST) {
-                               rprintf(FERROR, "delete_one: rmdir %s failed: %s\n",
-                                       full_fname(fn), strerror(errno));
+                               rsyserr(FERROR, errno,
+                                       "delete_one: rmdir %s failed",
+                                       full_fname(fn));
                        }
                } else if (verbose) {
                        rprintf(FINFO, "deleting directory %s\n", fn);
@@ -222,8 +224,8 @@ static int receive_data(int f_in,struct map_struct *mapbuf,int fd,char *fname,
                        sum_update(data,i);
 
                        if (fd != -1 && write_file(fd,data,i) != i) {
-                               rprintf(FERROR, "write failed on %s: %s\n",
-                                       full_fname(fname), strerror(errno));
+                               rsyserr(FERROR, errno, "write failed on %s",
+                                       full_fname(fname));
                                exit_cleanup(RERR_FILEIO);
                        }
                        offset += i;
@@ -250,8 +252,8 @@ static int receive_data(int f_in,struct map_struct *mapbuf,int fd,char *fname,
                }
 
                if (fd != -1 && write_file(fd,map,len) != (int) len) {
-                       rprintf(FERROR, "write failed on %s: %s\n",
-                               full_fname(fname), strerror(errno));
+                       rsyserr(FERROR, errno, "write failed on %s",
+                               full_fname(fname));
                        exit_cleanup(RERR_FILEIO);
                }
                offset += len;
@@ -263,8 +265,8 @@ static int receive_data(int f_in,struct map_struct *mapbuf,int fd,char *fname,
                end_progress(total_size);
 
        if (fd != -1 && offset > 0 && sparse_end(fd) != 0) {
-               rprintf(FERROR, "write failed on %s: %s\n",
-                       full_fname(fname), strerror(errno));
+               rsyserr(FERROR, errno, "write failed on %s",
+                       full_fname(fname));
                exit_cleanup(RERR_FILEIO);
        }
 
@@ -370,8 +372,8 @@ int recv_files(int f_in,struct file_list *flist,char *local_name)
                }
 
                if (fd1 != -1 && do_fstat(fd1,&st) != 0) {
-                       rprintf(FERROR, "fstat %s failed: %s\n",
-                               full_fname(fnamecmp), strerror(errno));
+                       rsyserr(FERROR, errno, "fstat %s failed",
+                               full_fname(fnamecmp));
                        receive_data(f_in,NULL,-1,NULL,file->length);
                        close(fd1);
                        continue;
@@ -435,8 +437,8 @@ int recv_files(int f_in,struct file_list *flist,char *local_name)
                        fd2 = do_mkstemp(fnametmp, file->mode & INITACCESSPERMS);
                }
                if (fd2 == -1) {
-                       rprintf(FERROR, "mkstemp %s failed: %s\n",
-                               full_fname(fnametmp), strerror(errno));
+                       rsyserr(FERROR, errno, "mkstemp %s failed",
+                               full_fname(fnametmp));
                        receive_data(f_in,mapbuf,-1,NULL,file->length);
                        if (mapbuf) unmap_file(mapbuf);
                        if (fd1 != -1) close(fd1);
@@ -459,15 +461,18 @@ int recv_files(int f_in,struct file_list *flist,char *local_name)
                        close(fd1);
                }
                if (close(fd2) < 0) {
-                       rprintf(FERROR, "close failed on %s: %s\n",
-                               full_fname(fnametmp), strerror(errno));
+                       rsyserr(FERROR, errno, "close failed on %s",
+                               full_fname(fnametmp));
                        exit_cleanup(RERR_FILEIO);
                }
 
                if (verbose > 2)
                        rprintf(FINFO,"renaming %s to %s\n",fnametmp,fname);
 
-               finish_transfer(fname, fnametmp, file);
+               if (recv_ok || keep_partial)
+                       finish_transfer(fname, fnametmp, file, recv_ok);
+               else
+                       do_unlink(fnametmp);
 
                cleanup_disable();