Improved two lseek() error messages.
[rsync/rsync.git] / receiver.c
index 143e27b..9a8c2af 100644 (file)
@@ -1,33 +1,34 @@
-/* -*- c-file-style: "linux" -*-
-
-   Copyright (C) 1996-2000 by Andrew Tridgell
-   Copyright (C) Paul Mackerras 1996
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
+/*
+ * Routines only used by the receiving process.
+ *
+ * Copyright (C) 1996-2000 Andrew Tridgell
+ * Copyright (C) 1996 Paul Mackerras
+ * Copyright (C) 2003, 2004, 2005, 2006 Wayne Davison
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ */
 
 #include "rsync.h"
 
 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;
@@ -166,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);
                }
        }
@@ -217,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;
@@ -341,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;
 
@@ -615,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);