From ae1f134495528e48a52060c62c010d2a85498572 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Wed, 30 Oct 2024 16:56:28 -0700 Subject: [PATCH 1/2] Enable a few features on more platforms. Define `PollFlags::RDHUP` on FreeBSD, `AT_EACCESS` on Emscripten, and `ptsname` on Illumos. --- src/backend/libc/event/poll_fd.rs | 12 ++++++++---- src/backend/libc/fs/types.rs | 2 +- src/backend/libc/pty/syscalls.rs | 18 +++++++++++++++--- src/pty.rs | 16 ++++++++++++++-- 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/backend/libc/event/poll_fd.rs b/src/backend/libc/event/poll_fd.rs index ba1bab0b5..c47e97700 100644 --- a/src/backend/libc/event/poll_fd.rs +++ b/src/backend/libc/event/poll_fd.rs @@ -40,10 +40,14 @@ bitflags! { #[cfg(not(target_os = "espidf"))] const NVAL = c::POLLNVAL; /// `POLLRDHUP` - #[cfg(all( - linux_kernel, - not(any(target_arch = "sparc", target_arch = "sparc64"))), - )] + #[cfg(any( + solarish, + target_os = "freebsd", + all( + linux_kernel, + not(any(target_arch = "sparc", target_arch = "sparc64")) + ), + ))] const RDHUP = c::POLLRDHUP; /// diff --git a/src/backend/libc/fs/types.rs b/src/backend/libc/fs/types.rs index 98b767cd4..c8bb01f46 100644 --- a/src/backend/libc/fs/types.rs +++ b/src/backend/libc/fs/types.rs @@ -40,7 +40,7 @@ bitflags! { const SYMLINK_NOFOLLOW = bitcast!(c::AT_SYMLINK_NOFOLLOW); /// `AT_EACCESS` - #[cfg(not(any(target_os = "emscripten", target_os = "android")))] + #[cfg(not(target_os = "android"))] const EACCESS = bitcast!(c::AT_EACCESS); /// `AT_REMOVEDIR` diff --git a/src/backend/libc/pty/syscalls.rs b/src/backend/libc/pty/syscalls.rs index 2395efde4..4e8af7509 100644 --- a/src/backend/libc/pty/syscalls.rs +++ b/src/backend/libc/pty/syscalls.rs @@ -6,7 +6,13 @@ use crate::fd::BorrowedFd; use crate::io; #[cfg(all( feature = "alloc", - any(apple, linux_like, target_os = "freebsd", target_os = "fuchsia") + any( + apple, + linux_like, + target_os = "freebsd", + target_os = "fuchsia", + target_os = "illumos" + ) ))] use { crate::ffi::{CStr, CString}, @@ -26,7 +32,13 @@ pub(crate) fn openpt(flags: OpenptFlags) -> io::Result { #[cfg(all( feature = "alloc", - any(apple, linux_like, target_os = "freebsd", target_os = "fuchsia") + any( + apple, + linux_like, + target_os = "freebsd", + target_os = "fuchsia", + target_os = "illumos" + ) ))] #[inline] pub(crate) fn ptsname(fd: BorrowedFd<'_>, mut buffer: Vec) -> io::Result { @@ -38,7 +50,7 @@ pub(crate) fn ptsname(fd: BorrowedFd<'_>, mut buffer: Vec) -> io::Result io::Result { /// [glibc]: https://sourceware.org/glibc/manual/latest/html_node/Allocation.html#index-ptsname #[cfg(all( feature = "alloc", - any(apple, linux_like, target_os = "freebsd", target_os = "fuchsia") + any( + apple, + linux_like, + target_os = "freebsd", + target_os = "fuchsia", + target_os = "illumos" + ) ))] #[inline] #[doc(alias = "ptsname_r")] From 787f5fef30ae416fee4fddc7d3fe3cd6e6c3ae63 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Wed, 30 Oct 2024 17:25:06 -0700 Subject: [PATCH 2/2] Enable `epoll` on solarish. --- src/backend/libc/conv.rs | 6 +++++- src/backend/libc/event/mod.rs | 2 +- src/backend/libc/event/poll_fd.rs | 2 +- src/backend/libc/event/syscalls.rs | 14 +++++++------- src/event/mod.rs | 2 +- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/backend/libc/conv.rs b/src/backend/libc/conv.rs index 5052b010f..f4b440b7a 100644 --- a/src/backend/libc/conv.rs +++ b/src/backend/libc/conv.rs @@ -70,7 +70,11 @@ pub(super) fn ret_c_int(raw: c::c_int) -> io::Result { } } -#[cfg(any(linux_kernel, all(target_os = "redox", feature = "event")))] +#[cfg(any( + linux_kernel, + all(solarish, feature = "event"), + all(target_os = "redox", feature = "event") +))] #[inline] pub(super) fn ret_u32(raw: c::c_int) -> io::Result { if raw == -1 { diff --git a/src/backend/libc/event/mod.rs b/src/backend/libc/event/mod.rs index a07d06b1a..23797dd78 100644 --- a/src/backend/libc/event/mod.rs +++ b/src/backend/libc/event/mod.rs @@ -5,5 +5,5 @@ pub(crate) mod types; #[cfg_attr(windows, path = "windows_syscalls.rs")] pub(crate) mod syscalls; -#[cfg(any(linux_kernel, target_os = "redox"))] +#[cfg(any(linux_kernel, solarish, target_os = "redox"))] pub mod epoll; diff --git a/src/backend/libc/event/poll_fd.rs b/src/backend/libc/event/poll_fd.rs index c47e97700..1b0d4ae1f 100644 --- a/src/backend/libc/event/poll_fd.rs +++ b/src/backend/libc/event/poll_fd.rs @@ -41,8 +41,8 @@ bitflags! { const NVAL = c::POLLNVAL; /// `POLLRDHUP` #[cfg(any( - solarish, target_os = "freebsd", + target_os = "illumos", all( linux_kernel, not(any(target_arch = "sparc", target_arch = "sparc64")) diff --git a/src/backend/libc/event/syscalls.rs b/src/backend/libc/event/syscalls.rs index 763f2e2c0..2f55dfb81 100644 --- a/src/backend/libc/event/syscalls.rs +++ b/src/backend/libc/event/syscalls.rs @@ -5,7 +5,7 @@ use crate::backend::c; use crate::backend::conv::ret; use crate::backend::conv::ret_c_int; #[cfg(feature = "alloc")] -#[cfg(any(linux_kernel, target_os = "redox"))] +#[cfg(any(linux_kernel, solarish, target_os = "redox"))] use crate::backend::conv::ret_u32; #[cfg(solarish)] use crate::event::port::Event; @@ -22,7 +22,7 @@ use crate::event::PollFd; use crate::io; #[cfg(solarish)] use crate::utils::as_mut_ptr; -#[cfg(any(linux_kernel, target_os = "redox"))] +#[cfg(any(linux_kernel, solarish, target_os = "redox"))] use crate::utils::as_ptr; #[cfg(any( all(feature = "alloc", bsd), @@ -351,13 +351,13 @@ pub(crate) fn pause() { } #[inline] -#[cfg(any(linux_kernel, target_os = "redox"))] +#[cfg(any(linux_kernel, solarish, target_os = "redox"))] pub(crate) fn epoll_create(flags: super::epoll::CreateFlags) -> io::Result { unsafe { ret_owned_fd(c::epoll_create1(bitflags_bits!(flags))) } } #[inline] -#[cfg(any(linux_kernel, target_os = "redox"))] +#[cfg(any(linux_kernel, solarish, target_os = "redox"))] pub(crate) fn epoll_add( epoll: BorrowedFd<'_>, source: BorrowedFd<'_>, @@ -378,7 +378,7 @@ pub(crate) fn epoll_add( } #[inline] -#[cfg(any(linux_kernel, target_os = "redox"))] +#[cfg(any(linux_kernel, solarish, target_os = "redox"))] pub(crate) fn epoll_mod( epoll: BorrowedFd<'_>, source: BorrowedFd<'_>, @@ -396,7 +396,7 @@ pub(crate) fn epoll_mod( } #[inline] -#[cfg(any(linux_kernel, target_os = "redox"))] +#[cfg(any(linux_kernel, solarish, target_os = "redox"))] pub(crate) fn epoll_del(epoll: BorrowedFd<'_>, source: BorrowedFd<'_>) -> io::Result<()> { unsafe { ret(c::epoll_ctl( @@ -410,7 +410,7 @@ pub(crate) fn epoll_del(epoll: BorrowedFd<'_>, source: BorrowedFd<'_>) -> io::Re #[inline] #[cfg(feature = "alloc")] -#[cfg(any(linux_kernel, target_os = "redox"))] +#[cfg(any(linux_kernel, solarish, target_os = "redox"))] pub(crate) fn epoll_wait( epoll: BorrowedFd<'_>, events: &mut [MaybeUninit], diff --git a/src/event/mod.rs b/src/event/mod.rs index a1a51c14f..38091a982 100644 --- a/src/event/mod.rs +++ b/src/event/mod.rs @@ -1,6 +1,6 @@ //! Event operations. -#[cfg(any(linux_kernel, target_os = "redox"))] +#[cfg(any(linux_kernel, solarish, target_os = "redox"))] pub mod epoll; #[cfg(any( linux_kernel,