authorgravatar for euantorano@gmail.comEuan Torano <euantorano@gmail.com> 2019-08-05 17:21:12+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-08-05 09:31:38-07:00
log7b8c96612f1326525c655abe7f7bb0472cbddee1
treefa4a91d4e9ccef5e1a7ed7c29cb2425a4aa56b4d
parent8aa87ec441c13ce590dc5a9f48aab638326c8b67

Fix #2993 - use getrandom on freebsd


2 files changed, 14 insertions(+), 0 deletions(-)

std/c/freebsd.zig+1
......@@ -6,3 +6,4 @@ pub const _errno = __error;
66
77pub extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) usize;
88pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
9pub extern "c" fn getrandom(buf_ptr: [*]u8, buf_len: usize, flags: c_uint) c_int;
std/os.zig+13
......@@ -120,6 +120,19 @@ pub fn getrandom(buf: []u8) GetRandomError!void {
120120 }
121121 }
122122 }
123 if (freebsd.is_the_target) {
124 while (true) {
125 const err = std.c.getErrno(std.c.getrandom(buf.ptr, buf.len, 0));
126
127 switch (err) {
128 0 => return,
129 EINVAL => unreachable,
130 EFAULT => unreachable,
131 EINTR => continue,
132 else => return unexpectedErrno(err),
133 }
134 }
135 }
123136 if (wasi.is_the_target) {
124137 switch (wasi.random_get(buf.ptr, buf.len)) {
125138 0 => return,