diff options
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/c/darwin.zig | 2 | ||||
| -rw-r--r-- | lib/std/os.zig | 16 |
2 files changed, 10 insertions, 8 deletions
diff --git a/lib/std/c/darwin.zig b/lib/std/c/darwin.zig index cc7e6d0463..22b4d14732 100644 --- a/lib/std/c/darwin.zig +++ b/lib/std/c/darwin.zig @@ -171,3 +171,5 @@ pub const pthread_attr_t = extern struct { __sig: c_long, __opaque: [56]u8, }; + +pub extern "c" fn arc4random_buf(buf: [*]u8, len: usize) void; diff --git a/lib/std/os.zig b/lib/std/os.zig index 8994884566..4ccdf57ad3 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -164,17 +164,17 @@ pub fn getrandom(buffer: []u8) GetRandomError!void { } return; } - if (builtin.os.tag == .netbsd or builtin.os.tag == .openbsd) { - system.arc4random_buf(buffer.ptr, buffer.len); - return; - } - if (builtin.os.tag == .wasi) { - switch (wasi.random_get(buffer.ptr, buffer.len)) { + switch (builtin.os.tag) { + .netbsd, .openbsd, .macos, .ios, .tvos, .watchos => { + system.arc4random_buf(buffer.ptr, buffer.len); + return; + }, + .wasi => switch (wasi.random_get(buffer.ptr, buffer.len)) { 0 => return, else => |err| return unexpectedErrno(err), - } + }, + else => return getRandomBytesDevURandom(buffer), } - return getRandomBytesDevURandom(buffer); } fn getRandomBytesDevURandom(buf: []u8) !void { |
