aboutsummaryrefslogtreecommitdiff
path: root/lib/std/fs
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-06-20 22:09:47 -0400
committerAndrew Kelley <andrew@ziglang.org>2020-06-20 22:09:47 -0400
commitfaf783e5959a09fb2a1680f8bb7558db96dcbed9 (patch)
treeaf5d6b5650fe48c56d22a38e54db74e3871c98a8 /lib/std/fs
parent225f1968426d333834465dae526b3d2ae242cd8f (diff)
downloadzig-faf783e5959a09fb2a1680f8bb7558db96dcbed9.tar.gz
zig-faf783e5959a09fb2a1680f8bb7558db96dcbed9.zip
implement new stat functionality for WASI
Diffstat (limited to 'lib/std/fs')
-rw-r--r--lib/std/fs/file.zig29
1 files changed, 20 insertions, 9 deletions
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,