use core::ffi::c_void;
use super::{MadviseAdvice, MapFlags, PageSize, ProtFlags};
use crate::Result;
pub trait Mmap {
#[inline]
fn page_size() -> PageSize {
PageSize::Base
}
unsafe fn mmap(
addr: Option<usize>,
len: usize,
prot: ProtFlags,
flags: MapFlags,
offset: usize,
fd: Option<isize>,
need_copy: &mut bool,
) -> Result<*mut c_void>;
unsafe fn mmap_anonymous(
addr: usize,
len: usize,
prot: ProtFlags,
flags: MapFlags,
) -> Result<*mut c_void>;
unsafe fn munmap(addr: *mut c_void, len: usize) -> Result<()>;
unsafe fn madvise(addr: *mut c_void, len: usize, behavior: MadviseAdvice) -> Result<()>;
unsafe fn mprotect(addr: *mut c_void, len: usize, prot: ProtFlags) -> Result<()>;
unsafe fn mmap_reserve(
addr: Option<usize>,
len: usize,
_use_file: bool,
) -> Result<*mut c_void> {
let mut need_copy = false;
unsafe {
Self::mmap(
addr,
len,
ProtFlags::PROT_NONE,
MapFlags::MAP_PRIVATE | MapFlags::MAP_ANONYMOUS,
0,
None,
&mut need_copy,
)
}
}
}