From fe5da36aa3b1dbeb02276c6628640c68a5922191 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 3 Feb 2026 01:02:48 -0800 Subject: [PATCH] std.Io make Clock.resolution fallible --- lib/std/Io.zig | 9 +++++++-- lib/std/Io/Threaded.zig | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/std/Io.zig b/lib/std/Io.zig index 09da9b533a..92327e0f5d 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 2cd350f58c..6255d96978 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))) {