]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
xz: Refactor io_read() a bit.
authorLasse Collin <lasse.collin@tukaani.org>
Sun, 26 Jan 2020 11:47:31 +0000 (13:47 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Sun, 26 Jan 2020 11:47:31 +0000 (13:47 +0200)
src/xz/file_io.c

index 83bf1511b432212faa7f23ab660b816d900222a5..5d1407501d7c86caa1c9d6bf10a4ea5495ae5029 100644 (file)
@@ -1107,16 +1107,16 @@ io_fix_src_pos(file_pair *pair, size_t rewind_size)
 
 
 extern size_t
-io_read(file_pair *pair, io_buf *buf_union, size_t size)
+io_read(file_pair *pair, io_buf *buf, size_t size)
 {
        // We use small buffers here.
        assert(size < SSIZE_MAX);
 
-       uint8_t *buf = buf_union->u8;
-       size_t left = size;
+       size_t pos = 0;
 
-       while (left > 0) {
-               const ssize_t amount = read(pair->src_fd, buf, left);
+       while (pos < size) {
+               const ssize_t amount = read(
+                               pair->src_fd, buf->u8 + pos, size - pos);
 
                if (amount == 0) {
                        pair->src_eof = true;
@@ -1145,7 +1145,7 @@ io_read(file_pair *pair, io_buf *buf_union, size_t size)
 
                                case IO_WAIT_TIMEOUT:
                                        flush_needed = true;
-                                       return size - left;
+                                       return pos;
 
                                default:
                                        message_bug();
@@ -1159,11 +1159,10 @@ io_read(file_pair *pair, io_buf *buf_union, size_t size)
                        return SIZE_MAX;
                }
 
-               buf += (size_t)(amount);
-               left -= (size_t)(amount);
+               pos += (size_t)(amount);
        }
 
-       return size - left;
+       return pos;
 }