mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-29 09:24:33 +00:00
27 lines
671 B
Odin
27 lines
671 B
Odin
package rand
|
|
|
|
import "core:sys/unix"
|
|
|
|
_system_random :: proc() -> u32 {
|
|
for {
|
|
value: u32
|
|
ret := unix.sys_getrandom(([^]u8)(&value), 4, 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")
|
|
}
|
|
}
|
|
return value
|
|
}
|
|
} |