From 2fd112ac9af2407dc0bf25ae4c4bbe318172b501 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Fri, 24 Apr 2020 14:40:17 +0200 Subject: [PATCH] add Device::from_dev_t Signed-off-by: Wolfgang Bumiller --- Cargo.toml | 4 ++++ src/format.rs | 24 +++++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 6abe73b..39dcf95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,3 +38,7 @@ async-example = [ "tokio/io-driver", "tokio/macros", ] + +[dev-dependencies] +libc = "0.2" +anyhow = "1.0" diff --git a/src/format.rs b/src/format.rs index e1e3ace..92dea96 100644 --- a/src/format.rs +++ b/src/format.rs @@ -321,9 +321,7 @@ impl XAttr { } pub fn name(&self) -> &CStr { - unsafe { - CStr::from_bytes_with_nul_unchecked(&self.data[..self.name_len+1]) - } + unsafe { CStr::from_bytes_with_nul_unchecked(&self.data[..self.name_len + 1]) } } pub fn value(&self) -> &[u8] { @@ -367,6 +365,26 @@ impl Device { (self.minor & 0x0000_00ff) | ((self.minor & 0xffff_ff00) << 12) } + + /// Get a `Device` from a `dev_t` value. + #[rustfmt::skip] + pub fn from_dev_t(dev: u64) -> Self { + // see to_dev_t + Self { + major: (dev >> 8) & 0x0000_0fff | + (dev >> 32) & 0xffff_f000, + minor: dev & 0x0000_00ff | + (dev >> 12) & 0xffff_ff00, + } + } +} + +#[cfg(all(test, target_os = "linux"))] +#[test] +fn test_linux_devices() { + let c_dev = unsafe { ::libc::makedev(0xabcd_1234, 0xdcba_5678) }; + let dev = Device::from_dev_t(c_dev); + assert_eq!(dev.to_dev_t(), c_dev); } #[derive(Clone, Debug)] -- 2.39.2