*
* 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 (INFO_GTE(PROGRESS, 1))
struct file_struct *file = cur_flist->files[ndx];
fname = local_name ? local_name : f_name(file, NULL);
if ((partialptr = partial_dir_fname(fname)) != NULL) {
- if (make_backups > 0 && !make_backup(fname))
+ if (make_backups > 0 && !make_backup(fname, False))
continue;
if (DEBUG_GTE(RECV, 1)) {
rprintf(FINFO, "renaming %s to %s\n",
return 0;
}
-static int gen_wants_ndx(int desired_ndx)
+static int gen_wants_ndx(int desired_ndx, int flist_num)
{
static int next_ndx = -1;
- static BOOL got_eof = 0;
+ static int done_cnt = 0;
+ static BOOL got_eof = False;
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;
}
end_progress(0);
}
if (inc_recurse && first_flist) {
- if (read_batch)
- gen_wants_ndx(first_flist->used + first_flist->ndx_start);
+ if (read_batch) {
+ ndx = first_flist->used + first_flist->ndx_start;
+ gen_wants_ndx(ndx, first_flist->flist_num);
+ }
flist_free(first_flist);
if (first_flist)
continue;
- } else if (read_batch && first_flist)
- gen_wants_ndx(first_flist->used);
+ } else if (read_batch && first_flist) {
+ ndx = first_flist->used;
+ gen_wants_ndx(ndx, first_flist->flist_num);
+ }
if (++phase > max_phase)
break;
if (DEBUG_GTE(RECV, 1))
}
if (read_batch) {
- if (!(redoing ? we_want_redo(ndx) : gen_wants_ndx(ndx))) {
+ int wanted = redoing
+ ? we_want_redo(ndx)
+ : gen_wants_ndx(ndx, cur_flist->flist_num);
+ if (!wanted) {
rprintf(FINFO,
"(Skipping batched update for%s \"%s\")\n",
redoing ? " resend of" : "",
if (phase == 2 && delay_updates) /* for protocol_version < 29 */
handle_delayed_updates(local_name);
- if (read_batch) {
- read_int(batch_gen_fd); /* Discard -1 */
- read_del_stats(batch_gen_fd);
- }
-
if (DEBUG_GTE(RECV, 1))
rprintf(FINFO,"recv_files finished\n");