X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/4fd842f98df4970f6e49a0365dbed60774e56c09..fd2598022cc10ce4f28019f5c0cb1816cd9311a4:/sender.c diff --git a/sender.c b/sender.c index 13ae8e4d..07887d9b 100644 --- a/sender.c +++ b/sender.c @@ -3,11 +3,12 @@ * * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras - * Copyright (C) 2003-2007 Wayne Davison + * Copyright (C) 2003-2008 Wayne Davison * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 3 as - * published by the Free Software Foundation. + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 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 @@ -43,7 +44,7 @@ extern int inplace; extern int batch_fd; extern int write_batch; extern struct stats stats; -extern struct file_list *cur_flist, *first_flist; +extern struct file_list *cur_flist, *first_flist, *dir_flist; /** * @file @@ -210,7 +211,10 @@ void send_files(int f_in, int f_out) if (inc_recurse) send_extra_file_list(f_out, FILECNT_LOOKAHEAD); - file = cur_flist->files[ndx - cur_flist->ndx_start]; + if (ndx - cur_flist->ndx_start >= 0) + file = cur_flist->files[ndx - cur_flist->ndx_start]; + else + file = dir_flist->files[cur_flist->parent_ndx]; if (F_PATHNAME(file)) { path = F_PATHNAME(file); slash = "/"; @@ -225,7 +229,7 @@ void send_files(int f_in, int f_out) rprintf(FINFO, "send_files(%d, %s%s%s)\n", ndx, path,slash,fname); #ifdef SUPPORT_XATTRS - if (preserve_xattrs && iflags & ITEM_REPORT_XATTR) + if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && !dry_run) recv_xattr_request(file, f_in); #endif @@ -261,7 +265,8 @@ void send_files(int f_in, int f_out) updating_basis_file = inplace && (protocol_version >= 29 ? fnamecmp_type == FNAMECMP_FNAME : make_backups <= 0); - stats.current_file_index = ndx; + if (!am_server && do_progress) + set_current_file_index(file, ndx); stats.num_transferred_files++; stats.total_transferred_size += F_LENGTH(file); @@ -285,13 +290,13 @@ void send_files(int f_in, int f_out) if (errno == ENOENT) { enum logcode c = am_daemon && protocol_version < 28 ? FERROR - : FINFO; + : FWARNING; io_error |= IOERR_VANISHED; rprintf(c, "file has vanished: %s\n", full_fname(fname)); } else { io_error |= IOERR_GENERAL; - rsyserr(FERROR, errno, + rsyserr(FERROR_XFER, errno, "send_files failed to open %s", full_fname(fname)); } @@ -345,7 +350,7 @@ void send_files(int f_in, int f_out) j = unmap_file(mbuf); if (j) { io_error |= IOERR_GENERAL; - rsyserr(FERROR, j, + rsyserr(FERROR_XFER, j, "read errors mapping %s", full_fname(fname)); }