From 49a258c0e00d8221d088d283a4bd4fb7b0f6b21f Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Tue, 24 Mar 2026 06:23:56 -0400 Subject: [PATCH] std.Build.Step.Run: improve syscalls while running zig test executables Previously, each message requires an unseekable error to be returned from a syscall before proceeding. Ideally, the code would just pass around `*std.Io.Writer` instead of `std.Io.File` in the first place, but even then, you could argue for saving a syscall with `writerStreaming`. --- lib/std/Build/Step/Run.zig | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/std/Build/Step/Run.zig b/lib/std/Build/Step/Run.zig index 6eb7af603dd1db5506ce97e6d6a14190f46d1c33..3ed4cb2e91bcbacba4326cf81f783d42b9202a22 100644 --- a/lib/std/Build/Step/Run.zig +++ b/lib/std/Build/Step/Run.zig @@ -2126,7 +2126,7 @@ fn sendMessage(io: Io, file: Io.File, tag: std.zig.Client.Message.Tag) !void { .tag = tag, .bytes_len = 0, }; - var w = file.writer(io, &.{}); + var w = file.writerStreaming(io, &.{}); w.interface.writeStruct(header, .little) catch |err| switch (err) { error.WriteFailed => return w.err.?, }; @@ -2137,7 +2137,7 @@ fn sendRunTestMessage(io: Io, file: Io.File, tag: std.zig.Client.Message.Tag, in .tag = tag, .bytes_len = 4, }; - var w = file.writer(io, &.{}); + var w = file.writerStreaming(io, &.{}); w.interface.writeStruct(header, .little) catch |err| switch (err) { error.WriteFailed => return w.err.?, }; @@ -2157,7 +2157,7 @@ fn sendRunFuzzTestMessage( .tag = .start_fuzzing, .bytes_len = 4 + 1 + 8, }; - var w = file.writer(io, &.{}); + var w = file.writerStreaming(io, &.{}); w.interface.writeStruct(header, .little) catch |err| switch (err) { error.WriteFailed => return w.err.?, }; @@ -2202,7 +2202,7 @@ fn evalGeneric(run: *Run, spawn_options: process.SpawnOptions) !EvalGenericResul var read_buffer: [1024]u8 = undefined; var file_reader = file.reader(io, &read_buffer); var write_buffer: [1024]u8 = undefined; - var stdin_writer = child.stdin.?.writer(io, &write_buffer); + var stdin_writer = child.stdin.?.writerStreaming(io, &write_buffer); _ = stdin_writer.interface.sendFileAll(&file_reader, .unlimited) catch |err| switch (err) { error.ReadFailed => return run.step.fail("failed to read from {f}: {t}", .{ path, file_reader.err.?, -- 2.54.0