1 //! Implementation for macOS 2 use crate::{util_libc::last_os_error, Error}; 3 use core::mem::MaybeUninit; 4 5 extern "C" { 6 // Supported as of macOS 10.12+. getentropy(buf: *mut u8, size: libc::size_t) -> libc::c_int7 fn getentropy(buf: *mut u8, size: libc::size_t) -> libc::c_int; 8 } 9 getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error>10pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> { 11 for chunk in dest.chunks_mut(256) { 12 let ret = unsafe { getentropy(chunk.as_mut_ptr() as *mut u8, chunk.len()) }; 13 if ret != 0 { 14 return Err(last_os_error()); 15 } 16 } 17 Ok(()) 18 } 19