X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/ce827c3e50cd168027a555ec961b6636e5b63e59..cbc63a09e8ea792a9eb39fc2f94536c7a01e525d:/sender.c diff --git a/sender.c b/sender.c index 815371a0..621cf20f 100644 --- a/sender.c +++ b/sender.c @@ -32,6 +32,7 @@ extern int logfile_format_has_i; extern int csum_length; extern int append_mode; extern int io_error; +extern int flist_eof; extern int allowed_lull; extern int preserve_xattrs; extern int protocol_version; @@ -44,6 +45,8 @@ extern int write_batch; extern struct stats stats; extern struct file_list *cur_flist, *first_flist, *dir_flist; +BOOL extra_flist_sending_enabled; + /** * @file * @@ -172,18 +175,23 @@ void send_files(int f_in, int f_out) int itemizing = am_server ? logfile_format_has_i : stdout_format_has_i; enum logcode log_code = log_before_transfer ? FLOG : FINFO; int f_xfer = write_batch < 0 ? batch_fd : f_out; + int save_io_error = io_error; int ndx, j; if (DEBUG_GTE(SEND, 1)) rprintf(FINFO, "send_files starting\n"); while (1) { - if (inc_recurse) + if (inc_recurse) { send_extra_file_list(f_out, MIN_FILECNT_LOOKAHEAD); + extra_flist_sending_enabled = !flist_eof; + } /* This call also sets cur_flist. */ - ndx = read_ndx_and_attrs(f_in, &iflags, &fnamecmp_type, + ndx = read_ndx_and_attrs(f_in, f_out, &iflags, &fnamecmp_type, xname, &xlen); + extra_flist_sending_enabled = False; + if (ndx == NDX_DONE) { if (!am_server && INFO_GTE(PROGRESS, 2) && cur_flist) { set_current_file_index(NULL, 0); @@ -381,6 +389,9 @@ void send_files(int f_in, int f_out) if (make_backups < 0) make_backups = -make_backups; + if (io_error != save_io_error && protocol_version >= 30) + send_msg_int(MSG_IO_ERROR, io_error); + if (DEBUG_GTE(SEND, 1)) rprintf(FINFO, "send files finished\n");