documented --delete disabling on IO errors
[rsync/rsync.git] / io.c
diff --git a/io.c b/io.c
index 0f8ab91..dbd9f64 100644 (file)
--- a/io.c
+++ b/io.c
@@ -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;
@@ -264,14 +263,20 @@ static void readfd(int fd,char *buffer,int N)
                ret = read_unbuffered(fd,buffer + total,N-total);
                total += ret;
        }
+
+       stats.total_read += total;
 }
 
 
 int32 read_int(int f)
 {
        char b[4];
+       int32 ret;
+
        readfd(f,b,4);
-       return IVAL(b,0);
+       ret = IVAL(b,0);
+       if (ret == (int32)0xffffffff) return -1;
+       return ret;
 }
 
 int64 read_longint(int f)
@@ -281,7 +286,9 @@ int64 read_longint(int f)
        char b[8];
        ret = read_int(f);
 
-       if ((int32)ret != (int32)0xffffffff) return ret;
+       if ((int32)ret != (int32)0xffffffff) {
+               return ret;
+       }
 
 #ifdef NO_INT64
        rprintf(FERROR,"Integer overflow - attempted 64 bit offset\n");
@@ -384,7 +391,6 @@ static void writefd_unbuffered(int fd,char *buf,int len)
 
                        blocked = 0;
                        total += ret;
-                       stats.total_written += ret;
 
                        if (io_timeout)
                                last_io = time(NULL);
@@ -435,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;
@@ -471,7 +479,7 @@ void write_longint(int f, int64 x)
                return;
        }
 
-       write_int(f, -1);
+       write_int(f, (int32)0xFFFFFFFF);
        SIVAL(b,0,(x&0xFFFFFFFF));
        SIVAL(b,4,((x>>32)&0xFFFFFFFF));
 
@@ -484,7 +492,7 @@ void write_buf(int f,char *buf,int len)
 }
 
 /* write a string to the connection */
-void write_sbuf(int f,char *buf)
+static void write_sbuf(int f,char *buf)
 {
        write_buf(f, buf, strlen(buf));
 }
@@ -571,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;
 }