authorgravatar for igor.anic@gmail.comIgor Anić <igor.anic@gmail.com> 2024-03-13 18:41:20+01:00
committergravatar for igor.anic@gmail.comIgor Anić <igor.anic@gmail.com> 2024-03-13 18:41:20+01:00
log54f882c4aa49fd79c375374985cc01843d72124c
treee219170dbdd44cd4e86c149028928589aa308553
parenta21f9b6d8b9b027e64795dcdec40494bad76675e

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 files changed, 7 insertions(+), 13 deletions(-)

lib/std/compress/xz/block.zig+7-13
...@@ -59,24 +59,18 @@ pub fn Decoder(comptime ReaderType: type) type {...@@ -59,24 +59,18 @@ pub fn Decoder(comptime ReaderType: type) type {
5959
60 pub fn read(self: *Self, output: []u8) Error!usize {60 pub fn read(self: *Self, output: []u8) Error!usize {
61 while (true) {61 while (true) {
62 const input = self.to_read.items[self.read_pos..];62 const unread_len = self.to_read.items.len - self.read_pos;
63 if (input.len > 0) {63 if (unread_len > 0) {
64 const n = @min(input.len, output.len);64 const n = @min(unread_len, output.len);
65 @memcpy(output[0..n], input[0..n]);65 @memcpy(output[0..n], self.to_read.items[self.read_pos..][0..n]);
66 self.read_pos += n;66 self.read_pos += n;
67 if (self.read_pos == self.to_read.items.len and self.err != null) {
68 if (self.err.? == DecodeError.EndOfStreamWithNoError) {
69 return n;
70 }
71 return self.err.?;
72 }
73 return n;67 return n;
74 }68 }
75 if (self.err != null) {69 if (self.err) |e| {
76 if (self.err.? == DecodeError.EndOfStreamWithNoError) {70 if (e == DecodeError.EndOfStreamWithNoError) {
77 return 0;71 return 0;
78 }72 }
79 return self.err.?;73 return e;
80 }74 }
81 if (self.read_pos > 0) {75 if (self.read_pos > 0) {
82 self.to_read.shrinkRetainingCapacity(0);76 self.to_read.shrinkRetainingCapacity(0);