1
0
Fork 0
forked from wry/wry
wry/src/utils/mmap.rs
2025-11-28 13:33:07 +01:00

34 lines
705 B
Rust

use {
crate::utils::{oserror::OsError, ptr_ext::PtrExt},
std::ptr,
uapi::c,
};
pub struct Mmapped {
pub ptr: *const [u8],
}
pub fn mmap(
len: usize,
prot: c::c_int,
flags: c::c_int,
fd: c::c_int,
offset: c::off_t,
) -> Result<Mmapped, OsError> {
let res = unsafe { c::mmap(ptr::null_mut(), len, prot, flags, fd, offset) };
if res == c::MAP_FAILED {
Err(OsError::default())
} else {
Ok(Mmapped {
ptr: ptr::slice_from_raw_parts(res.cast(), len),
})
}
}
impl Drop for Mmapped {
fn drop(&mut self) {
unsafe {
c::munmap(self.ptr.deref().as_ptr() as _, self.ptr.deref().len());
}
}
}