patch from Alberto Accomazzi <aaccomazzi@cfa.harvard.edu> to add
[rsync/rsync.git] / io.c
diff --git a/io.c b/io.c
index 9f6b228..7191140 100644 (file)
--- a/io.c
+++ b/io.c
@@ -60,7 +60,7 @@ static void check_timeout(void)
        if (last_io && io_timeout && (t-last_io) >= io_timeout) {
                rprintf(FERROR,"io timeout after %d second - exiting\n", 
                        (int)(t-last_io));
-               exit_cleanup(1);
+               exit_cleanup(RERR_TIMEOUT);
        }
 }
 
@@ -100,7 +100,6 @@ static int read_timeout(int fd, char *buf, int len)
                n = read(fd, buf, len);
 
                if (n > 0) {
-                       stats.total_read += n;
                        buf += n;
                        len -= n;
                        ret += n;
@@ -126,11 +125,11 @@ static int read_timeout(int fd, char *buf, int len)
                        if (eof_error) {
                                rprintf(FERROR,"unexpected EOF in read_timeout\n");
                        }
-                       exit_cleanup(1);
+                       exit_cleanup(RERR_STREAMIO);
                }
 
                rprintf(FERROR,"read error: %s\n", strerror(errno));
-               exit_cleanup(1);
+               exit_cleanup(RERR_STREAMIO);
        }
 
        return ret;
@@ -182,13 +181,13 @@ static int read_unbuffered(int fd, char *buf, int len)
 
                if (tag != FERROR && tag != FINFO) {
                        rprintf(FERROR,"unexpected tag %d\n", tag);
-                       exit_cleanup(1);
+                       exit_cleanup(RERR_STREAMIO);
                }
 
                if (remaining > sizeof(line)-1) {
                        rprintf(FERROR,"multiplexing overflow %d\n\n", 
                                remaining);
-                       exit_cleanup(1);
+                       exit_cleanup(RERR_STREAMIO);
                }
 
                read_loop(fd, line, remaining);
@@ -264,6 +263,8 @@ static void readfd(int fd,char *buffer,int N)
                ret = read_unbuffered(fd,buffer + total,N-total);
                total += ret;
        }
+
+       stats.total_read += total;
 }
 
 
@@ -291,7 +292,7 @@ int64 read_longint(int f)
 
 #ifdef NO_INT64
        rprintf(FERROR,"Integer overflow - attempted 64 bit offset\n");
-       exit_cleanup(1);
+       exit_cleanup(RERR_UNSUPPORTED);
 #else
        if (remote_version >= 16) {
                readfd(f,b,8);
@@ -385,12 +386,11 @@ static void writefd_unbuffered(int fd,char *buf,int len)
 
                        if (ret <= 0) {
                                rprintf(FERROR,"erroring writing %d bytes - exiting\n", len);
-                               exit_cleanup(1);
+                               exit_cleanup(RERR_STREAMIO);
                        }
 
                        blocked = 0;
                        total += ret;
-                       stats.total_written += ret;
 
                        if (io_timeout)
                                last_io = time(NULL);
@@ -441,6 +441,8 @@ void io_end_buffering(int fd)
 
 static void writefd(int fd,char *buf,int len)
 {
+       stats.total_written += len;
+
        if (!io_buffer) {
                writefd_unbuffered(fd, buf, len);
                return;
@@ -539,7 +541,7 @@ void io_printf(int fd, const char *format, ...)
        len = vslprintf(buf, sizeof(buf)-1, format, ap);
        va_end(ap);
 
-       if (len < 0) exit_cleanup(1);
+       if (len < 0) exit_cleanup(RERR_STREAMIO);
 
        write_sbuf(fd, buf);
 }
@@ -561,7 +563,7 @@ void io_start_multiplex_in(int fd)
        io_flush();
        if (read_buffer_len) {
                fprintf(stderr,"ERROR: data in read buffer at mplx start\n");
-               exit_cleanup(1);
+               exit_cleanup(RERR_STREAMIO);
        }
 
        io_multiplexing_in = 1;
@@ -577,6 +579,8 @@ int io_multiplex_write(int f, char *buf, int len)
        SIVAL(io_buffer-4, 0, ((MPLEX_BASE + f)<<24) + len);
        memcpy(io_buffer, buf, len);
 
+       stats.total_written += (len+4);
+
        writefd_unbuffered(multiplex_out_fd, io_buffer-4, len+4);
        return 1;
 }