X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/8886f8d0e6bed423ff12a6e7b5517ed164216967..8ca5756339487aa97594c4ea60555c9050a703bf:/io.c diff --git a/io.c b/io.c index 894e05a8..dac0744d 100644 --- a/io.c +++ b/io.c @@ -48,6 +48,8 @@ static void check_timeout(void) { extern int am_server, am_daemon; time_t t; + + err_list_push(); if (!io_timeout) return; @@ -179,8 +181,8 @@ static int read_timeout(int fd, char *buf, int len) if (eof_error) { rprintf(FERROR, "%s: connection to server unexpectedly closed" - " (%ld bytes read so far)\n", - RSYNC_NAME, stats.total_read); + " (%.0f bytes read so far)\n", + RSYNC_NAME, (double)stats.total_read); } exit_cleanup(RERR_STREAMIO); } @@ -339,6 +341,8 @@ static void writefd_unbuffered(int fd,char *buf,int len) int fd_count, count; struct timeval tv; + err_list_push(); + no_flush++; while (total < len) { @@ -377,7 +381,6 @@ static void writefd_unbuffered(int fd,char *buf,int len) if (FD_ISSET(fd, &w_fds)) { int ret, n = len-total; - ret = write(fd,buf+total,n); if (ret == -1 && errno == EINTR) { @@ -462,6 +465,9 @@ static void mplex_write(int fd, enum logcode code, char *buf, int len) void io_flush(void) { int fd = multiplex_out_fd; + + err_list_push(); + if (!io_buffer_count || no_flush) return; if (io_multiplexing_out) { @@ -483,21 +489,12 @@ void io_end_buffering(int fd) } } -/* some OSes have a bug where an exit causes the pending writes on - a socket to be flushed. Do an explicit shutdown to try to prevent this */ -void io_shutdown(void) -{ - if (multiplex_out_fd != -1) close(multiplex_out_fd); - if (io_error_fd != -1) close(io_error_fd); - multiplex_out_fd = -1; - io_error_fd = -1; -} - - static void writefd(int fd,char *buf,int len) { stats.total_written += len; + err_list_push(); + if (!io_buffer || fd != multiplex_out_fd) { writefd_unbuffered(fd, buf, len); return; @@ -598,7 +595,7 @@ void io_printf(int fd, const char *format, ...) int len; va_start(ap, format); - len = vslprintf(buf, sizeof(buf), format, ap); + len = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); if (len < 0) exit_cleanup(RERR_STREAMIO); @@ -635,14 +632,6 @@ int io_multiplex_write(enum logcode code, char *buf, int len) return 1; } -/* write a message to the special error fd */ -int io_error_write(int f, enum logcode code, char *buf, int len) -{ - if (f == -1) return 0; - mplex_write(f, code, buf, len); - return 1; -} - /* stop output multiplexing */ void io_multiplexing_close(void) {