use core::num::NonZeroUsize;
use core::sync::atomic::{AtomicUsize, Ordering};
#[cfg(feature = "std")]
pub fn last_os_error() -> std::io::Error {
std::io::Error::last_os_error()
}
#[cfg(not(feature = "std"))]
pub fn last_os_error() -> i32 {
unsafe { *libc::__errno_location() }
}
pub fn page_size() -> NonZeroUsize {
static VALUE: AtomicUsize = AtomicUsize::new(0);
let value = match VALUE.load(Ordering::Relaxed) {
0 => {
let value = unsafe { libc::sysconf(libc::_SC_PAGESIZE) as usize };
assert!(value.is_power_of_two(), "page size must be a power of 2");
VALUE.store(value, Ordering::Relaxed);
value
}
v => v,
};
unsafe { NonZeroUsize::new_unchecked(value) }
}