authorgravatar for sachabarsayuracko@gmail.comglowsquid <sachabarsayuracko@gmail.com> 2026-04-06 02:03:11+02:00
committergravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2026-04-06 02:03:11+02:00
logfd2718f82ab70d99186f43845e4291515efb66a5
treeeb8774b79fb27efaf4fe409359d96597e6bdaa52
parent8bd0af5eb97c8b76e519f4d61d391b04d99658eb

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>

2 files changed, 25 insertions(+), 1 deletions(-)

lib/std/Io/File/Reader.zig+3-1
......@@ -309,7 +309,9 @@ fn discard(io_reader: *Io.Reader, limit: Io.Limit) Io.Reader.Error!usize {
309309 return 0;
310310 };
311311 const logical_pos = logicalPos(r);
312 const delta = @min(@intFromEnum(limit), size - logical_pos);
312 const bytes_remaining = size - logical_pos;
313 if (bytes_remaining == 0) return error.EndOfStream;
314 const delta = @min(@intFromEnum(limit), bytes_remaining);
313315 setLogicalPos(r, logical_pos + delta);
314316 return delta;
315317 },
lib/std/Io/test.zig+22
......@@ -85,6 +85,28 @@ test "File.Writer.seekTo" {
8585 try expect(fw.logicalPos() == 1234);
8686}
8787
88test "file discard" {
89 var tmp = tmpDir(.{});
90 defer tmp.cleanup();
91
92 const io = testing.io;
93
94 const tmp_file_name = "temp_test_file.txt";
95 var file = try tmp.dir.createFile(io, tmp_file_name, .{ .read = true });
96 defer file.close(io);
97
98 var fw = file.writerStreaming(io, &.{});
99
100 try fw.interface.writeAll("test");
101
102 var fr = file.reader(io, &.{});
103 const r = &fr.interface;
104
105 try std.testing.expectEqual(error.EndOfStream, r.discardAll(1024));
106 try fr.seekTo(0);
107 try std.testing.expectEqual(4, fr.interface.discardRemaining());
108}
109
88110test "File.setLength" {
89111 const io = testing.io;
90112