From 4d65b1ab9cb86bcbbfb0e5b26e3552f6f3582004 Mon Sep 17 00:00:00 2001 From: flysand7 Date: Wed, 18 Oct 2023 01:57:26 +1100 Subject: Implement new sys/unix package --- core/math/rand/system_linux.odin | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) (limited to 'core/math') diff --git a/core/math/rand/system_linux.odin b/core/math/rand/system_linux.odin index 2923b77be..42c9f86fa 100644 --- a/core/math/rand/system_linux.odin +++ b/core/math/rand/system_linux.odin @@ -1,27 +1,28 @@ package rand -import "core:sys/unix" +import "core:sys/linux" @(require_results) _system_random :: proc() -> u64 { for { value: u64 - ret := unix.sys_getrandom(([^]u8)(&value), size_of(value), 0) - if ret < 0 { - switch ret { - case -4: // EINTR - // Call interupted by a signal handler, just retry the request. - continue - case -38: // ENOSYS - // The kernel is apparently prehistoric (< 3.17 circa 2014) - // and does not support getrandom. - panic("getrandom not available in kernel") - case: - // All other failures are things that should NEVER happen - // unless the kernel interface changes (ie: the Linux - // developers break userland). - panic("getrandom failed") - } + value_buf := (cast([^]u8)&value)[:size_of(u64)] + _, errno := linux.getrandom(value_buf, {}) + #partial switch errno { + case .NONE: + // Do nothing + case .EINTR: + // Call interupted by a signal handler, just retry the request. + continue + case .ENOSYS: + // The kernel is apparently prehistoric (< 3.17 circa 2014) + // and does not support getrandom. + panic("getrandom not available in kernel") + case: + // All other failures are things that should NEVER happen + // unless the kernel interface changes (ie: the Linux + // developers break userland). + panic("getrandom failed") } return value } -- cgit v1.2.3