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;...@@ -6,3 +6,4 @@ pub const _errno = __error;
66
7pub extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) usize;7pub extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) usize;
8pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;8pub 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 {...@@ -120,6 +120,19 @@ pub fn getrandom(buf: []u8) GetRandomError!void {
120 }120 }
121 }121 }
122 }122 }
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 }
123 if (wasi.is_the_target) {136 if (wasi.is_the_target) {
124 switch (wasi.random_get(buf.ptr, buf.len)) {137 switch (wasi.random_get(buf.ptr, buf.len)) {
125 0 => return,138 0 => return,