1b8a62b91Sopenharmony_ci#[cfg(not(all(target_os = "android", target_pointer_width = "32")))]
2b8a62b91Sopenharmony_ciuse super::super::c;
3b8a62b91Sopenharmony_ciuse crate::fs::Dev;
4b8a62b91Sopenharmony_ci
5b8a62b91Sopenharmony_ci#[cfg(not(any(target_os = "android", target_os = "emscripten")))]
6b8a62b91Sopenharmony_ci#[inline]
7b8a62b91Sopenharmony_cipub(crate) fn makedev(maj: u32, min: u32) -> Dev {
8b8a62b91Sopenharmony_ci    c::makedev(maj, min)
9b8a62b91Sopenharmony_ci}
10b8a62b91Sopenharmony_ci
11b8a62b91Sopenharmony_ci#[cfg(all(target_os = "android", not(target_pointer_width = "32")))]
12b8a62b91Sopenharmony_ci#[inline]
13b8a62b91Sopenharmony_cipub(crate) fn makedev(maj: u32, min: u32) -> Dev {
14b8a62b91Sopenharmony_ci    // Android's `makedev` oddly has signed argument types.
15b8a62b91Sopenharmony_ci    c::makedev(maj, min)
16b8a62b91Sopenharmony_ci}
17b8a62b91Sopenharmony_ci
18b8a62b91Sopenharmony_ci#[cfg(all(target_os = "android", target_pointer_width = "32"))]
19b8a62b91Sopenharmony_ci#[inline]
20b8a62b91Sopenharmony_cipub(crate) fn makedev(maj: u32, min: u32) -> Dev {
21b8a62b91Sopenharmony_ci    // 32-bit Android's `dev_t` is 32-bit, but its `st_dev` is 64-bit,
22b8a62b91Sopenharmony_ci    // so we do it ourselves.
23b8a62b91Sopenharmony_ci    ((u64::from(maj) & 0xffff_f000_u64) << 32)
24b8a62b91Sopenharmony_ci        | ((u64::from(maj) & 0x0000_0fff_u64) << 8)
25b8a62b91Sopenharmony_ci        | ((u64::from(min) & 0xffff_ff00_u64) << 12)
26b8a62b91Sopenharmony_ci        | (u64::from(min) & 0x0000_00ff_u64)
27b8a62b91Sopenharmony_ci}
28b8a62b91Sopenharmony_ci
29b8a62b91Sopenharmony_ci#[cfg(target_os = "emscripten")]
30b8a62b91Sopenharmony_ci#[inline]
31b8a62b91Sopenharmony_cipub(crate) fn makedev(maj: u32, min: u32) -> Dev {
32b8a62b91Sopenharmony_ci    // Emscripten's `makedev` has a 32-bit return value.
33b8a62b91Sopenharmony_ci    Dev::from(c::makedev(maj, min))
34b8a62b91Sopenharmony_ci}
35b8a62b91Sopenharmony_ci
36b8a62b91Sopenharmony_ci#[cfg(not(any(target_os = "android", target_os = "emscripten")))]
37b8a62b91Sopenharmony_ci#[inline]
38b8a62b91Sopenharmony_cipub(crate) fn major(dev: Dev) -> u32 {
39b8a62b91Sopenharmony_ci    unsafe { c::major(dev) }
40b8a62b91Sopenharmony_ci}
41b8a62b91Sopenharmony_ci
42b8a62b91Sopenharmony_ci#[cfg(all(target_os = "android", not(target_pointer_width = "32")))]
43b8a62b91Sopenharmony_ci#[inline]
44b8a62b91Sopenharmony_cipub(crate) fn major(dev: Dev) -> u32 {
45b8a62b91Sopenharmony_ci    // Android's `major` oddly has signed return types.
46b8a62b91Sopenharmony_ci    (unsafe { c::major(dev) }) as u32
47b8a62b91Sopenharmony_ci}
48b8a62b91Sopenharmony_ci
49b8a62b91Sopenharmony_ci#[cfg(all(target_os = "android", target_pointer_width = "32"))]
50b8a62b91Sopenharmony_ci#[inline]
51b8a62b91Sopenharmony_cipub(crate) fn major(dev: Dev) -> u32 {
52b8a62b91Sopenharmony_ci    // 32-bit Android's `dev_t` is 32-bit, but its `st_dev` is 64-bit,
53b8a62b91Sopenharmony_ci    // so we do it ourselves.
54b8a62b91Sopenharmony_ci    (((dev >> 31 >> 1) & 0xffff_f000) | ((dev >> 8) & 0x0000_0fff)) as u32
55b8a62b91Sopenharmony_ci}
56b8a62b91Sopenharmony_ci
57b8a62b91Sopenharmony_ci#[cfg(target_os = "emscripten")]
58b8a62b91Sopenharmony_ci#[inline]
59b8a62b91Sopenharmony_cipub(crate) fn major(dev: Dev) -> u32 {
60b8a62b91Sopenharmony_ci    // Emscripten's `major` has a 32-bit argument value.
61b8a62b91Sopenharmony_ci    unsafe { c::major(dev as u32) }
62b8a62b91Sopenharmony_ci}
63b8a62b91Sopenharmony_ci
64b8a62b91Sopenharmony_ci#[cfg(not(any(target_os = "android", target_os = "emscripten")))]
65b8a62b91Sopenharmony_ci#[inline]
66b8a62b91Sopenharmony_cipub(crate) fn minor(dev: Dev) -> u32 {
67b8a62b91Sopenharmony_ci    unsafe { c::minor(dev) }
68b8a62b91Sopenharmony_ci}
69b8a62b91Sopenharmony_ci
70b8a62b91Sopenharmony_ci#[cfg(all(target_os = "android", not(target_pointer_width = "32")))]
71b8a62b91Sopenharmony_ci#[inline]
72b8a62b91Sopenharmony_cipub(crate) fn minor(dev: Dev) -> u32 {
73b8a62b91Sopenharmony_ci    // Android's `minor` oddly has signed return types.
74b8a62b91Sopenharmony_ci    (unsafe { c::minor(dev) }) as u32
75b8a62b91Sopenharmony_ci}
76b8a62b91Sopenharmony_ci
77b8a62b91Sopenharmony_ci#[cfg(all(target_os = "android", target_pointer_width = "32"))]
78b8a62b91Sopenharmony_ci#[inline]
79b8a62b91Sopenharmony_cipub(crate) fn minor(dev: Dev) -> u32 {
80b8a62b91Sopenharmony_ci    // 32-bit Android's `dev_t` is 32-bit, but its `st_dev` is 64-bit,
81b8a62b91Sopenharmony_ci    // so we do it ourselves.
82b8a62b91Sopenharmony_ci    (((dev >> 12) & 0xffff_ff00) | (dev & 0x0000_00ff)) as u32
83b8a62b91Sopenharmony_ci}
84b8a62b91Sopenharmony_ci
85b8a62b91Sopenharmony_ci#[cfg(target_os = "emscripten")]
86b8a62b91Sopenharmony_ci#[inline]
87b8a62b91Sopenharmony_cipub(crate) fn minor(dev: Dev) -> u32 {
88b8a62b91Sopenharmony_ci    // Emscripten's `minor` has a 32-bit argument value.
89b8a62b91Sopenharmony_ci    unsafe { c::minor(dev as u32) }
90b8a62b91Sopenharmony_ci}
91