1use nix::sys::stat::dev_t;
6
7pub fn makedev(major: u64, minor: u64) -> dev_t {
10 #[cfg(target_os = "linux")]
11 {
12 nix::sys::stat::makedev(major, minor)
13 }
14 #[cfg(target_os = "macos")]
15 {
16 ((major & 0xff << 24) | (minor & 0xffffff)) as dev_t
17 }
18}
19
20pub fn major_dev(dev: u64) -> u64 {
21 #[cfg(target_os = "linux")]
22 {
23 nix::sys::stat::major(dev)
24 }
25 #[cfg(target_os = "macos")]
26 {
27 (dev >> 24) & 0xff
28 }
29}
30
31pub fn minor_dev(dev: u64) -> u64 {
32 #[cfg(target_os = "linux")]
33 {
34 nix::sys::stat::minor(dev)
35 }
36 #[cfg(target_os = "macos")]
37 {
38 dev & 0xffffff
39 }
40}
41
42#[cfg(all(test, target_os = "linux"))]
43mod tests {
44
45 use super::*;
46
47 #[test]
48 fn test_dev() {
49 let major: u64 = 0xffff_ffff_ffff_abcd;
50 let minor: u64 = 0xffff_ffff_abcd_ffff;
51 let dev = nix::sys::stat::makedev(major, minor);
52 assert_eq!(major_dev(dev), 0xffff_abcd);
53 assert_eq!(minor_dev(dev), 0xabcd_ffff);
54 }
55}