commit 54f882c4aa49fd79c375374985cc01843d72124c (tree)
parent a21f9b6d8b9b027e64795dcdec40494bad76675e
Author: Igor Anić <igor.anic@gmail.com>
Date: Wed, 13 Mar 2024 18:41:20 +0100
compress.xz: make reader loop little more readable
No need to do same error check on two places. First return all
uncompressed data then on last read check error.
Diffstat:
1 file changed, 7 insertions(+), 13 deletions(-)
diff --git a/lib/std/compress/xz/block.zig b/lib/std/compress/xz/block.zig
@@ -59,24 +59,18 @@ pub fn Decoder(comptime ReaderType: type) type {
pub fn read(self: *Self, output: []u8) Error!usize {
while (true) {
- const input = self.to_read.items[self.read_pos..];
- if (input.len > 0) {
- const n = @min(input.len, output.len);
- @memcpy(output[0..n], input[0..n]);
+ const unread_len = self.to_read.items.len - self.read_pos;
+ if (unread_len > 0) {
+ const n = @min(unread_len, output.len);
+ @memcpy(output[0..n], self.to_read.items[self.read_pos..][0..n]);
self.read_pos += n;
- if (self.read_pos == self.to_read.items.len and self.err != null) {
- if (self.err.? == DecodeError.EndOfStreamWithNoError) {
- return n;
- }
- return self.err.?;
- }
return n;
}
- if (self.err != null) {
- if (self.err.? == DecodeError.EndOfStreamWithNoError) {
+ if (self.err) |e| {
+ if (e == DecodeError.EndOfStreamWithNoError) {
return 0;
}
- return self.err.?;
+ return e;
}
if (self.read_pos > 0) {
self.to_read.shrinkRetainingCapacity(0);