mirror of
https://github.com/ziglang/zig.git
synced 2026-02-20 08:14:48 +00:00
Merge pull request #2392 from shritesh/wasi_clock
wasi: implement timestamp
This commit is contained in:
commit
bb0c5f7a2f
@ -7,6 +7,7 @@ const testing = std.testing;
|
||||
const windows = std.os.windows;
|
||||
const linux = std.os.linux;
|
||||
const darwin = std.os.darwin;
|
||||
const wasi = std.os.wasi;
|
||||
const posix = std.os.posix;
|
||||
|
||||
pub const epoch = @import("epoch.zig");
|
||||
@ -64,9 +65,21 @@ pub const milliTimestamp = switch (builtin.os) {
|
||||
Os.windows => milliTimestampWindows,
|
||||
Os.linux, Os.freebsd, Os.netbsd => milliTimestampPosix,
|
||||
Os.macosx, Os.ios => milliTimestampDarwin,
|
||||
Os.wasi => milliTimestampWasi,
|
||||
else => @compileError("Unsupported OS"),
|
||||
};
|
||||
|
||||
fn milliTimestampWasi() u64 {
|
||||
var ns: wasi.timestamp_t = undefined;
|
||||
|
||||
// TODO: Verify that precision is ignored
|
||||
const err = wasi.clock_time_get(wasi.CLOCK_REALTIME, 1, &ns);
|
||||
debug.assert(err == wasi.ESUCCESS);
|
||||
|
||||
const ns_per_ms = 1000;
|
||||
return @divFloor(ns, ns_per_ms);
|
||||
}
|
||||
|
||||
fn milliTimestampWindows() u64 {
|
||||
//FileTime has a granularity of 100 nanoseconds
|
||||
// and uses the NTFS/Windows epoch
|
||||
|
||||
@ -1,18 +1,28 @@
|
||||
pub const clockid_t = u32;
|
||||
pub const errno_t = u16;
|
||||
pub const exitcode_t = u32;
|
||||
pub const fd_t = u32;
|
||||
pub const signal_t = u8;
|
||||
pub const timestamp_t = u64;
|
||||
|
||||
pub const ciovec_t = extern struct {
|
||||
buf: [*]const u8,
|
||||
buf_len: usize,
|
||||
};
|
||||
|
||||
pub const CLOCK_REALTIME: clockid_t = 0;
|
||||
pub const CLOCK_MONOTONIC: clockid_t = 1;
|
||||
pub const CLOCK_PROCESS_CPUTIME_ID: clockid_t = 2;
|
||||
pub const CLOCK_THREAD_CPUTIME_ID: clockid_t = 3;
|
||||
|
||||
pub const SIGABRT: signal_t = 6;
|
||||
|
||||
pub extern "wasi_unstable" fn args_get(argv: [*][*]u8, argv_buf: [*]u8) errno_t;
|
||||
pub extern "wasi_unstable" fn args_sizes_get(argc: *usize, argv_buf_size: *usize) errno_t;
|
||||
|
||||
pub extern "wasi_unstable" fn clock_res_get(clock_id: clockid_t, resolution: *timestamp_t) errno_t;
|
||||
pub extern "wasi_unstable" fn clock_time_get(clock_id: clockid_t, precision: timestamp_t, timestamp: *timestamp_t) errno_t;
|
||||
|
||||
pub extern "wasi_unstable" fn environ_get(environ: [*]?[*]u8, environ_buf: [*]u8) errno_t;
|
||||
pub extern "wasi_unstable" fn environ_sizes_get(environ_count: *usize, environ_buf_size: *usize) errno_t;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user