authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2026-09-26 18:56:42-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2026-09-26 19:33:36-04:00
log44524cbf51a14d6eed0b81f97b2b267783038e72
tree6e628b4dc8bb5b564dec1bcde52ed8c6e4882fd2
parent44f06cb6005d3ca5e0b94fbffd5a7668e6e98bd7

std.Io.Reader: revert interface change

This function was broken before and is still broken after, so avoiding the change for now.

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

lib/std/Io/Reader.zig+14-1
...@@ -849,14 +849,27 @@ pub fn peekDelimiterInclusive(r: *Reader, delimiter: u8) DelimiterError![]u8 {...@@ -849,14 +849,27 @@ pub fn peekDelimiterInclusive(r: *Reader, delimiter: u8) DelimiterError![]u8 {
849 }849 }
850 while (true) {850 while (true) {
851 const content_len = r.end - r.seek;851 const content_len = r.end - r.seek;
852 if (r.buffer.len - content_len == 0) break;
852 try fillMore(r);853 try fillMore(r);
853 if (r.buffer.len - content_len == 0) return error.StreamTooLong;
854 const seek = r.seek;854 const seek = r.seek;
855 const contents = r.buffer[0..r.end];855 const contents = r.buffer[0..r.end];
856 if (std.mem.findScalarPos(u8, contents, seek + content_len, delimiter)) |end| {856 if (std.mem.findScalarPos(u8, contents, seek + content_len, delimiter)) |end| {
857 return contents[seek .. end + 1];857 return contents[seek .. end + 1];
858 }858 }
859 }859 }
860 // It might or might not be end of stream. There is no more buffer space
861 // left to disambiguate. If `StreamTooLong` was added to `RebaseError` then
862 // this logic could be replaced by removing the exit condition from the
863 // above while loop. That error code would represent when `buffer` capacity
864 // is too small for an operation, replacing the current use of asserts.
865 var failing_writer = Writer.failing;
866 while (r.vtable.stream(r, &failing_writer, .limited(1))) |n| {
867 assert(n == 0);
868 } else |err| switch (err) {
869 error.WriteFailed => return error.StreamTooLong,
870 error.ReadFailed => |e| return e,
871 error.EndOfStream => |e| return e,
872 }
860}873}
861874
862/// Returns a slice of the next bytes of buffered data from the stream until875/// Returns a slice of the next bytes of buffered data from the stream until
test/src/Runner.zig+6
...@@ -574,6 +574,12 @@ fn testOne(runner: *Runner, test_index: u32) TestError!void {...@@ -574,6 +574,12 @@ fn testOne(runner: *Runner, test_index: u32) TestError!void {
574 update.src_dir.close(runner.io);574 update.src_dir.close(runner.io);
575 update.prog_node.end();575 update.prog_node.end();
576 }576 }
577
578 // hack around `std.Io.Reader` interface bugs by ensuring the
579 // buffer is larger than the longest supported manifest line
580 try update.manifest_sr.line_aw.ensureTotalCapacityPrecise(512);
581 update.manifest_sr.updateBuffer();
582
577 var skip_delimiter = false;583 var skip_delimiter = false;
578 while (update.manifest_sr.interface.takeSentinel('\n')) |line| {584 while (update.manifest_sr.interface.takeSentinel('\n')) |line| {
579 var line_it = std.mem.tokenizeScalar(u8, line, ' ');585 var line_it = std.mem.tokenizeScalar(u8, line, ' ');