diff --git a/lib/std/Io.zig b/lib/std/Io.zig index 09da9b533acdcfa58bc443992015c646660ee141..92327e0f5d16f0e83cd3cfabe0c86f463a68f03c 100644 --- a/lib/std/Io.zig +++ b/lib/std/Io.zig @@ -232,7 +232,7 @@ pub const VTable = struct { progressParentFile: *const fn (?*anyopaque) std.Progress.ParentFileError!File, now: *const fn (?*anyopaque, Clock) Timestamp, - clockResolution: *const fn (?*anyopaque, Clock) Duration, + clockResolution: *const fn (?*anyopaque, Clock) Clock.ResolutionError!Duration, sleep: *const fn (?*anyopaque, Timeout) Cancelable!void, random: *const fn (?*anyopaque, buffer: []u8) void, @@ -713,9 +713,14 @@ pub const Clock = enum { return io.vtable.now(io.userdata, clock); } + pub const ResolutionError = error{ + ClockUnavailable, + Unexpected, + }; + /// Reveals the granularity of `clock`. May be zero, indicating /// unsupported clock. - pub fn resolution(clock: Clock, io: Io) Io.Duration { + pub fn resolution(clock: Clock, io: Io) ResolutionError!Io.Duration { return io.vtable.clockResolution(io.userdata, clock); } diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig index 2cd350f58c9efcddba6f9bb9704fbaa21de0644e..6255d96978405cc0d1b1fc4908644facea0ef4b0 100644 --- a/lib/std/Io/Threaded.zig +++ b/lib/std/Io/Threaded.zig @@ -10833,7 +10833,7 @@ fn nowInner(clock: Io.Clock) Io.Timestamp { }; } -fn clockResolution(userdata: ?*anyopaque, clock: Io.Clock) Io.Duration { +fn clockResolution(userdata: ?*anyopaque, clock: Io.Clock) Io.Clock.ResolutionError!Io.Duration { const t: *Threaded = @ptrCast(@alignCast(userdata)); _ = t; return switch (native_os) { @@ -10872,7 +10872,7 @@ fn clockResolution(userdata: ?*anyopaque, clock: Io.Clock) Io.Duration { }; } -fn clockResolutionPosix(clock: Io.Clock) Io.Duration { +fn clockResolutionPosix(clock: Io.Clock) Io.Clock.ResolutionError!Io.Duration { const clock_id: posix.clockid_t = clockToPosix(clock); var timespec: posix.timespec = undefined; return switch (posix.errno(posix.system.clock_getres(clock_id, ×pec))) {