summaryrefslogtreecommitdiff
path: root/src/sys/stat.rs
diff options
context:
space:
mode:
authorUtkarsh Kukreti <utkarshkukreti@gmail.com>2015-01-27 17:46:29 +0530
committerUtkarsh Kukreti <utkarshkukreti@gmail.com>2015-01-27 17:54:16 +0530
commita8cd40400f8b6f8575e675f2c06593008696abba (patch)
tree5b08f0b9b88cfc61e047f69b4bf1e978ea07f8cd /src/sys/stat.rs
parentcc277646472996833a8670ddb3f927ff409c4084 (diff)
downloadnix-a8cd40400f8b6f8575e675f2c06593008696abba.zip
Add a `Mode` bitflags and use it instead of `std::io::FilePermission`.
These constants are defined in POSIX [1] so we should export them anyways, plus we don't need to depend on `std::io` anymore! [breaking-change] [1]: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/stat.h.html
Diffstat (limited to 'src/sys/stat.rs')
-rw-r--r--src/sys/stat.rs30
1 files changed, 26 insertions, 4 deletions
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> {