mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 22:04:21 +00:00
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.
This commit is contained in:
parent
a21f9b6d8b
commit
54f882c4aa
1 changed files with 7 additions and 13 deletions
|
|
@ -59,24 +59,18 @@ pub fn Decoder(comptime ReaderType: type) type {
|
||||||
|
|
||||||
pub fn read(self: *Self, output: []u8) Error!usize {
|
pub fn read(self: *Self, output: []u8) Error!usize {
|
||||||
while (true) {
|
while (true) {
|
||||||
const input = self.to_read.items[self.read_pos..];
|
const unread_len = self.to_read.items.len - self.read_pos;
|
||||||
if (input.len > 0) {
|
if (unread_len > 0) {
|
||||||
const n = @min(input.len, output.len);
|
const n = @min(unread_len, output.len);
|
||||||
@memcpy(output[0..n], input[0..n]);
|
@memcpy(output[0..n], self.to_read.items[self.read_pos..][0..n]);
|
||||||
self.read_pos += 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 n;
|
||||||
}
|
}
|
||||||
return self.err.?;
|
if (self.err) |e| {
|
||||||
}
|
if (e == DecodeError.EndOfStreamWithNoError) {
|
||||||
return n;
|
|
||||||
}
|
|
||||||
if (self.err != null) {
|
|
||||||
if (self.err.? == DecodeError.EndOfStreamWithNoError) {
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return self.err.?;
|
return e;
|
||||||
}
|
}
|
||||||
if (self.read_pos > 0) {
|
if (self.read_pos > 0) {
|
||||||
self.to_read.shrinkRetainingCapacity(0);
|
self.to_read.shrinkRetainingCapacity(0);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue