authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-27 18:57:21-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-28 18:30:57-07:00
log8023f3dcebff06cbf3563bdd09b07462ed43509f
treedb8a18f4680311f879f93ee25fbf32adb438691c
parente4181972470c29f83480fdd6d5a465e1f8d14d7b

fix not discarding delimiter

perhaps these APIs have the defaults backwards, eh?

6 files changed, 35 insertions(+), 9 deletions(-)

lib/std/Io/Reader.zig+4
...@@ -877,6 +877,8 @@ pub fn peekDelimiterExclusive(r: *Reader, delimiter: u8) DelimiterError![]u8 {...@@ -877,6 +877,8 @@ pub fn peekDelimiterExclusive(r: *Reader, delimiter: u8) DelimiterError![]u8 {
877/// Appends to `w` contents by reading from the stream until `delimiter` is877/// Appends to `w` contents by reading from the stream until `delimiter` is
878/// found. Does not write the delimiter itself.878/// found. Does not write the delimiter itself.
879///879///
880/// Does not discard the delimiter from the `Reader`.
881///
880/// Returns number of bytes streamed, which may be zero, or error.EndOfStream882/// Returns number of bytes streamed, which may be zero, or error.EndOfStream
881/// if the delimiter was not found.883/// if the delimiter was not found.
882///884///
...@@ -930,6 +932,8 @@ pub const StreamDelimiterLimitError = error{...@@ -930,6 +932,8 @@ pub const StreamDelimiterLimitError = error{
930/// Appends to `w` contents by reading from the stream until `delimiter` is found.932/// Appends to `w` contents by reading from the stream until `delimiter` is found.
931/// Does not write the delimiter itself.933/// Does not write the delimiter itself.
932///934///
935/// Does not discard the delimiter from the `Reader`.
936///
933/// Returns number of bytes streamed, which may be zero. End of stream can be937/// Returns number of bytes streamed, which may be zero. End of stream can be
934/// detected by checking if the next byte in the stream is the delimiter.938/// detected by checking if the next byte in the stream is the delimiter.
935///939///
lib/std/debug/Pdb.zig+7
...@@ -2,6 +2,7 @@ const std = @import("../std.zig");...@@ -2,6 +2,7 @@ const std = @import("../std.zig");
2const File = std.fs.File;2const File = std.fs.File;
3const Allocator = std.mem.Allocator;3const Allocator = std.mem.Allocator;
4const pdb = std.pdb;4const pdb = std.pdb;
5const assert = std.debug.assert;
56
6const Pdb = @This();7const Pdb = @This();
78
...@@ -94,11 +95,15 @@ pub fn parseDbiStream(self: *Pdb) !void {...@@ -94,11 +95,15 @@ pub fn parseDbiStream(self: *Pdb) !void {
94 var module_name: std.Io.Writer.Allocating = .init(gpa);95 var module_name: std.Io.Writer.Allocating = .init(gpa);
95 defer module_name.deinit();96 defer module_name.deinit();
96 this_record_len += try reader.streamDelimiterLimit(&module_name.writer, 0, .limited(1024));97 this_record_len += try reader.streamDelimiterLimit(&module_name.writer, 0, .limited(1024));
98 assert(reader.buffered()[0] == 0); // TODO change streamDelimiterLimit API
99 reader.toss(1);
97 this_record_len += 1;100 this_record_len += 1;
98101
99 var obj_file_name: std.Io.Writer.Allocating = .init(gpa);102 var obj_file_name: std.Io.Writer.Allocating = .init(gpa);
100 defer obj_file_name.deinit();103 defer obj_file_name.deinit();
101 this_record_len += try reader.streamDelimiterLimit(&obj_file_name.writer, 0, .limited(1024));104 this_record_len += try reader.streamDelimiterLimit(&obj_file_name.writer, 0, .limited(1024));
105 assert(reader.buffered()[0] == 0); // TODO change streamDelimiterLimit API
106 reader.toss(1);
102 this_record_len += 1;107 this_record_len += 1;
103108
104 if (this_record_len % 4 != 0) {109 if (this_record_len % 4 != 0) {
...@@ -303,6 +308,8 @@ pub fn getLineNumberInfo(self: *Pdb, module: *Module, address: u64) !std.debug.S...@@ -303,6 +308,8 @@ pub fn getLineNumberInfo(self: *Pdb, module: *Module, address: u64) !std.debug.S
303 var source_file_name: std.Io.Writer.Allocating = .init(gpa);308 var source_file_name: std.Io.Writer.Allocating = .init(gpa);
304 defer source_file_name.deinit();309 defer source_file_name.deinit();
305 _ = try adapted_reader.new_interface.streamDelimiterLimit(&source_file_name.writer, 0, .limited(1024));310 _ = try adapted_reader.new_interface.streamDelimiterLimit(&source_file_name.writer, 0, .limited(1024));
311 assert(adapted_reader.new_interface.buffered()[0] == 0); // TODO change streamDelimiterLimit API
312 adapted_reader.new_interface.toss(1);
306 break :s try source_file_name.toOwnedSlice();313 break :s try source_file_name.toOwnedSlice();
307 };314 };
308 errdefer gpa.free(source_file_name);315 errdefer gpa.free(source_file_name);
src/Compilation.zig+10-9
...@@ -5893,15 +5893,16 @@ fn buildGlibcCrtFile(comp: *Compilation, crt_file: glibc.CrtFile, prog_node: std...@@ -5893,15 +5893,16 @@ fn buildGlibcCrtFile(comp: *Compilation, crt_file: glibc.CrtFile, prog_node: std
58935893
5894fn buildGlibcSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) void {5894fn buildGlibcSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) void {
5895 defer comp.link_task_queue.finishPrelinkItem(comp);5895 defer comp.link_task_queue.finishPrelinkItem(comp);
5896 if (glibc.buildSharedObjects(comp, prog_node)) |_| {5896 glibc.buildSharedObjects(comp, prog_node) catch unreachable;
5897 // The job should no longer be queued up since it succeeded.5897 //if (glibc.buildSharedObjects(comp, prog_node)) |_| {
5898 comp.queued_jobs.glibc_shared_objects = false;5898 // // The job should no longer be queued up since it succeeded.
5899 } else |err| switch (err) {5899 // comp.queued_jobs.glibc_shared_objects = false;
5900 error.AlreadyReported => return,5900 //} else |err| switch (err) {
5901 else => comp.lockAndSetMiscFailure(.glibc_shared_objects, "unable to build glibc shared objects: {s}", .{5901 // error.AlreadyReported => return,
5902 @errorName(err),5902 // else => comp.lockAndSetMiscFailure(.glibc_shared_objects, "unable to build glibc shared objects: {s}", .{
5903 }),5903 // @errorName(err),
5904 }5904 // }),
5905 //}
5905}5906}
59065907
5907fn buildFreeBSDCrtFile(comp: *Compilation, crt_file: freebsd.CrtFile, prog_node: std.Progress.Node) void {5908fn buildFreeBSDCrtFile(comp: *Compilation, crt_file: freebsd.CrtFile, prog_node: std.Progress.Node) void {
src/libs/freebsd.zig+6
...@@ -548,6 +548,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -548,6 +548,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
548 const sym_name = opt_symbol_name orelse n: {548 const sym_name = opt_symbol_name orelse n: {
549 sym_name_buf.clearRetainingCapacity();549 sym_name_buf.clearRetainingCapacity();
550 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);550 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
551 assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
552 inc_reader.toss(1);
551553
552 opt_symbol_name = sym_name_buf.written();554 opt_symbol_name = sym_name_buf.written();
553 versions.unsetAll();555 versions.unsetAll();
...@@ -694,6 +696,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -694,6 +696,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
694 const sym_name = opt_symbol_name orelse n: {696 const sym_name = opt_symbol_name orelse n: {
695 sym_name_buf.clearRetainingCapacity();697 sym_name_buf.clearRetainingCapacity();
696 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);698 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
699 assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
700 inc_reader.toss(1);
697701
698 opt_symbol_name = sym_name_buf.written();702 opt_symbol_name = sym_name_buf.written();
699 versions.unsetAll();703 versions.unsetAll();
...@@ -830,6 +834,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -830,6 +834,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
830 const sym_name = opt_symbol_name orelse n: {834 const sym_name = opt_symbol_name orelse n: {
831 sym_name_buf.clearRetainingCapacity();835 sym_name_buf.clearRetainingCapacity();
832 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);836 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
837 assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
838 inc_reader.toss(1);
833839
834 opt_symbol_name = sym_name_buf.written();840 opt_symbol_name = sym_name_buf.written();
835 versions.unsetAll();841 versions.unsetAll();
src/libs/glibc.zig+4
...@@ -802,6 +802,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -802,6 +802,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
802 const sym_name = opt_symbol_name orelse n: {802 const sym_name = opt_symbol_name orelse n: {
803 sym_name_buf.clearRetainingCapacity();803 sym_name_buf.clearRetainingCapacity();
804 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);804 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
805 assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
806 inc_reader.toss(1);
805807
806 opt_symbol_name = sym_name_buf.written();808 opt_symbol_name = sym_name_buf.written();
807 versions_buffer = undefined;809 versions_buffer = undefined;
...@@ -974,6 +976,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -974,6 +976,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
974 const sym_name = opt_symbol_name orelse n: {976 const sym_name = opt_symbol_name orelse n: {
975 sym_name_buf.clearRetainingCapacity();977 sym_name_buf.clearRetainingCapacity();
976 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);978 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
979 assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
980 inc_reader.toss(1);
977981
978 opt_symbol_name = sym_name_buf.written();982 opt_symbol_name = sym_name_buf.written();
979 versions_buffer = undefined;983 versions_buffer = undefined;
src/libs/netbsd.zig+4
...@@ -477,6 +477,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -477,6 +477,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
477 const sym_name = opt_symbol_name orelse n: {477 const sym_name = opt_symbol_name orelse n: {
478 sym_name_buf.clearRetainingCapacity();478 sym_name_buf.clearRetainingCapacity();
479 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);479 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
480 assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
481 inc_reader.toss(1);
480482
481 opt_symbol_name = sym_name_buf.written();483 opt_symbol_name = sym_name_buf.written();
482 chosen_ver_index = 255;484 chosen_ver_index = 255;
...@@ -552,6 +554,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye...@@ -552,6 +554,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
552 const sym_name = opt_symbol_name orelse n: {554 const sym_name = opt_symbol_name orelse n: {
553 sym_name_buf.clearRetainingCapacity();555 sym_name_buf.clearRetainingCapacity();
554 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);556 _ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
557 assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
558 inc_reader.toss(1);
555559
556 opt_symbol_name = sym_name_buf.written();560 opt_symbol_name = sym_name_buf.written();
557 chosen_ver_index = 255;561 chosen_ver_index = 255;