X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/459abd75f51b498c2ae354a3256532f59b3abc77..e0c572c5c691da243a3187f440daab739c0b3412:/receiver.c diff --git a/receiver.c b/receiver.c index 4f5463a9..72972b04 100644 --- a/receiver.c +++ b/receiver.c @@ -20,6 +20,7 @@ */ #include "rsync.h" +#include "inums.h" extern int dry_run; extern int do_xfers; @@ -181,7 +182,7 @@ static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r, mapbuf = map_file(fd_r, size_r, read_size, sum.blength); if (DEBUG_GTE(DELTASUM, 2)) { rprintf(FINFO, "recv mapped %s of size %s\n", - fname_r, big_num(size_r, 0)); + fname_r, big_num(size_r)); } } else mapbuf = NULL; @@ -211,7 +212,7 @@ static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r, offset = sum.flength; if (fd != -1 && (j = do_lseek(fd, offset, SEEK_SET)) != offset) { rsyserr(FERROR_XFER, errno, "lseek of %s returned %s, not %s", - full_fname(fname), big_num(j, 0), big_num(offset, 0)); + full_fname(fname), big_num(j), big_num(offset)); exit_cleanup(RERR_FILEIO); } } @@ -223,7 +224,7 @@ static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r, if (i > 0) { if (DEBUG_GTE(DELTASUM, 3)) { rprintf(FINFO,"data recv %d at %s\n", - i, big_num(offset, 0)); + i, big_num(offset)); } stats.literal_data += i; @@ -248,7 +249,7 @@ static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r, if (DEBUG_GTE(DELTASUM, 3)) { rprintf(FINFO, "chunk[%d] of size %ld at %s offset=%s\n", - i, (long)len, big_num(offset2, 0), big_num(offset, 0)); + i, (long)len, big_num(offset2), big_num(offset)); } if (mapbuf) { @@ -268,7 +269,7 @@ static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r, rsyserr(FERROR_XFER, errno, "lseek of %s returned %s, not %s", full_fname(fname), - big_num(pos, 0), big_num(offset, 0)); + big_num(pos), big_num(offset)); exit_cleanup(RERR_FILEIO); } continue; @@ -350,6 +351,8 @@ static void handle_delayed_updates(char *local_name) static int get_next_gen_ndx(int fd, int next_gen_ndx, int desired_ndx) { + static int batch_eof = 0; + while (next_gen_ndx < desired_ndx) { if (next_gen_ndx >= 0) { struct file_struct *file = cur_flist->files[next_gen_ndx]; @@ -358,14 +361,16 @@ static int get_next_gen_ndx(int fd, int next_gen_ndx, int desired_ndx) file->flags & FLAG_FILE_SENT ? " resend of" : "", f_name(file, NULL)); } - next_gen_ndx = read_int(fd); + next_gen_ndx = batch_eof ? -1 : read_int(fd); if (next_gen_ndx == -1) { if (inc_recurse) next_gen_ndx = first_flist->prev->used + first_flist->prev->ndx_start; else next_gen_ndx = cur_flist->used; + batch_eof = 1; } } + return next_gen_ndx; } @@ -519,8 +524,6 @@ int recv_files(int f_in, char *local_name) "(Skipping batched update for \"%s\")\n", fname); discard_receive_data(f_in, F_LENGTH(file)); - if (inc_recurse) - send_msg_int(MSG_NO_SEND, ndx); continue; } next_gen_ndx = -1;