From 03ed0abe08bcdfa6561c7b0e9a7ce515a3c2cfc8 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 13 Nov 2025 13:51:18 -0700 Subject: [PATCH 1/2] Enable more ioctl functions on Redox --- src/ioctl/mod.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ioctl/mod.rs b/src/ioctl/mod.rs index 4beed1137..70c690530 100644 --- a/src/ioctl/mod.rs +++ b/src/ioctl/mod.rs @@ -18,20 +18,20 @@ use crate::fd::{AsFd, BorrowedFd}; use crate::ffi as c; use crate::io::Result; -#[cfg(any(linux_kernel, bsd))] +#[cfg(any(linux_kernel, bsd, target_os = "redox"))] use core::mem; pub use patterns::*; mod patterns; -#[cfg(linux_kernel)] +#[cfg(any(linux_kernel, target_os = "redox"))] mod linux; #[cfg(bsd)] mod bsd; -#[cfg(linux_kernel)] +#[cfg(any(linux_kernel, target_os = "redox"))] use linux as platform; #[cfg(bsd)] @@ -198,7 +198,7 @@ pub unsafe trait Ioctl { /// /// If you're writing a driver and defining your own ioctl numbers, it's /// recommended to use these functions to compute them. -#[cfg(any(linux_kernel, bsd))] +#[cfg(any(linux_kernel, bsd, target_os = "redox"))] pub mod opcode { use super::*; From e7e66bc77455251463336582c0b97df01054ccb8 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 13 Nov 2025 13:53:41 -0700 Subject: [PATCH 2/2] Enable makedev, major, and minor on Redox --- src/backend/libc/fs/makedev.rs | 26 +++++++++++++++++++------- src/backend/libc/fs/mod.rs | 1 - src/fs/mod.rs | 2 -- tests/fs/main.rs | 2 +- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/backend/libc/fs/makedev.rs b/src/backend/libc/fs/makedev.rs index a55211845..840b36c00 100644 --- a/src/backend/libc/fs/makedev.rs +++ b/src/backend/libc/fs/makedev.rs @@ -14,6 +14,7 @@ use crate::fs::Dev; target_os = "aix", target_os = "android", target_os = "emscripten", + target_os = "redox", )))] #[inline] pub(crate) fn makedev(maj: u32, min: u32) -> Dev { @@ -33,15 +34,18 @@ pub(crate) fn makedev(maj: u32, min: u32) -> Dev { c::makedev(maj, min) } -#[cfg(all(target_os = "android", target_pointer_width = "32"))] +#[cfg(any( + all(target_os = "android", target_pointer_width = "32"), + target_os = "redox" +))] #[inline] pub(crate) fn makedev(maj: u32, min: u32) -> Dev { // 32-bit Android's `dev_t` is 32-bit, but its `st_dev` is 64-bit, so we do // it ourselves. - ((u64::from(maj) & 0xffff_f000_u64) << 32) + (((u64::from(maj) & 0xffff_f000_u64) << 32) | ((u64::from(maj) & 0x0000_0fff_u64) << 8) | ((u64::from(min) & 0xffff_ff00_u64) << 12) - | (u64::from(min) & 0x0000_00ff_u64) + | (u64::from(min) & 0x0000_00ff_u64)) as Dev } #[cfg(target_os = "emscripten")] @@ -70,7 +74,8 @@ pub(crate) fn makedev(maj: u32, min: u32) -> Dev { freebsdlike, target_os = "android", target_os = "emscripten", - target_os = "netbsd" + target_os = "netbsd", + target_os = "redox", )))] #[inline] pub(crate) fn major(dev: Dev) -> u32 { @@ -89,7 +94,10 @@ pub(crate) fn major(dev: Dev) -> u32 { (unsafe { c::major(dev) }) as u32 } -#[cfg(all(target_os = "android", target_pointer_width = "32"))] +#[cfg(any( + all(target_os = "android", target_pointer_width = "32"), + target_os = "redox" +))] #[inline] pub(crate) fn major(dev: Dev) -> u32 { // 32-bit Android's `dev_t` is 32-bit, but its `st_dev` is 64-bit, so we do @@ -109,7 +117,8 @@ pub(crate) fn major(dev: Dev) -> u32 { freebsdlike, target_os = "android", target_os = "emscripten", - target_os = "netbsd" + target_os = "netbsd", + target_os = "redox" )))] #[inline] pub(crate) fn minor(dev: Dev) -> u32 { @@ -128,7 +137,10 @@ pub(crate) fn minor(dev: Dev) -> u32 { (unsafe { c::minor(dev) }) as u32 } -#[cfg(all(target_os = "android", target_pointer_width = "32"))] +#[cfg(any( + all(target_os = "android", target_pointer_width = "32"), + target_os = "redox" +))] #[inline] pub(crate) fn minor(dev: Dev) -> u32 { // 32-bit Android's `dev_t` is 32-bit, but its `st_dev` is 64-bit, so we do diff --git a/src/backend/libc/fs/mod.rs b/src/backend/libc/fs/mod.rs index f75c6fb7d..e5e821ea7 100644 --- a/src/backend/libc/fs/mod.rs +++ b/src/backend/libc/fs/mod.rs @@ -6,7 +6,6 @@ pub mod inotify; target_os = "espidf", target_os = "haiku", target_os = "horizon", - target_os = "redox", target_os = "vita", target_os = "wasi" )))] diff --git a/src/fs/mod.rs b/src/fs/mod.rs index 1807ada6a..35ca17af0 100644 --- a/src/fs/mod.rs +++ b/src/fs/mod.rs @@ -38,7 +38,6 @@ mod ioctl; target_os = "espidf", target_os = "haiku", target_os = "horizon", - target_os = "redox", target_os = "vita", target_os = "wasi" )))] @@ -103,7 +102,6 @@ pub use ioctl::*; target_os = "espidf", target_os = "haiku", target_os = "horizon", - target_os = "redox", target_os = "vita", target_os = "wasi" )))] diff --git a/tests/fs/main.rs b/tests/fs/main.rs index 2713e589e..84ac2aef3 100644 --- a/tests/fs/main.rs +++ b/tests/fs/main.rs @@ -27,7 +27,7 @@ mod invalid_offset; mod ioctl; mod linkat; mod long_paths; -#[cfg(not(any(target_os = "haiku", target_os = "redox", target_os = "wasi")))] +#[cfg(not(any(target_os = "haiku", target_os = "wasi")))] mod makedev; mod mkdirat; mod mknodat;