use crate::{
    lazy::LazyBool,
    util_libc::{getrandom_syscall, last_os_error, sys_fill_exact},
    {use_file, Error},
};
use core::mem::MaybeUninit;
pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
    static HAS_GETRANDOM: LazyBool = LazyBool::new();
    if HAS_GETRANDOM.unsync_init(is_getrandom_available) {
        sys_fill_exact(dest, getrandom_syscall)
    } else {
        use_file::getrandom_inner(dest)
    }
}
fn is_getrandom_available() -> bool {
    if getrandom_syscall(&mut []) < 0 {
        match last_os_error().raw_os_error() {
            Some(libc::ENOSYS) => false, #[cfg(target_os = "linux")]
            Some(libc::EPERM) => false, _ => true,
        }
    } else {
        true
    }
}