summaryrefslogtreecommitdiff
path: root/src/sys/mman.rs
diff options
context:
space:
mode:
authorUtkarsh Kukreti <utkarshkukreti@gmail.com>2015-02-10 12:10:57 +0530
committerCarl Lerche <me@carllerche.com>2015-02-10 22:34:13 -0800
commiteffb423fdb26843612edca6a748e479522089c1d (patch)
treea2ca4f77d2bfd158f42d8a90cd4b4c2df371037d /src/sys/mman.rs
parent51becf70d23c1ac6184921fb729fd61324538ddc (diff)
downloadnix-effb423fdb26843612edca6a748e479522089c1d.zip
Add `NixPath`, `NixError`, and `NixResult`.
Diffstat (limited to 'src/sys/mman.rs')
-rw-r--r--src/sys/mman.rs46
1 files changed, 26 insertions, 20 deletions
diff --git a/src/sys/mman.rs b/src/sys/mman.rs
index b301b967..9129aa6e 100644
--- a/src/sys/mman.rs
+++ b/src/sys/mman.rs
@@ -1,8 +1,8 @@
-use errno::{SysResult, SysError};
+use errno::Errno;
use fcntl::{Fd, OFlag};
use libc::{c_void, size_t, off_t, mode_t};
use sys::stat::Mode;
-use utils::ToCStr;
+use {NixError, NixResult, NixPath};
pub use self::consts::*;
@@ -128,68 +128,74 @@ mod ffi {
}
}
-pub unsafe fn mlock(addr: *const c_void, length: size_t) -> SysResult<()> {
+pub unsafe fn mlock(addr: *const c_void, length: size_t) -> NixResult<()> {
match ffi::mlock(addr, length) {
0 => Ok(()),
- _ => Err(SysError::last())
+ _ => Err(NixError::Sys(Errno::last()))
}
}
-pub fn munlock(addr: *const c_void, length: size_t) -> SysResult<()> {
+pub fn munlock(addr: *const c_void, length: size_t) -> NixResult<()> {
match unsafe { ffi::munlock(addr, length) } {
0 => Ok(()),
- _ => Err(SysError::last())
+ _ => Err(NixError::Sys(Errno::last()))
}
}
/// 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: Fd, offset: off_t) -> SysResult<*mut c_void> {
+pub fn mmap(addr: *mut c_void, length: size_t, prot: MmapProt, flags: MmapFlag, fd: Fd, offset: off_t) -> NixResult<*mut c_void> {
let ret = unsafe { ffi::mmap(addr, length, prot, flags, fd, offset) };
if ret as isize == MAP_FAILED {
- Err(SysError::last())
+ Err(NixError::Sys(Errno::last()))
} else {
Ok(ret)
}
}
-pub fn munmap(addr: *mut c_void, len: size_t) -> SysResult<()> {
+pub fn munmap(addr: *mut c_void, len: size_t) -> NixResult<()> {
match unsafe { ffi::munmap(addr, len) } {
0 => Ok(()),
- _ => Err(SysError::last())
+ _ => Err(NixError::Sys(Errno::last()))
}
}
-pub fn madvise(addr: *const c_void, length: size_t, advise: MmapAdvise) -> SysResult<()> {
+pub fn madvise(addr: *const c_void, length: size_t, advise: MmapAdvise) -> NixResult<()> {
match unsafe { ffi::madvise(addr, length, advise) } {
0 => Ok(()),
- _ => Err(SysError::last())
+ _ => Err(NixError::Sys(Errno::last()))
}
}
-pub fn msync(addr: *const c_void, length: size_t, flags: MmapSync) -> SysResult<()> {
+pub fn msync(addr: *const c_void, length: size_t, flags: MmapSync) -> NixResult<()> {
match unsafe { ffi::msync(addr, length, flags) } {
0 => Ok(()),
- _ => Err(SysError::last())
+ _ => Err(NixError::Sys(Errno::last()))
}
}
-pub fn shm_open(name: &String, flag: OFlag, mode: Mode) -> SysResult<Fd> {
- let ret = unsafe { ffi::shm_open(name.to_c_str().as_ptr(), flag.bits(), mode.bits() as mode_t) };
+pub fn shm_open<P: NixPath>(name: P, flag: OFlag, mode: Mode) -> NixResult<Fd> {
+ let ret = try!(name.with_nix_path(|ptr| {
+ unsafe {
+ ffi::shm_open(ptr, flag.bits(), mode.bits() as mode_t)
+ }
+ }));
if ret < 0 {
- Err(SysError::last())
+ Err(NixError::Sys(Errno::last()))
} else {
Ok(ret)
}
}
-pub fn shm_unlink(name: &String) -> SysResult<()> {
- let ret = unsafe { ffi::shm_unlink(name.to_c_str().as_ptr()) };
+pub fn shm_unlink<P: NixPath>(name: P) -> NixResult<()> {
+ let ret = try!(name.with_nix_path(|ptr| {
+ unsafe { ffi::shm_unlink(ptr) }
+ }));
if ret < 0 {
- Err(SysError::last())
+ Err(NixError::Sys(Errno::last()))
} else {
Ok(())
}