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