hooks-rs 0.2.0

Hooks in Rust for Xahau
use super::*;
use core::mem::MaybeUninit;

pub(crate) fn init_buffer_mut<const BUFFER_LEN: usize, F>(c_func: F) -> Result<[u8; BUFFER_LEN]>
where
    F: FnOnce(*mut MaybeUninit<u8>) -> Result<u64>,
{
    let mut uninitialized_buffer: [MaybeUninit<u8>; BUFFER_LEN] = MaybeUninit::uninit_array();
    let buffer: [u8; BUFFER_LEN] = unsafe {
        let result = c_func(uninitialized_buffer.as_mut_ptr());

        match result {
            Ok(_) => {}
            Err(err) => {
                return Err(err);
            }
        }

        uninitialized_buffer
            .as_ptr()
            .cast::<[u8; BUFFER_LEN]>()
            .read_volatile()
    };

    Ok(buffer)
}