Improved two lseek() error messages.
[rsync/rsync.git] / receiver.c
index 26be6f5..9a8c2af 100644 (file)
 
 extern int verbose;
 extern int do_xfers;
-extern int am_daemon;
 extern int am_server;
 extern int do_progress;
 extern int log_before_transfer;
 extern int log_format_has_i;
-extern int daemon_log_format_has_i;
+extern int logfile_format_has_i;
 extern int csum_length;
 extern int read_batch;
 extern int write_batch;
@@ -168,9 +167,9 @@ static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r,
                        sum_update(map_ptr(mapbuf, offset, len), len);
                        offset = sum.flength;
                }
-               if (fd != -1 && do_lseek(fd, offset, SEEK_SET) != offset) {
-                       rsyserr(FERROR, errno, "lseek failed on %s",
-                               full_fname(fname));
+               if (fd != -1 && (j = do_lseek(fd, offset, SEEK_SET)) != offset) {
+                       rsyserr(FERROR, errno, "lseek of %s returned %.0f, not %.0f",
+                               full_fname(fname), (double)j, (double)offset);
                        exit_cleanup(RERR_FILEIO);
                }
        }
@@ -219,13 +218,15 @@ static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r,
 
                if (inplace) {
                        if (offset == offset2 && fd != -1) {
+                               OFF_T pos;
                                if (flush_write_file(fd) < 0)
                                        goto report_write_error;
                                offset += len;
-                               if (do_lseek(fd, len, SEEK_CUR) != offset) {
+                               if ((pos = do_lseek(fd, len, SEEK_CUR)) != offset) {
                                        rsyserr(FERROR, errno,
-                                               "lseek failed on %s",
-                                               full_fname(fname));
+                                               "lseek of %s returned %.0f, not %.0f",
+                                               full_fname(fname),
+                                               (double)pos, (double)offset);
                                        exit_cleanup(RERR_FILEIO);
                                }
                                continue;
@@ -343,8 +344,7 @@ int recv_files(int f_in, struct file_list *flist, char *local_name)
        struct file_struct *file;
        struct stats initial_stats;
        int save_make_backups = make_backups;
-       int itemizing = am_daemon ? daemon_log_format_has_i
-                     : !am_server && log_format_has_i;
+       int itemizing = am_server ? logfile_format_has_i : log_format_has_i;
        int max_phase = protocol_version >= 29 ? 2 : 1;
        int i, recv_ok;
 
@@ -617,9 +617,14 @@ int recv_files(int f_in, struct file_list *flist, char *local_name)
                }
 
                if ((recv_ok && (!delay_updates || !partialptr)) || inplace) {
-                       if (partialptr == fname || *partial_dir == '/')
-                               partialptr = NULL;
-                       finish_transfer(fname, fnametmp, partialptr,
+                       char *temp_copy_name;
+                       if (partialptr == fname)
+                               partialptr = temp_copy_name = NULL;
+                       else if (*partial_dir == '/')
+                               temp_copy_name = NULL;
+                       else
+                               temp_copy_name = partialptr;
+                       finish_transfer(fname, fnametmp, temp_copy_name,
                                        file, recv_ok, 1);
                        if (fnamecmp == partialptr) {
                                do_unlink(partialptr);