Fix partial reads from pipe handling master
authorChristophe Varoqui <christophe.varoqui@opensvc.com>
Sun, 27 Jun 2010 16:23:34 +0000 (18:23 +0200)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Sun, 27 Jun 2010 16:23:34 +0000 (18:23 +0200)
data corrupter bug before this release !

dds.c

diff --git a/dds.c b/dds.c
index 89f123c..8361f71 100644 (file)
--- a/dds.c
+++ b/dds.c
@@ -129,7 +129,7 @@ static int read_disk_header() {
 
        /* read disk header sector */
         do {
-               len += read(fdcow, buf, SECTOR_SIZE - len);
+               len += read(fdcow, buf + len, SECTOR_SIZE - len);
         } while (len > 0 && len != SECTOR_SIZE);
        h = (struct disk_header *)buf;
        if (!len && !errno && fdcow == STDIN_FILENO) {
@@ -168,7 +168,7 @@ static int read_disk_header() {
         */
        len = 0;
        do {
-               len += read(fdcow, buf, chunk_size_bytes - SECTOR_SIZE);
+               len += read(fdcow, buf + len, chunk_size_bytes - SECTOR_SIZE);
        } while (len > 0 && len != chunk_size_bytes - SECTOR_SIZE);
 
        if (!len && !errno && fdcow == STDIN_FILENO) {
@@ -195,7 +195,7 @@ int write_disk_header () {
        }
         len = 0;
        do {
-               len += read(fdcow, buf, chunk_size_bytes - len);
+               len += read(fdcow, buf + len, chunk_size_bytes - len);
        } while (len > 0 && len != chunk_size_bytes);
        if (len != chunk_size_bytes) {
                perror("read cow header");
@@ -204,7 +204,7 @@ int write_disk_header () {
        }
         len = 0;
        do {
-               len += write(fdout, buf, chunk_size_bytes - len);
+               len += write(fdout, buf + len, chunk_size_bytes - len);
        } while (len > 0 && len != chunk_size_bytes);
        if (len != chunk_size_bytes) {
                perror("write cow header");
@@ -222,7 +222,7 @@ static int write_exception (struct disk_exception * e) {
        }
         len = 0;
        do {
-               len += read(fdin, buf, chunk_size_bytes - len);
+               len += read(fdin, buf + len, chunk_size_bytes - len);
        } while (len > 0 && len != chunk_size_bytes);
        if (len != chunk_size_bytes) {
                perror("read chunk from source");
@@ -231,7 +231,7 @@ static int write_exception (struct disk_exception * e) {
        }
         len = 0;
        do {
-               len += write(fdout, buf, chunk_size_bytes - len);
+               len += write(fdout, buf + len, chunk_size_bytes - len);
        } while (len > 0 && len != chunk_size_bytes);
        if (len != chunk_size_bytes) {
                perror("write chunk to extract dest");
@@ -262,7 +262,7 @@ static int load_exception (struct disk_exception * e) {
 
        len = 0;
        do {
-               len += read(fdcow, buf, chunk_size_bytes - len);
+               len += read(fdcow, buf + len, chunk_size_bytes - len);
        } while (len > 0 && len != chunk_size_bytes);
        if (len != chunk_size_bytes) {
                perror("read cow data chunk to load");
@@ -274,7 +274,7 @@ static int load_exception (struct disk_exception * e) {
        }
        len = 0;
        do {
-               len += write(fdout, buf, chunk_size_bytes - len);
+               len += write(fdout, buf + len, chunk_size_bytes - len);
        } while (len > 0 && len != chunk_size_bytes);
        if (len != chunk_size_bytes) {
                perror("write cow exceptions");
@@ -328,7 +328,7 @@ int load_exceptions () {
                /* read it all */
                len = 0;
                do {
-                       len += read(fdcow, exception_chunk_buf, chunk_size_bytes - len);
+                       len += read(fdcow, exception_chunk_buf + len, chunk_size_bytes - len);
                } while (len > 0 && len != chunk_size_bytes);
 
                if (len != chunk_size_bytes) {
@@ -382,7 +382,7 @@ int write_exceptions () {
                /* read it all */
                len = 0;
                do {
-                       len += read(fdcow, exception_chunk_buf, chunk_size_bytes - len);
+                       len += read(fdcow, exception_chunk_buf + len, chunk_size_bytes - len);
                } while (len > 0 && len != chunk_size_bytes);
                if (len != chunk_size_bytes) {
                        perror("read cow exceptions");
@@ -406,7 +406,7 @@ int write_exceptions () {
                /* write it to dest */
                len = 0;
                do {
-                       len += write(fdout, exception_chunk_buf, chunk_size_bytes - len);
+                       len += write(fdout, exception_chunk_buf + len, chunk_size_bytes - len);
                } while (len > 0 && len != chunk_size_bytes);
                if (len != chunk_size_bytes) {
                        perror("write cow exceptions");