From d680b9e9b2320612a4e988763f5090c4ae8f9a8f Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 13 Oct 2025 19:04:02 -0700 Subject: [PATCH] std.Io.File: add WouldBlock to the error set Even in an asynchronous world, the concept of a non-blocking flag is useful because it determines under what conditions the operation completes. --- lib/std/Io/File.zig | 2 ++ lib/std/Io/Threaded.zig | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/std/Io/File.zig b/lib/std/Io/File.zig index 43ce6108ed..c2ceaa95b7 100644 --- a/lib/std/Io/File.zig +++ b/lib/std/Io/File.zig @@ -139,6 +139,8 @@ pub const OpenError = error{ /// kernel (e.g., for module/firmware loading), and write access was /// requested. FileBusy, + /// Non-blocking was requested and the operation cannot return immediately. + WouldBlock, } || Io.Dir.PathNameError || Io.Cancelable || Io.UnexpectedError; pub fn close(file: File, io: Io) void { diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig index 2c05ff279c..a200632764 100644 --- a/lib/std/Io/Threaded.zig +++ b/lib/std/Io/Threaded.zig @@ -1039,7 +1039,7 @@ fn dirCreateFilePosix( .EXIST => return error.PathAlreadyExists, .BUSY => return error.DeviceBusy, .OPNOTSUPP => return error.FileLocksNotSupported, - //.AGAIN => return error.WouldBlock, + .AGAIN => return error.WouldBlock, .TXTBSY => return error.FileBusy, .NXIO => return error.NoDevice, .ILSEQ => return error.BadPathName, @@ -1064,7 +1064,7 @@ fn dirCreateFilePosix( .BADF => |err| return errnoBug(err), .INVAL => |err| return errnoBug(err), // invalid parameters .NOLCK => return error.SystemResources, - //.AGAIN => return error.WouldBlock, + .AGAIN => return error.WouldBlock, .OPNOTSUPP => return error.FileLocksNotSupported, else => |err| return posix.unexpectedErrno(err), } @@ -1168,7 +1168,7 @@ fn dirOpenFile( .EXIST => return error.PathAlreadyExists, .BUSY => return error.DeviceBusy, .OPNOTSUPP => return error.FileLocksNotSupported, - //.AGAIN => return error.WouldBlock, + .AGAIN => return error.WouldBlock, .TXTBSY => return error.FileBusy, .NXIO => return error.NoDevice, .ILSEQ => return error.BadPathName, @@ -1193,7 +1193,7 @@ fn dirOpenFile( .BADF => |err| return errnoBug(err), .INVAL => |err| return errnoBug(err), // invalid parameters .NOLCK => return error.SystemResources, - //.AGAIN => return error.WouldBlock, + .AGAIN => return error.WouldBlock, .OPNOTSUPP => return error.FileLocksNotSupported, else => |err| return posix.unexpectedErrno(err), }