X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/91fd15b8b654a3be886069510d85064d59ca5dc7..f303b749f2843433c9acd8218a4b9096d0d1bb8d:/io.c diff --git a/io.c b/io.c index 60685757..fe9bcec1 100644 --- a/io.c +++ b/io.c @@ -63,6 +63,7 @@ int allowed_lull = 0; 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; @@ -379,6 +380,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) { @@ -413,6 +416,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); @@ -1060,6 +1066,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) {