summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fcntl.rs4
-rw-r--r--src/sys/mman.rs4
-rw-r--r--src/sys/stat.rs30
3 files changed, 30 insertions, 8 deletions
diff --git a/src/fcntl.rs b/src/fcntl.rs
index ebc6a8f0..8e8a28a8 100644
--- a/src/fcntl.rs
+++ b/src/fcntl.rs
@@ -1,7 +1,7 @@
use std::path::Path;
-use std::io::FilePermission;
use libc::{c_int, mode_t};
use errno::{SysResult, SysError};
+use sys::stat::Mode;
use utils::ToCStr;
pub use self::consts::*;
@@ -71,7 +71,7 @@ mod ffi {
}
}
-pub fn open(path: &Path, oflag: OFlag, mode: FilePermission) -> SysResult<Fd> {
+pub fn open(path: &Path, oflag: OFlag, mode: Mode) -> SysResult<Fd> {
let fd = unsafe { ffi::open(path.to_c_str().as_ptr(), oflag.bits(), mode.bits() as mode_t) };
if fd < 0 {
diff --git a/src/sys/mman.rs b/src/sys/mman.rs
index 2697a166..b301b967 100644
--- a/src/sys/mman.rs
+++ b/src/sys/mman.rs
@@ -1,7 +1,7 @@
use errno::{SysResult, SysError};
-use std::io::FilePermission;
use fcntl::{Fd, OFlag};
use libc::{c_void, size_t, off_t, mode_t};
+use sys::stat::Mode;
use utils::ToCStr;
pub use self::consts::*;
@@ -175,7 +175,7 @@ pub fn msync(addr: *const c_void, length: size_t, flags: MmapSync) -> SysResult<
}
}
-pub fn shm_open(name: &String, flag: OFlag, mode: FilePermission) -> SysResult<Fd> {
+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) };
if ret < 0 {
diff --git a/src/sys/stat.rs b/src/sys/stat.rs
index 8bd93606..0e90fab2 100644
--- a/src/sys/stat.rs
+++ b/src/sys/stat.rs
@@ -2,7 +2,6 @@ pub use libc::dev_t;
pub use libc::stat as FileStat;
use std::fmt;
-use std::io::FilePermission;
use std::mem;
use std::path::Path;
use libc::mode_t;
@@ -30,13 +29,36 @@ bitflags!(
}
);
+bitflags! {
+ flags Mode: mode_t {
+ const S_IRWXU = 0o0700,
+ const S_IRUSR = 0o0400,
+ const S_IWUSR = 0o0200,
+ const S_IXUSR = 0o0100,
+
+ const S_IRWXG = 0o0070,
+ const S_IRGRP = 0o0040,
+ const S_IWGRP = 0o0020,
+ const S_IXGRP = 0o0010,
+
+ const S_IRWXO = 0o0007,
+ const S_IROTH = 0o0004,
+ const S_IWOTH = 0o0002,
+ const S_IXOTH = 0o0001,
+
+ const S_ISUID = 0o4000,
+ const S_ISGID = 0o2000,
+ const S_ISVTX = 0o1000,
+ }
+}
+
impl fmt::Show for SFlag {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
write!(fmt, "SFlag {{ bits: {} }}", self.bits())
}
}
-pub fn mknod(path: &Path, kind: SFlag, perm: FilePermission, dev: dev_t) -> SysResult<()> {
+pub fn mknod(path: &Path, kind: SFlag, perm: Mode, dev: dev_t) -> SysResult<()> {
let res = unsafe { ffi::mknod(path.to_c_str().as_ptr(), kind.bits | perm.bits() as mode_t, dev) };
from_ffi(res)
}
@@ -49,9 +71,9 @@ pub fn mkdev(major: u64, minor: u64) -> dev_t {
(major << MINORBITS) | minor
}
-pub fn umask(mode: FilePermission) -> FilePermission {
+pub fn umask(mode: Mode) -> Mode {
let prev = unsafe { ffi::umask(mode.bits() as mode_t) };
- FilePermission::from_bits(prev as u32).expect("[BUG] umask returned invalid FilePermission")
+ Mode::from_bits(prev).expect("[BUG] umask returned invalid Mode")
}
pub fn stat(path: &Path) -> SysResult<FileStat> {