use crate::libssl::err::{MesalinkBuiltinError, MesalinkInnerResult};
use crate::MesalinkOpaquePointerType;
pub(crate) fn sanitize_const_ptr_for_ref<'a, T>(ptr: *const T) -> MesalinkInnerResult<&'a T>
where
T: MesalinkOpaquePointerType,
{
let ptr = ptr as *mut T;
sanitize_ptr_for_mut_ref(ptr).map(|r| r as &'a T)
}
pub(crate) fn sanitize_ptr_for_ref<'a, T>(ptr: *mut T) -> MesalinkInnerResult<&'a T>
where
T: MesalinkOpaquePointerType,
{
sanitize_ptr_for_mut_ref(ptr).map(|r| r as &'a T)
}
pub(crate) fn sanitize_ptr_for_mut_ref<'a, T>(ptr: *mut T) -> MesalinkInnerResult<&'a mut T>
where
T: MesalinkOpaquePointerType,
{
if ptr.is_null() {
return Err(error!(MesalinkBuiltinError::NullPointer.into()));
}
let obj_ref: &mut T = unsafe { &mut *ptr };
if obj_ref.check_magic() {
Ok(obj_ref)
} else {
Err(error!(MesalinkBuiltinError::MalformedObject.into()))
}
}