fix positional reader discarding (#31593)

closes #30151
closes #30126

Reviewed-on: https://codeberg.org/ziglang/zig/pulls/31593
Reviewed-by: Ryan Liptak <squeek502@noreply.codeberg.org>
Co-authored-by: glowsquid <sachabarsayuracko@gmail.com>
Co-committed-by: glowsquid <sachabarsayuracko@gmail.com>
This commit is contained in:
glowsquid
2026-04-06 02:03:11 +02:00
committed by Ryan Liptak
parent 8bd0af5eb9
commit fd2718f82a
2 changed files with 25 additions and 1 deletions
+3 -1
View File
@@ -309,7 +309,9 @@ fn discard(io_reader: *Io.Reader, limit: Io.Limit) Io.Reader.Error!usize {
return 0;
};
const logical_pos = logicalPos(r);
const delta = @min(@intFromEnum(limit), size - logical_pos);
const bytes_remaining = size - logical_pos;
if (bytes_remaining == 0) return error.EndOfStream;
const delta = @min(@intFromEnum(limit), bytes_remaining);
setLogicalPos(r, logical_pos + delta);
return delta;
},
+22
View File
@@ -85,6 +85,28 @@ test "File.Writer.seekTo" {
try expect(fw.logicalPos() == 1234);
}
test "file discard" {
var tmp = tmpDir(.{});
defer tmp.cleanup();
const io = testing.io;
const tmp_file_name = "temp_test_file.txt";
var file = try tmp.dir.createFile(io, tmp_file_name, .{ .read = true });
defer file.close(io);
var fw = file.writerStreaming(io, &.{});
try fw.interface.writeAll("test");
var fr = file.reader(io, &.{});
const r = &fr.interface;
try std.testing.expectEqual(error.EndOfStream, r.discardAll(1024));
try fr.seekTo(0);
try std.testing.expectEqual(4, fr.interface.discardRemaining());
}
test "File.setLength" {
const io = testing.io;