diff --git a/src/desktop.rs b/src/desktop.rs index 82242460..01698af5 100644 --- a/src/desktop.rs +++ b/src/desktop.rs @@ -881,7 +881,9 @@ mod tests { impl EnvVarGuard { fn set(key: &'static str, value: &Path) -> Self { let original = env::var(key).ok(); - std::env::set_var(key, value); + // std::env::{set_var, remove_var} are unsafe on newer toolchains; + // we limit scope here to the test helper that toggles a single key. + unsafe { std::env::set_var(key, value) }; Self { key, original } } } @@ -889,9 +891,9 @@ mod tests { impl Drop for EnvVarGuard { fn drop(&mut self) { if let Some(ref original) = self.original { - std::env::set_var(self.key, original); + unsafe { std::env::set_var(self.key, original) }; } else { - std::env::remove_var(self.key); + unsafe { std::env::remove_var(self.key) }; } } } @@ -1108,7 +1110,8 @@ Icon=vmware-workstation\n\ let resolved = resolve_desktop_entry(&mut cache, &ctx, &DesktopResolveOptions::default()); assert!(resolved.icon().is_some()); assert!(resolved.exec().is_some()); - assert_eq!(resolved.startup_wm_class(), Some(&format!("crx_{}", id))); + let expected = format!("crx_{}", id); + assert_eq!(resolved.startup_wm_class(), Some(expected.as_str())); } #[test] diff --git a/src/process.rs b/src/process.rs index 1ad048dc..2b6c4e0e 100644 --- a/src/process.rs +++ b/src/process.rs @@ -9,18 +9,28 @@ use std::process::{Command, Stdio, exit}; #[cfg(feature = "tokio")] use tokio::io::AsyncReadExt; -#[cfg(feature = "tokio")] async fn read_from_pipe(read: OwnedFd) -> Option { - let mut read = tokio::net::unix::pipe::Receiver::from_owned_fd(read).unwrap(); - read.read_u32().await.ok() -} + #[cfg(feature = "tokio")] + { + let mut read = tokio::net::unix::pipe::Receiver::from_owned_fd(read).unwrap(); + return read.read_u32().await.ok(); + } -#[cfg(all(feature = "smol", not(feature = "tokio")))] -async fn read_from_pipe(read: OwnedFd) -> Option { - let mut read = smol::Async::new(std::fs::File::from(read)).unwrap(); - let mut bytes = [0; 4]; - read.read_exact(&mut bytes).await.ok()?; - Some(u32::from_be_bytes(bytes)) + #[cfg(all(feature = "smol", not(feature = "tokio")))] + { + let mut read = smol::Async::new(std::fs::File::from(read)).unwrap(); + let mut bytes = [0; 4]; + read.read_exact(&mut bytes).await.ok()?; + return Some(u32::from_be_bytes(bytes)); + } + + #[cfg(not(any(feature = "tokio", feature = "smol")))] + { + use rustix::fd::AsFd; + let mut bytes = [0u8; 4]; + rustix::io::read(&read, &mut bytes).ok()?; + return Some(u32::from_be_bytes(bytes)); + } } /// Performs a double fork with setsid to spawn and detach a command.