system_darwin.odin 385 B

12345678910111213141516171819202122
  1. package rand
  2. import "core:sys/darwin"
  3. @(require_results)
  4. _system_random :: proc() -> u64 {
  5. for {
  6. value: u64
  7. ret := darwin.syscall_getentropy(([^]u8)(&value), size_of(value))
  8. if ret < 0 {
  9. switch ret {
  10. case -4: // EINTR
  11. continue
  12. case -78: // ENOSYS
  13. panic("getentropy not available in kernel")
  14. case:
  15. panic("getentropy failed")
  16. }
  17. }
  18. return value
  19. }
  20. }