X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/ed12c8eb219a6fc36c936dda87454aa8c2bb95b6..7790ee3684c6b17a400ab8f1779092892dfde8c5:/io.c diff --git a/io.c b/io.c index 6a91ffd5..bc59c13d 100644 --- a/io.c +++ b/io.c @@ -64,6 +64,7 @@ const char phase_unknown[] = "unknown"; int ignore_timeout = 0; int batch_fd = -1; int msgdone_cnt = 0; +int check_for_io_err = 0; /* Ignore an EOF error if non-zero. See whine_about_eof(). */ int kluge_around_eof = 0; @@ -380,6 +381,8 @@ static void read_msg_fd(void) len = tag & 0xFFFFFF; tag = (tag >> 24) - MPLEX_BASE; + check_for_io_err = 0; + switch (tag) { case MSG_DONE: if (len < 0 || len > 1 || !am_generator) { @@ -414,6 +417,9 @@ static void read_msg_fd(void) } flist = recv_file_list(fd); flist->parent_ndx = IVAL(buf,0); + /* If the sender is going to send us an MSG_IO_ERROR value, it + * will always be the very next message following MSG_FLIST. */ + check_for_io_err = 1; #ifdef SUPPORT_HARD_LINKS if (preserve_hard_links) match_hard_links(flist); @@ -1061,6 +1067,8 @@ static int readfd_unbuffered(int fd, char *buf, size_t len) msg_bytes = tag & 0xFFFFFF; tag = (tag >> 24) - MPLEX_BASE; + check_for_io_err = 0; + switch (tag) { case MSG_DATA: if (msg_bytes > iobuf_in_siz) {