From 030b630829d3fe9c6c387a9bf68ae65ddb3b053c Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 28 Oct 2025 07:11:52 -0700 Subject: [PATCH] std.Io.Threaded: fix EBADF error code on wasm32-wasi -lc when reading --- lib/std/Io/Threaded.zig | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig index 63242810c33f455807eedbdfbc66e0e90fbbf419..5c17a848ea2421c2f57f7fb98232a8c45310564c 100644 --- a/lib/std/Io/Threaded.zig +++ b/lib/std/Io/Threaded.zig @@ -2253,6 +2253,7 @@ const dirOpenDir = switch (native_os) { else => dirOpenDirPosix, }; +/// This function is also used for WASI when libc is linked. fn dirOpenDirPosix( userdata: ?*anyopaque, dir: Io.Dir, @@ -2551,7 +2552,10 @@ fn fileReadStreamingPosix(userdata: ?*anyopaque, file: Io.File, data: [][]u8) Io .FAULT => |err| return errnoBug(err), .SRCH => return error.ProcessNotFound, .AGAIN => return error.WouldBlock, - .BADF => |err| return errnoBug(err), // File descriptor used after closed. + .BADF => |err| { + if (native_os == .wasi) return error.NotOpenForReading; // File operation on directory. + return errnoBug(err); // File descriptor used after closed. + }, .IO => return error.InputOutput, .ISDIR => return error.IsDir, .NOBUFS => return error.SystemResources, @@ -2648,7 +2652,10 @@ fn fileReadPositionalPosix(userdata: ?*anyopaque, file: Io.File, data: [][]u8, o .FAULT => |err| return errnoBug(err), .SRCH => return error.ProcessNotFound, .AGAIN => return error.WouldBlock, - .BADF => |err| return errnoBug(err), // File descriptor used after closed. + .BADF => |err| { + if (native_os == .wasi) return error.NotOpenForReading; // File operation on directory. + return errnoBug(err); // File descriptor used after closed. + }, .IO => return error.InputOutput, .ISDIR => return error.IsDir, .NOBUFS => return error.SystemResources, -- 2.54.0