Darwin has arc4random(), too

This commit is contained in:
Frank Denis 2020-10-18 16:28:11 +02:00 committed by Jakub Konka
parent b28992de71
commit 6ddb05d996
2 changed files with 10 additions and 8 deletions

View File

@ -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;

View File

@ -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 {