zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 90f0d7d0dad706dbfd170f65a12d96d41ebb8c3e (tree)
parent 7bd033275e3dd0d91ec61e227a18acea6da5eecb
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Mon,  5 Jan 2026 21:20:20 -0800

std.Io.Threaded: implement random seed fallback for WASI

Diffstat:
Mlib/std/Io/Threaded.zig | 8++++++++
1 file changed, 8 insertions(+), 0 deletions(-)

diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig @@ -15101,6 +15101,7 @@ fn randomMainThread(t: *Threaded, buffer: []u8) void { std.mem.writeInt(usize, seed[seed.len - @sizeOf(usize) ..][0..@sizeOf(usize)], aslr_addr, .native); switch (native_os) { .windows => fallbackSeedWindows(&seed), + .wasi => if (builtin.link_libc) fallbackSeedPosix(&seed) else fallbackSeedWasi(&seed), else => fallbackSeedPosix(&seed), } }, @@ -15135,6 +15136,13 @@ fn fallbackSeedWindows(seed: *[Csprng.seed_len]u8) void { std.mem.writeInt(windows.LARGE_INTEGER, seed[0..@sizeOf(windows.LARGE_INTEGER)], pc, .native); } +fn fallbackSeedWasi(seed: *[Csprng.seed_len]u8) void { + var ts: std.os.wasi.timestamp_t = undefined; + if (std.os.wasi.clock_time_get(.REALTIME, 1, &ts) == .SUCCESS) { + std.mem.writeInt(std.os.wasi.timestamp_t, seed[0..@sizeOf(std.os.wasi.timestamp_t)], ts, .native); + } +} + fn randomSecure(userdata: ?*anyopaque, buffer: []u8) Io.RandomSecureError!void { const t: *Threaded = @ptrCast(@alignCast(userdata));