| ... | @@ -59,24 +59,18 @@ pub fn Decoder(comptime ReaderType: type) type { | ... | @@ -59,24 +59,18 @@ pub fn Decoder(comptime ReaderType: type) type { |
| 59 | | 59 | |
| 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); |