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

Version Path
wasmtime-23.0.2 ./ext/cargo-vendor/getrandom-0.2.11/src/hermit.rs
wasmtime-22.0.0 ./ext/cargo-vendor/getrandom-0.2.11/src/hermit.rs
wasmtime-21.0.1 ./ext/cargo-vendor/getrandom-0.2.11/src/hermit.rs
wasmtime-20.0.2 ./ext/cargo-vendor/getrandom-0.2.11/src/hermit.rs
wasmtime-20.0.0 ./ext/cargo-vendor/getrandom-0.2.11/src/hermit.rs
wasmtime-18.0.3 ./ext/cargo-vendor/getrandom-0.2.11/src/hermit.rs
wasmtime-17.0.1 ./ext/cargo-vendor/getrandom-0.2.11/src/hermit.rs
wasmtime-17.0.0 ./ext/cargo-vendor/getrandom-0.2.11/src/hermit.rs
wasmtime-16.0.0 ./ext/cargo-vendor/getrandom-0.2.11/src/hermit.rs
wasmtime-15.0.1 ./ext/cargo-vendor/getrandom-0.2.11/src/hermit.rs
wasmtime-15.0.0 ./ext/cargo-vendor/getrandom-0.2.11/src/hermit.rs
wasmtime-14.0.4 ./ext/cargo-vendor/getrandom-0.2.10/src/hermit.rs
wasmtime-14.0.3 ./ext/cargo-vendor/getrandom-0.2.10/src/hermit.rs
wasmtime-14.0.1 ./ext/cargo-vendor/getrandom-0.2.10/src/hermit.rs
wasmtime-14.0.0 ./ext/cargo-vendor/getrandom-0.2.10/src/hermit.rs
wasmtime-13.0.0 ./ext/cargo-vendor/getrandom-0.2.10/src/hermit.rs
wasmtime-12.0.1 ./ext/cargo-vendor/getrandom-0.2.10/src/hermit.rs
wasmtime-12.0.0 ./ext/cargo-vendor/getrandom-0.2.10/src/hermit.rs
wasmtime-11.0.0 ./ext/cargo-vendor/getrandom-0.2.10/src/hermit.rs
wasmtime-10.0.1 ./ext/cargo-vendor/getrandom-0.2.10/src/hermit.rs