From ace08ba642361d57268b1f102c371b060a1f9a2c Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 23 Dec 2025 23:44:38 -0800 Subject: [PATCH] std.Io.Threaded: prevent 0-byte file writes these cause EINVAL on darwin and are generally a wasted syscall. and remove a bogus error from File.Writer.Error. --- lib/std/Io/File/Writer.zig | 1 - lib/std/Io/Threaded.zig | 8 ++++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/std/Io/File/Writer.zig b/lib/std/Io/File/Writer.zig index 226b60993f954b7bce70d41c501d35795daacbcf..bf8c0bf289d0313926ad241f60188250635a47dc 100644 --- a/lib/std/Io/File/Writer.zig +++ b/lib/std/Io/File/Writer.zig @@ -26,7 +26,6 @@ pub const Error = error{ InputOutput, NoSpaceLeft, DeviceBusy, - InvalidArgument, /// File descriptor does not hold the required rights to write to it. AccessDenied, PermissionDenied, diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig index 086139445f737be6e55d594570a9f5f4581ffc11..3662359b31e47c157d570966cec0da355b551e9a 100644 --- a/lib/std/Io/Threaded.zig +++ b/lib/std/Io/Threaded.zig @@ -7449,6 +7449,8 @@ fn fileWritePositional( }, }; + if (iovlen == 0) return 0; + if (native_os == .wasi and !builtin.link_libc) { var n_written: usize = undefined; try current_thread.beginSyscall(); @@ -7502,7 +7504,7 @@ fn fileWritePositional( else => |e| { current_thread.endSyscall(); switch (e) { - .INVAL => return error.InvalidArgument, + .INVAL => |err| return errnoBug(err), .FAULT => |err| return errnoBug(err), .AGAIN => return error.WouldBlock, .BADF => return error.NotOpenForWriting, // Usually a race condition. @@ -7569,6 +7571,8 @@ fn fileWriteStreaming( }, }; + if (iovlen == 0) return 0; + if (native_os == .wasi and !builtin.link_libc) { var n_written: usize = undefined; try current_thread.beginSyscall(); @@ -7619,7 +7623,7 @@ fn fileWriteStreaming( else => |e| { current_thread.endSyscall(); switch (e) { - .INVAL => return error.InvalidArgument, + .INVAL => |err| return errnoBug(err), .FAULT => |err| return errnoBug(err), .AGAIN => return error.WouldBlock, .BADF => return error.NotOpenForWriting, // Can be a race condition. -- 2.54.0