Commit 54f882c4aa

Igor Anić <igor.anic@gmail.com>
2024-03-13 18:41:20
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.
1 parent a21f9b6
Changed files (1)
lib
std
compress
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);