*
* Copyright (C) 1996-2000 Andrew Tridgell
* Copyright (C) 1996 Paul Mackerras
- * Copyright (C) 2003-2008 Wayne Davison
+ * Copyright (C) 2003-2009 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
goto report_write_error;
#ifdef HAVE_FTRUNCATE
- if (inplace && fd != -1)
- ftruncate(fd, offset);
+ if (inplace && fd != -1
+ && ftruncate(fd, offset) < 0) {
+ rsyserr(FERROR_XFER, errno, "ftruncate failed on %s",
+ full_fname(fname));
+ }
#endif
if (do_progress)
rprintf(FERROR_XFER, "(No batched update for%s \"%s\")\n",
is_redo ? " resend of" : "", f_name(file, NULL));
- if (inc_recurse)
+ if (inc_recurse && !dry_run)
send_msg_int(MSG_NO_SEND, ndx);
}
static int gen_wants_ndx(int desired_ndx)
{
static int next_ndx = -1;
- static BOOL got_eof = 0;
+ static int done_cnt = 0;
+ static BOOL got_eof = False;
+ int flist_num = first_flist->flist_num;
if (got_eof)
return 0;
while (next_ndx < desired_ndx) {
+ if (inc_recurse && flist_num <= done_cnt)
+ return 0;
if (next_ndx >= 0)
no_batched_update(next_ndx, False);
if ((next_ndx = read_int(batch_gen_fd)) < 0) {
+ if (inc_recurse) {
+ done_cnt++;
+ continue;
+ }
got_eof = True;
return 0;
}
rprintf(FINFO, "recv_files(%s)\n", fname);
#ifdef SUPPORT_XATTRS
- if (iflags & ITEM_REPORT_XATTR && !dry_run)
+ if (iflags & ITEM_REPORT_XATTR && do_xfers)
recv_xattr_request(file, f_in);
#endif
if (!(iflags & ITEM_TRANSFER)) {
maybe_log_item(file, iflags, itemizing, xname);
#ifdef SUPPORT_XATTRS
- if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && !dry_run)
+ if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && do_xfers)
set_file_attrs(fname, file, NULL, fname, 0);
#endif
continue;
exit_cleanup(RERR_PROTOCOL);
}
+ if (read_batch) {
+ int wanted = redoing
+ ? we_want_redo(ndx)
+ : gen_wants_ndx(ndx);
+ if (!wanted) {
+ rprintf(FINFO,
+ "(Skipping batched update for%s \"%s\")\n",
+ redoing ? " resend of" : "",
+ fname);
+ discard_receive_data(f_in, F_LENGTH(file));
+ file->flags |= FLAG_FILE_SENT;
+ continue;
+ }
+ }
+
if (!do_xfers) { /* log the transfer */
log_item(FCLIENT, file, &stats, iflags, NULL);
if (read_batch)
continue;
}
- if (read_batch) {
- if (!(redoing ? we_want_redo(ndx) : gen_wants_ndx(ndx))) {
- rprintf(FINFO,
- "(Skipping batched update for%s \"%s\")\n",
- redoing ? " resend of" : "",
- fname);
- discard_receive_data(f_in, F_LENGTH(file));
- file->flags |= FLAG_FILE_SENT;
- continue;
- }
- }
-
partialptr = partial_dir ? partial_dir_fname(fname) : fname;
if (protocol_version >= 29) {