diff options
Diffstat (limited to 'src/xz/file_io.c')
-rw-r--r-- | src/xz/file_io.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/xz/file_io.c b/src/xz/file_io.c index a73efcb9..1512cc12 100644 --- a/src/xz/file_io.c +++ b/src/xz/file_io.c @@ -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; } |