| ... | ... | @@ -661,7 +661,6 @@ const MsfStream = struct { |
| 661 | 661 | } |
| 662 | 662 | |
| 663 | 663 | fn read(self: *MsfStream, buffer: []u8) !usize { |
| 664 | | |
| 665 | 664 | var block_id = @intCast(usize, self.pos / self.block_size); |
| 666 | 665 | var block = self.blocks[block_id]; |
| 667 | 666 | var offset = self.pos % self.block_size; |
| ... | ... | @@ -671,11 +670,12 @@ const MsfStream = struct { |
| 671 | 670 | const in = &file_stream.stream; |
| 672 | 671 | |
| 673 | 672 | var size: usize = 0; |
| 674 | | for (buffer) |*byte| { |
| 675 | | byte.* = try in.readByte(); |
| 676 | | |
| 677 | | offset += 1; |
| 678 | | size += 1; |
| 673 | var rem_buffer = buffer; |
| 674 | while (size < buffer.len) { |
| 675 | const size_to_read = math.min(self.block_size - offset, rem_buffer.len); |
| 676 | size += try in.read(rem_buffer[0..size_to_read]); |
| 677 | rem_buffer = buffer[size..]; |
| 678 | offset += size_to_read; |
| 679 | 679 | |
| 680 | 680 | // If we're at the end of a block, go to the next one. |
| 681 | 681 | if (offset == self.block_size) { |
| ... | ... | @@ -686,8 +686,8 @@ const MsfStream = struct { |
| 686 | 686 | } |
| 687 | 687 | } |
| 688 | 688 | |
| 689 | | self.pos += size; |
| 690 | | return size; |
| 689 | self.pos += buffer.len; |
| 690 | return buffer.len; |
| 691 | 691 | } |
| 692 | 692 | |
| 693 | 693 | fn seekBy(self: *MsfStream, len: i64) !void { |