From dbd3b16508f103c9567d32ee784731e95ab40493 Mon Sep 17 00:00:00 2001 From: Aidan Hobson Sayers Date: Mon, 13 Feb 2017 19:34:17 +0000 Subject: Implement major/minor macros, correct mkdev --- src/sys/stat.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/sys/stat.rs') diff --git a/src/sys/stat.rs b/src/sys/stat.rs index 076fe933..5bd63005 100644 --- a/src/sys/stat.rs +++ b/src/sys/stat.rs @@ -63,11 +63,23 @@ pub fn mknod(path: &P, kind: SFlag, perm: Mode, dev: dev_t) } #[cfg(target_os = "linux")] -const MINORBITS: usize = 20; +pub fn major(dev: dev_t) -> u64 { + ((dev >> 32) & 0xfffff000) | + ((dev >> 8) & 0x00000fff) +} + +#[cfg(target_os = "linux")] +pub fn minor(dev: dev_t) -> u64 { + ((dev >> 12) & 0xffffff00) | + ((dev ) & 0x000000ff) +} #[cfg(target_os = "linux")] -pub fn mkdev(major: u64, minor: u64) -> dev_t { - (major << MINORBITS) | minor +pub fn makedev(major: u64, minor: u64) -> dev_t { + ((major & 0xfffff000) << 32) | + ((major & 0x00000fff) << 8) | + ((minor & 0xffffff00) << 12) | + ((minor & 0x000000ff) ) } pub fn umask(mode: Mode) -> Mode { -- cgit v1.2.3