diff --git a/lib/std/fs/file.zig b/lib/std/fs/file.zig index f0304c332a..160f8314b9 100644 --- a/lib/std/fs/file.zig +++ b/lib/std/fs/file.zig @@ -282,15 +282,26 @@ pub const File = struct { .inode = st.ino, .size = @bitCast(u64, st.size), .mode = st.mode, - .kind = switch (st.mode & os.S_IFMT) { - os.S_IFBLK => .BlockDevice, - os.S_IFCHR => .CharacterDevice, - os.S_IFDIR => .Directory, - os.S_IFIFO => .NamedPipe, - os.S_IFLNK => .SymLink, - os.S_IFREG => .File, - os.S_IFSOCK => .UnixDomainSocket, - else => .Unknown, + .kind = switch (builtin.os.tag) { + .wasi => switch (st.filetype) { + os.FILETYPE_BLOCK_DEVICE => Kind.BlockDevice, + os.FILETYPE_CHARACTER_DEVICE => Kind.CharacterDevice, + os.FILETYPE_DIRECTORY => Kind.Directory, + os.FILETYPE_SYMBOLIC_LINK => Kind.SymLink, + os.FILETYPE_REGULAR_FILE => Kind.File, + os.FILETYPE_SOCKET_STREAM, os.FILETYPE_SOCKET_DGRAM => Kind.UnixDomainSocket, + else => Kind.Unknown, + }, + else => switch (st.mode & os.S_IFMT) { + os.S_IFBLK => Kind.BlockDevice, + os.S_IFCHR => Kind.CharacterDevice, + os.S_IFDIR => Kind.Directory, + os.S_IFIFO => Kind.NamedPipe, + os.S_IFLNK => Kind.SymLink, + os.S_IFREG => Kind.File, + os.S_IFSOCK => Kind.UnixDomainSocket, + else => Kind.Unknown, + }, }, .atime = @as(i128, atime.tv_sec) * std.time.ns_per_s + atime.tv_nsec, .mtime = @as(i128, mtime.tv_sec) * std.time.ns_per_s + mtime.tv_nsec,