Make mode_t a 0-byte type in WASI
parent
40812063cc
commit
fae4af9e1c
|
@ -30,6 +30,7 @@ pub const File = struct {
|
||||||
|
|
||||||
pub const default_mode = switch (builtin.os.tag) {
|
pub const default_mode = switch (builtin.os.tag) {
|
||||||
.windows => 0,
|
.windows => 0,
|
||||||
|
.wasi => 0,
|
||||||
else => 0o666,
|
else => 0o666,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -267,11 +268,10 @@ pub const File = struct {
|
||||||
const atime = st.atime();
|
const atime = st.atime();
|
||||||
const mtime = st.mtime();
|
const mtime = st.mtime();
|
||||||
const ctime = st.ctime();
|
const ctime = st.ctime();
|
||||||
const m = if (builtin.os.tag == .wasi) 0 else st.mode;
|
|
||||||
return Stat{
|
return Stat{
|
||||||
.inode = st.ino,
|
.inode = st.ino,
|
||||||
.size = @bitCast(u64, st.size),
|
.size = @bitCast(u64, st.size),
|
||||||
.mode = m,
|
.mode = st.mode,
|
||||||
.atime = @as(i64, atime.tv_sec) * std.time.ns_per_s + atime.tv_nsec,
|
.atime = @as(i64, atime.tv_sec) * std.time.ns_per_s + atime.tv_nsec,
|
||||||
.mtime = @as(i64, mtime.tv_sec) * std.time.ns_per_s + mtime.tv_nsec,
|
.mtime = @as(i64, mtime.tv_sec) * std.time.ns_per_s + mtime.tv_nsec,
|
||||||
.ctime = @as(i64, ctime.tv_sec) * std.time.ns_per_s + ctime.tv_nsec,
|
.ctime = @as(i64, ctime.tv_sec) * std.time.ns_per_s + ctime.tv_nsec,
|
||||||
|
|
|
@ -2904,9 +2904,9 @@ pub const FStatError = error{
|
||||||
|
|
||||||
pub fn fstat(fd: fd_t) FStatError!Stat {
|
pub fn fstat(fd: fd_t) FStatError!Stat {
|
||||||
if (builtin.os.tag == .wasi) {
|
if (builtin.os.tag == .wasi) {
|
||||||
var stat: Stat = undefined;
|
var stat: wasi.filestat_t = undefined;
|
||||||
switch (wasi.fd_filestat_get(fd, &stat)) {
|
switch (wasi.fd_filestat_get(fd, &stat)) {
|
||||||
wasi.ESUCCESS => return stat,
|
wasi.ESUCCESS => return Stat.fromFilestat(stat),
|
||||||
wasi.EINVAL => unreachable,
|
wasi.EINVAL => unreachable,
|
||||||
wasi.EBADF => unreachable, // Always a race condition.
|
wasi.EBADF => unreachable, // Always a race condition.
|
||||||
wasi.ENOMEM => return error.SystemResources,
|
wasi.ENOMEM => return error.SystemResources,
|
||||||
|
|
|
@ -3,11 +3,11 @@ pub const STDIN_FILENO = 0;
|
||||||
pub const STDOUT_FILENO = 1;
|
pub const STDOUT_FILENO = 1;
|
||||||
pub const STDERR_FILENO = 2;
|
pub const STDERR_FILENO = 2;
|
||||||
|
|
||||||
pub const mode_t = u32;
|
pub const mode_t = u0;
|
||||||
|
|
||||||
pub const time_t = i64; // match https://github.com/CraneStation/wasi-libc
|
pub const time_t = i64; // match https://github.com/CraneStation/wasi-libc
|
||||||
|
|
||||||
pub const timespec = extern struct {
|
pub const timespec = struct {
|
||||||
tv_sec: time_t,
|
tv_sec: time_t,
|
||||||
tv_nsec: isize,
|
tv_nsec: isize,
|
||||||
|
|
||||||
|
@ -26,7 +26,45 @@ pub const timespec = extern struct {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const Stat = filestat_t;
|
pub const Stat = struct {
|
||||||
|
dev: device_t,
|
||||||
|
ino: inode_t,
|
||||||
|
mode: mode_t,
|
||||||
|
filetype: filetype_t,
|
||||||
|
nlink: linkcount_t,
|
||||||
|
size: filesize_t,
|
||||||
|
atim: timespec,
|
||||||
|
mtim: timespec,
|
||||||
|
ctim: timespec,
|
||||||
|
|
||||||
|
const Self = @This();
|
||||||
|
|
||||||
|
pub fn fromFilestat(stat: filestat_t) Self {
|
||||||
|
return Self{
|
||||||
|
.dev = stat.dev,
|
||||||
|
.ino = stat.ino,
|
||||||
|
.mode = 0,
|
||||||
|
.filetype = stat.filetype,
|
||||||
|
.nlink = stat.nlink,
|
||||||
|
.size = stat.size,
|
||||||
|
.atim = stat.atime(),
|
||||||
|
.mtim = stat.mtime(),
|
||||||
|
.ctim = stat.ctime(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn atime(self: Self) timespec {
|
||||||
|
return self.atim;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn mtime(self: Self) timespec {
|
||||||
|
return self.mtim;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn ctime(self: Self) timespec {
|
||||||
|
return self.ctim;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
pub const AT_REMOVEDIR: u32 = 1; // there's no AT_REMOVEDIR in WASI, but we simulate here to match other OSes
|
pub const AT_REMOVEDIR: u32 = 1; // there's no AT_REMOVEDIR in WASI, but we simulate here to match other OSes
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue