use std::ffi::c_void;
#[test]
fn test_mlock() {
let mut buf = vec![0_u8; 4096];
unsafe {
match rustix::mm::mlock(buf.as_mut_ptr().cast::<c_void>(), buf.len()) {
Ok(()) => rustix::mm::munlock(buf.as_mut_ptr().cast::<c_void>(), buf.len()).unwrap(),
Err(rustix::io::Errno::PERM) | Err(rustix::io::Errno::NOMEM) => {}
Err(other) => Err(other).unwrap(),
}
}
}
#[cfg(any(target_os = "android", target_os = "linux"))]
#[test]
fn test_mlock_with() {
let mut buf = vec![0_u8; 4096];
unsafe {
match rustix::mm::mlock_with(
buf.as_mut_ptr().cast::<c_void>(),
buf.len(),
rustix::mm::MlockFlags::empty(),
) {
Ok(()) => rustix::mm::munlock(buf.as_mut_ptr().cast::<c_void>(), buf.len()).unwrap(),
Err(rustix::io::Errno::PERM)
| Err(rustix::io::Errno::NOMEM)
| Err(rustix::io::Errno::NOSYS) => {}
Err(other) => Err(other).unwrap(),
}
}
}
#[cfg(any(target_os = "android", target_os = "linux"))]
#[test]
fn test_mlock_with_onfault() {
unsafe {
if libc::syscall(libc::SYS_mlock2, 0, 0) == -1 && libc_errno::errno().0 == libc::ENOSYS {
return;
}
}
let mut buf = vec![0_u8; 4096];
unsafe {
match rustix::mm::mlock_with(
buf.as_mut_ptr().cast::<c_void>(),
buf.len(),
rustix::mm::MlockFlags::ONFAULT,
) {
Ok(()) => rustix::mm::munlock(buf.as_mut_ptr().cast::<c_void>(), buf.len()).unwrap(),
Err(rustix::io::Errno::PERM)
| Err(rustix::io::Errno::NOMEM)
| Err(rustix::io::Errno::NOSYS) => {}
Err(other) => Err(other).unwrap(),
}
}
}