1 #[cfg(not(all(target_os = "android", target_pointer_width = "32")))]
2 use crate::backend::c;
3 use crate::fs::Dev;
4
5 #[cfg(not(any(
6 apple,
7 solarish,
8 target_os = "aix",
9 target_os = "android",
10 target_os = "emscripten",
11 )))]
12 #[inline]
makedev(maj: u32, min: u32) -> Dev13 pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
14 c::makedev(maj, min)
15 }
16
17 #[cfg(solarish)]
makedev(maj: u32, min: u32) -> Dev18 pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
19 // SAFETY: Solarish's `makedev` is marked unsafe but it isn't doing
20 // anything unsafe.
21 unsafe { c::makedev(maj, min) }
22 }
23
24 #[cfg(all(target_os = "android", not(target_pointer_width = "32")))]
25 #[inline]
makedev(maj: u32, min: u32) -> Dev26 pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
27 c::makedev(maj, min)
28 }
29
30 #[cfg(all(target_os = "android", target_pointer_width = "32"))]
31 #[inline]
makedev(maj: u32, min: u32) -> Dev32 pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
33 // 32-bit Android's `dev_t` is 32-bit, but its `st_dev` is 64-bit, so we do
34 // it ourselves.
35 ((u64::from(maj) & 0xffff_f000_u64) << 32)
36 | ((u64::from(maj) & 0x0000_0fff_u64) << 8)
37 | ((u64::from(min) & 0xffff_ff00_u64) << 12)
38 | (u64::from(min) & 0x0000_00ff_u64)
39 }
40
41 #[cfg(target_os = "emscripten")]
42 #[inline]
makedev(maj: u32, min: u32) -> Dev43 pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
44 // Emscripten's `makedev` has a 32-bit return value.
45 Dev::from(c::makedev(maj, min))
46 }
47
48 #[cfg(apple)]
49 #[inline]
makedev(maj: u32, min: u32) -> Dev50 pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
51 // Apple's `makedev` oddly has signed argument types and is `unsafe`.
52 unsafe { c::makedev(maj as i32, min as i32) }
53 }
54
55 #[cfg(target_os = "aix")]
56 #[inline]
makedev(maj: u32, min: u32) -> Dev57 pub(crate) fn makedev(maj: u32, min: u32) -> Dev {
58 // AIX's `makedev` oddly is `unsafe`.
59 unsafe { c::makedev(maj, min) }
60 }
61
62 #[cfg(not(any(
63 apple,
64 freebsdlike,
65 target_os = "android",
66 target_os = "emscripten",
67 target_os = "netbsd"
68 )))]
69 #[inline]
major(dev: Dev) -> u3270 pub(crate) fn major(dev: Dev) -> u32 {
71 unsafe { c::major(dev) }
72 }
73
74 #[cfg(any(
75 apple,
76 freebsdlike,
77 target_os = "netbsd",
78 all(target_os = "android", not(target_pointer_width = "32")),
79 ))]
80 #[inline]
major(dev: Dev) -> u3281 pub(crate) fn major(dev: Dev) -> u32 {
82 // On some platforms `major` oddly has signed return types.
83 (unsafe { c::major(dev) }) as u32
84 }
85
86 #[cfg(all(target_os = "android", target_pointer_width = "32"))]
87 #[inline]
major(dev: Dev) -> u3288 pub(crate) fn major(dev: Dev) -> u32 {
89 // 32-bit Android's `dev_t` is 32-bit, but its `st_dev` is 64-bit, so we do
90 // it ourselves.
91 (((dev >> 31 >> 1) & 0xffff_f000) | ((dev >> 8) & 0x0000_0fff)) as u32
92 }
93
94 #[cfg(target_os = "emscripten")]
95 #[inline]
major(dev: Dev) -> u3296 pub(crate) fn major(dev: Dev) -> u32 {
97 // Emscripten's `major` has a 32-bit argument value.
98 unsafe { c::major(dev as u32) }
99 }
100
101 #[cfg(not(any(
102 apple,
103 freebsdlike,
104 target_os = "android",
105 target_os = "emscripten",
106 target_os = "netbsd"
107 )))]
108 #[inline]
minor(dev: Dev) -> u32109 pub(crate) fn minor(dev: Dev) -> u32 {
110 unsafe { c::minor(dev) }
111 }
112
113 #[cfg(any(
114 apple,
115 freebsdlike,
116 target_os = "netbsd",
117 all(target_os = "android", not(target_pointer_width = "32"))
118 ))]
119 #[inline]
minor(dev: Dev) -> u32120 pub(crate) fn minor(dev: Dev) -> u32 {
121 // On some platforms, `minor` oddly has signed return types.
122 (unsafe { c::minor(dev) }) as u32
123 }
124
125 #[cfg(all(target_os = "android", target_pointer_width = "32"))]
126 #[inline]
minor(dev: Dev) -> u32127 pub(crate) fn minor(dev: Dev) -> u32 {
128 // 32-bit Android's `dev_t` is 32-bit, but its `st_dev` is 64-bit, so we do
129 // it ourselves.
130 (((dev >> 12) & 0xffff_ff00) | (dev & 0x0000_00ff)) as u32
131 }
132
133 #[cfg(target_os = "emscripten")]
134 #[inline]
minor(dev: Dev) -> u32135 pub(crate) fn minor(dev: Dev) -> u32 {
136 // Emscripten's `minor` has a 32-bit argument value.
137 unsafe { c::minor(dev as u32) }
138 }
139