use std::sync::atomic::{Ordering, compiler_fence};
pub fn ptr_fill_zero<T>(ptr: *mut T) {
let len = std::mem::size_of::<T>();
let bytes = ptr as *mut u8;
for i in 0..len {
unsafe { std::ptr::write_volatile(bytes.add(i), 0) };
}
compiler_fence(Ordering::SeqCst);
}
pub fn secure_zero(slice: &mut [u8]) {
let ptr = slice.as_mut_ptr();
for i in 0..slice.len() {
unsafe { std::ptr::write_volatile(ptr.add(i), 0) };
}
compiler_fence(Ordering::SeqCst);
}
pub fn ptr_deref<'a, T>(ptr: *const T) -> &'a T {
unsafe { &*ptr }
}
pub fn ptr_deref_mut<'a, T>(ptr: *mut T) -> &'a mut T {
unsafe { &mut *ptr }
}
pub fn ptr_drop_in_place<T>(ptr: *mut T) {
unsafe { ptr.drop_in_place() };
}