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