diff options
author | Philipp Matthias Schaefer <philipp.matthias.schaefer@posteo.de> | 2016-01-23 14:42:17 +0100 |
---|---|---|
committer | Philipp Matthias Schaefer <philipp.matthias.schaefer@posteo.de> | 2016-01-28 20:46:55 +0100 |
commit | 1d5c77ce2808da0e4108c4713aea3ae47b1dc328 (patch) | |
tree | 16f151847f0573133f11cc2bd84891484de695f5 /src/sys/mman.rs | |
parent | 53cae89c6892b1f125ef69a769ed8147fcba4d92 (diff) | |
download | nix-1d5c77ce2808da0e4108c4713aea3ae47b1dc328.zip |
Convert MAP_ flags to bitflags! type.
Diffstat (limited to 'src/sys/mman.rs')
-rw-r--r-- | src/sys/mman.rs | 104 |
1 files changed, 55 insertions, 49 deletions
diff --git a/src/sys/mman.rs b/src/sys/mman.rs index 7537c272..1dd0b94d 100644 --- a/src/sys/mman.rs +++ b/src/sys/mman.rs @@ -8,28 +8,28 @@ pub use self::consts::*; #[cfg(any(target_os = "linux", target_os = "android"))] mod consts { - use libc::c_int; - - pub type MmapFlag = c_int; - - pub const MAP_SHARED: MmapFlag = 0x00001; - pub const MAP_PRIVATE: MmapFlag = 0x00002; - pub const MAP_FIXED: MmapFlag = 0x00010; - - pub const MAP_FILE: MmapFlag = 0x00000; - pub const MAP_ANONYMOUS: MmapFlag = 0x00020; - pub const MAP_ANON: MmapFlag = MAP_ANONYMOUS; - pub const MAP_32BIT: MmapFlag = 0x00040; - - pub const MAP_GROWSDOWN: MmapFlag = 0x00100; - pub const MAP_DENYWRITE: MmapFlag = 0x00800; - pub const MAP_EXECUTABLE: MmapFlag = 0x01000; - pub const MAP_LOCKED: MmapFlag = 0x02000; - pub const MAP_NORESERVE: MmapFlag = 0x04000; - pub const MAP_POPULATE: MmapFlag = 0x08000; - pub const MAP_NONBLOCK: MmapFlag = 0x10000; - pub const MAP_STACK: MmapFlag = 0x20000; - pub const MAP_HUGETLB: MmapFlag = 0x40000; + use libc::{self, c_int}; + + bitflags!{ + flags MmapFlags: c_int { + const MAP_FILE = libc::MAP_FILE, + const MAP_SHARED = libc::MAP_SHARED, + const MAP_PRIVATE = libc::MAP_PRIVATE, + const MAP_FIXED = libc::MAP_FIXED, + const MAP_ANON = libc::MAP_ANON, + const MAP_ANONYMOUS = libc::MAP_ANON, + const MAP_32BIT = libc::MAP_32BIT, + const MAP_GROWSDOWN = libc::MAP_GROWSDOWN, + const MAP_DENYWRITE = libc::MAP_DENYWRITE, + const MAP_EXECUTABLE = libc::MAP_EXECUTABLE, + const MAP_LOCKED = libc::MAP_LOCKED, + const MAP_NORESERVE = libc::MAP_NORESERVE, + const MAP_POPULATE = libc::MAP_POPULATE, + const MAP_NONBLOCK = libc::MAP_NONBLOCK, + const MAP_STACK = libc::MAP_STACK, + const MAP_HUGETLB = libc::MAP_HUGETLB, + } + } pub type MmapProt = c_int; @@ -70,16 +70,19 @@ mod consts { #[cfg(any(target_os = "macos", target_os = "ios"))] mod consts { - use libc::c_int; - - pub type MmapFlag = c_int; - - pub const MAP_SHARED: MmapFlag = 0x00001; - pub const MAP_PRIVATE: MmapFlag = 0x00002; - pub const MAP_FIXED: MmapFlag = 0x00010; - - pub const MAP_NOCACHE: MmapFlag = 0x00400; - pub const MAP_JIT: MmapFlag = 0x00800; + use libc::{self, c_int}; + + bitflags!{ + flags MmapFlags: c_int { + const MAP_FILE = libc::MAP_FILE, + const MAP_SHARED = libc::MAP_SHARED, + const MAP_PRIVATE = libc::MAP_PRIVATE, + const MAP_FIXED = libc::MAP_FIXED, + const MAP_ANON = libc::MAP_ANON, + const MAP_NOCACHE = libc::MAP_NOCACHE, + const MAP_JIT = libc::MAP_JIT, + } + } pub type MmapProt = c_int; @@ -116,21 +119,24 @@ mod consts { mod consts { use libc::c_int; - pub type MmapFlag = c_int; - - pub const MAP_SHARED: MmapFlag = 0x00001; - pub const MAP_PRIVATE: MmapFlag = 0x00002; - pub const MAP_FIXED: MmapFlag = 0x00010; - - pub const MAP_RENAME: MmapFlag = 0x00020; - pub const MAP_NORESERVE: MmapFlag = 0x00040; - pub const MAP_HASSEMAPHORE: MmapFlag = 0x00200; - pub const MAP_STACK: MmapFlag = 0x00400; - #[cfg(target_os = "netbsd")] - pub const MAP_WIRED: MmapFlag = 0x00800; - pub const MAP_NOSYNC: MmapFlag = 0x00800; - pub const MAP_FILE: MmapFlag = 0x00000; - pub const MAP_ANON: MmapFlag = 0x01000; + pub type MmapFlags = c_int; + + bitflags!{ + flags MmapFlags: c_int { + const MAP_FILE = libc::MAP_FILE, + const MAP_SHARED = libc::MAP_SHARED, + const MAP_PRIVATE = libc::MAP_PRIVATE, + const MAP_FIXED = libc::MAP_FIXED, + const MAP_RENAME = libc::MAP_RENAME, + const MAP_NORESERVE = libc::MAP_NORESERVE, + const MAP_HASSEMAPHORE = libc::MAP_HASSEMAPHORE, + const MAP_STACK = libc::MAP_STACK, + #[cfg(target_os = "netbsd")] + const MAP_WIRED = libc::MAP_WIRED, + const MAP_NOSYNC = libc::MAP_NOSYNC, + const MAP_ANON = libc::MAP_ANON, + } + } pub type MmapProt = c_int; @@ -199,8 +205,8 @@ pub fn munlock(addr: *const c_void, length: size_t) -> Result<()> { /// Calls to mmap are inherently unsafe, so they must be made in an unsafe block. Typically /// a higher-level abstraction will hide the unsafe interactions with the mmap'd region. -pub fn mmap(addr: *mut c_void, length: size_t, prot: MmapProt, flags: MmapFlag, fd: RawFd, offset: off_t) -> Result<*mut c_void> { - let ret = unsafe { ffi::mmap(addr, length, prot, flags, fd, offset) }; +pub fn mmap(addr: *mut c_void, length: size_t, prot: MmapProt, flags: MmapFlags, fd: RawFd, offset: off_t) -> Result<*mut c_void> { + let ret = unsafe { ffi::mmap(addr, length, prot, flags.bits(), fd, offset) }; if ret as isize == MAP_FAILED { Err(Error::Sys(Errno::last())) |