diff --git a/lib/std/compress/xz/block.zig b/lib/std/compress/xz/block.zig index 6e0a09c8dd..50a562c9cc 100644 --- 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);