From ef8d7aa25110699aa5ba9d4e0825155faa8c4319 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 16 Jun 2025 09:56:07 -0700 Subject: [PATCH] std: fix a couple compilation errors --- lib/std/Progress.zig | 4 ++-- lib/std/fs/File.zig | 32 ++++++++++++++++++++------------ lib/std/io/Reader.zig | 2 +- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/lib/std/Progress.zig b/lib/std/Progress.zig index cc94b1920e..c9a866b0c8 100644 --- a/lib/std/Progress.zig +++ b/lib/std/Progress.zig @@ -611,7 +611,7 @@ pub fn unlockStdErr() void { const stderr_writer: *Writer = &stderr_file_writer.interface; /// Protected by `stderr_mutex`. var stderr_file_writer: std.fs.File.Writer = .{ - .interface = std.fs.File.Writer.init_interface(&.{}), + .interface = std.fs.File.Writer.initInterface(&.{}), .file = if (is_windows) undefined else .stderr(), .mode = .streaming, }; @@ -628,7 +628,7 @@ pub fn lockStderrWriter(buffer: []u8) *Writer { if (is_windows) stderr_file_writer.file = .stderr(); stderr_writer.flush() catch {}; stderr_writer.buffer = buffer; - return &stderr_writer; + return stderr_writer; } pub fn unlockStderrWriter() void { diff --git a/lib/std/fs/File.zig b/lib/std/fs/File.zig index efe5db1ce1..fb4d1314c7 100644 --- a/lib/std/fs/File.zig +++ b/lib/std/fs/File.zig @@ -993,7 +993,7 @@ pub const Reader = struct { }; var remaining = std.math.cast(u64, offset) orelse return seek_err; while (remaining > 0) { - const n = discard(r, .limited(remaining)) catch |err| { + const n = discard(&r.interface, .limited(remaining)) catch |err| { r.seek_err = err; return err; }; @@ -1252,25 +1252,29 @@ pub const Writer = struct { /// vectors through the underlying write calls as possible. const max_buffers_len = 16; - pub fn init(file: File, buffer: []u8) std.io.Writer { + pub fn init(file: File, buffer: []u8) Writer { return initMode(file, buffer, .positional); } - pub fn initMode(file: File, buffer: []u8, init_mode: Writer.Mode) std.io.Writer { + pub fn initMode(file: File, buffer: []u8, init_mode: Writer.Mode) Writer { return .{ .file = file, - .interface = .{ - .context = undefined, - .vtable = &.{ - .drain = drain, - .sendFile = sendFile, - }, - .buffer = buffer, - }, + .interface = initInterface(buffer), .mode = init_mode, }; } + pub fn initInterface(buffer: []u8) std.io.Writer { + return .{ + .context = undefined, + .vtable = &.{ + .drain = drain, + .sendFile = sendFile, + }, + .buffer = buffer, + }; + } + pub fn moveToReader(w: *Writer) Reader { defer w.* = undefined; return .{ @@ -1335,7 +1339,11 @@ pub const Writer = struct { }; } - pub fn sendFile(io_writer: *Writer, file_reader: *Reader, limit: std.io.Limit) std.io.Writer.FileError!usize { + pub fn sendFile( + io_writer: *std.io.Writer, + file_reader: *Reader, + limit: std.io.Limit, + ) std.io.Writer.FileError!usize { const w: *Writer = @fieldParentPtr("interface", io_writer); const out_fd = w.file.handle; const in_fd = file_reader.file.handle; diff --git a/lib/std/io/Reader.zig b/lib/std/io/Reader.zig index baf2ed565d..e9e0bcd3b7 100644 --- a/lib/std/io/Reader.zig +++ b/lib/std/io/Reader.zig @@ -162,7 +162,7 @@ pub fn defaultDiscard(r: *Reader, limit: Limit) Error!usize { }; if (n > @intFromEnum(limit)) { const over_amt = n - @intFromEnum(limit); - assert(over_amt <= w.buffer.end); // limit may be exceeded only by an amount within buffer capacity. + assert(over_amt <= w.buffer.len); // limit may be exceeded only by an amount within buffer capacity. r.seek = w.end - over_amt; r.end = w.end; return @intFromEnum(limit);