Sha256: 18fdd7917c73f8b16aa82b18003948d32f9b314da10e16ef9cd2fa077b17af00
Contents?: true
Size: 769 Bytes
Versions: 24
Compression:
Stored size: 769 Bytes
Contents
use crate::Error; use core::{cmp::min, mem::MaybeUninit, num::NonZeroU32}; extern "C" { fn sys_read_entropy(buffer: *mut u8, length: usize, flags: u32) -> isize; } pub fn getrandom_inner(mut dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> { while !dest.is_empty() { let res = unsafe { sys_read_entropy(dest.as_mut_ptr() as *mut u8, dest.len(), 0) }; if res < 0 { // SAFETY: all Hermit error codes use i32 under the hood: // https://github.com/hermitcore/libhermit-rs/blob/master/src/errno.rs let code = unsafe { NonZeroU32::new_unchecked((-res) as u32) }; return Err(code.into()); } let len = min(res as usize, dest.len()); dest = &mut dest[len..]; } Ok(()) }
Version data entries
24 entries across 24 versions & 1 rubygems