1#![allow(unused, non_camel_case_types)]
6pub extern crate libc;
7
8pub mod constants;
9pub mod types;
10pub mod linux;
11pub mod unix;
12
13pub fn memory <T> (size: usize, read: bool, write: bool, exec: bool, shared: bool) -> *mut T {
29 use crate::{constants::{map, mprot}, unix::sys_mmap};
30
31 let mut prot = mprot::NONE;
32 let mut flags = map::ANON;
33
34 if read { prot |= mprot::READ; }
35 if write { prot |= mprot::WRITE; }
36 if exec { prot |= mprot::EXEC; }
37
38 if shared { flags |= map::SHARED; }
39 else { flags |= map::PRIVATE; }
40
41 sys_mmap(0 as *mut (), size, prot, flags, -1, 0) as *mut T
42}
43
44pub fn release <T> (mem: *mut T, size: usize) {
46 crate::unix::sys_munmap(mem as *mut (), size);
47}
48
49#[cfg(test)]
50mod tests {
51 #[test]
52 fn it_works() {
53 let result = 2 + 2;
54 assert_eq!(result, 4);
55 }
56}