aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2025-08-27 18:57:21 -0700
committerAndrew Kelley <andrew@ziglang.org>2025-08-28 18:30:57 -0700
commit8023f3dcebff06cbf3563bdd09b07462ed43509f (patch)
treedb8a18f4680311f879f93ee25fbf32adb438691c
parente4181972470c29f83480fdd6d5a465e1f8d14d7b (diff)
downloadzig-8023f3dcebff06cbf3563bdd09b07462ed43509f.tar.gz
zig-8023f3dcebff06cbf3563bdd09b07462ed43509f.zip
fix not discarding delimiter
perhaps these APIs have the defaults backwards, eh?
-rw-r--r--lib/std/Io/Reader.zig4
-rw-r--r--lib/std/debug/Pdb.zig7
-rw-r--r--src/Compilation.zig19
-rw-r--r--src/libs/freebsd.zig6
-rw-r--r--src/libs/glibc.zig4
-rw-r--r--src/libs/netbsd.zig4
6 files changed, 35 insertions, 9 deletions
diff --git a/lib/std/Io/Reader.zig b/lib/std/Io/Reader.zig
index 43ab4482c0..a1092b3980 100644
--- a/lib/std/Io/Reader.zig
+++ b/lib/std/Io/Reader.zig
@@ -877,6 +877,8 @@ pub fn peekDelimiterExclusive(r: *Reader, delimiter: u8) DelimiterError![]u8 {
/// Appends to `w` contents by reading from the stream until `delimiter` is
/// found. Does not write the delimiter itself.
///
+/// Does not discard the delimiter from the `Reader`.
+///
/// Returns number of bytes streamed, which may be zero, or error.EndOfStream
/// if the delimiter was not found.
///
@@ -930,6 +932,8 @@ pub const StreamDelimiterLimitError = error{
/// Appends to `w` contents by reading from the stream until `delimiter` is found.
/// Does not write the delimiter itself.
///
+/// Does not discard the delimiter from the `Reader`.
+///
/// Returns number of bytes streamed, which may be zero. End of stream can be
/// detected by checking if the next byte in the stream is the delimiter.
///
diff --git a/lib/std/debug/Pdb.zig b/lib/std/debug/Pdb.zig
index 4c5b61e343..808be42ccb 100644
--- a/lib/std/debug/Pdb.zig
+++ b/lib/std/debug/Pdb.zig
@@ -2,6 +2,7 @@ const std = @import("../std.zig");
const File = std.fs.File;
const Allocator = std.mem.Allocator;
const pdb = std.pdb;
+const assert = std.debug.assert;
const Pdb = @This();
@@ -94,11 +95,15 @@ pub fn parseDbiStream(self: *Pdb) !void {
var module_name: std.Io.Writer.Allocating = .init(gpa);
defer module_name.deinit();
this_record_len += try reader.streamDelimiterLimit(&module_name.writer, 0, .limited(1024));
+ assert(reader.buffered()[0] == 0); // TODO change streamDelimiterLimit API
+ reader.toss(1);
this_record_len += 1;
var obj_file_name: std.Io.Writer.Allocating = .init(gpa);
defer obj_file_name.deinit();
this_record_len += try reader.streamDelimiterLimit(&obj_file_name.writer, 0, .limited(1024));
+ assert(reader.buffered()[0] == 0); // TODO change streamDelimiterLimit API
+ reader.toss(1);
this_record_len += 1;
if (this_record_len % 4 != 0) {
@@ -303,6 +308,8 @@ pub fn getLineNumberInfo(self: *Pdb, module: *Module, address: u64) !std.debug.S
var source_file_name: std.Io.Writer.Allocating = .init(gpa);
defer source_file_name.deinit();
_ = try adapted_reader.new_interface.streamDelimiterLimit(&source_file_name.writer, 0, .limited(1024));
+ assert(adapted_reader.new_interface.buffered()[0] == 0); // TODO change streamDelimiterLimit API
+ adapted_reader.new_interface.toss(1);
break :s try source_file_name.toOwnedSlice();
};
errdefer gpa.free(source_file_name);
diff --git a/src/Compilation.zig b/src/Compilation.zig
index 4d5e7d9eef..6c917b79c4 100644
--- a/src/Compilation.zig
+++ b/src/Compilation.zig
@@ -5893,15 +5893,16 @@ fn buildGlibcCrtFile(comp: *Compilation, crt_file: glibc.CrtFile, prog_node: std
fn buildGlibcSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) void {
defer comp.link_task_queue.finishPrelinkItem(comp);
- if (glibc.buildSharedObjects(comp, prog_node)) |_| {
- // The job should no longer be queued up since it succeeded.
- comp.queued_jobs.glibc_shared_objects = false;
- } else |err| switch (err) {
- error.AlreadyReported => return,
- else => comp.lockAndSetMiscFailure(.glibc_shared_objects, "unable to build glibc shared objects: {s}", .{
- @errorName(err),
- }),
- }
+ glibc.buildSharedObjects(comp, prog_node) catch unreachable;
+ //if (glibc.buildSharedObjects(comp, prog_node)) |_| {
+ // // The job should no longer be queued up since it succeeded.
+ // comp.queued_jobs.glibc_shared_objects = false;
+ //} else |err| switch (err) {
+ // error.AlreadyReported => return,
+ // else => comp.lockAndSetMiscFailure(.glibc_shared_objects, "unable to build glibc shared objects: {s}", .{
+ // @errorName(err),
+ // }),
+ //}
}
fn buildFreeBSDCrtFile(comp: *Compilation, crt_file: freebsd.CrtFile, prog_node: std.Progress.Node) void {
diff --git a/src/libs/freebsd.zig b/src/libs/freebsd.zig
index 60212480ac..2315964a50 100644
--- a/src/libs/freebsd.zig
+++ b/src/libs/freebsd.zig
@@ -548,6 +548,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
_ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
+ assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
+ inc_reader.toss(1);
opt_symbol_name = sym_name_buf.written();
versions.unsetAll();
@@ -694,6 +696,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
_ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
+ assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
+ inc_reader.toss(1);
opt_symbol_name = sym_name_buf.written();
versions.unsetAll();
@@ -830,6 +834,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
_ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
+ assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
+ inc_reader.toss(1);
opt_symbol_name = sym_name_buf.written();
versions.unsetAll();
diff --git a/src/libs/glibc.zig b/src/libs/glibc.zig
index 1f3302da83..4d3ee15bec 100644
--- a/src/libs/glibc.zig
+++ b/src/libs/glibc.zig
@@ -802,6 +802,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
_ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
+ assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
+ inc_reader.toss(1);
opt_symbol_name = sym_name_buf.written();
versions_buffer = undefined;
@@ -974,6 +976,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
_ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
+ assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
+ inc_reader.toss(1);
opt_symbol_name = sym_name_buf.written();
versions_buffer = undefined;
diff --git a/src/libs/netbsd.zig b/src/libs/netbsd.zig
index f758f6de7e..e47bdce3af 100644
--- a/src/libs/netbsd.zig
+++ b/src/libs/netbsd.zig
@@ -477,6 +477,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
_ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
+ assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
+ inc_reader.toss(1);
opt_symbol_name = sym_name_buf.written();
chosen_ver_index = 255;
@@ -552,6 +554,8 @@ pub fn buildSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) anye
const sym_name = opt_symbol_name orelse n: {
sym_name_buf.clearRetainingCapacity();
_ = try inc_reader.streamDelimiter(&sym_name_buf.writer, 0);
+ assert(inc_reader.buffered()[0] == 0); // TODO change streamDelimiter API
+ inc_reader.toss(1);
opt_symbol_name = sym_name_buf.written();
chosen_ver_index = 255;