diff --git a/src/unix.rs b/src/unix.rs index 66cd7e2..b1e712a 100644 --- a/src/unix.rs +++ b/src/unix.rs @@ -287,7 +287,10 @@ impl Client { // On Linux, we can use preadv2 to do non-blocking read, // even if `O_NONBLOCK` is not set. - #[cfg(target_os = "linux")] + // + // TODO: musl libc supports preadv2 since 1.2.5, but `libc` crate + // hasn't yet added it. + #[cfg(all(target_os = "linux", target_env = "gnu"))] { let read = self.read().as_raw_fd(); loop { @@ -577,7 +580,9 @@ extern "C" fn sigusr1_handler( // nothing to do } -#[cfg(target_os = "linux")] +// This should be available for all linux targets, +// though only [`non_blocking_read`] currently uses it so adding gnu cfg. +#[cfg(all(target_os = "linux", target_env = "gnu"))] fn cvt_ssize(t: libc::ssize_t) -> io::Result { if t == -1 { Err(io::Error::last_os_error()) @@ -586,7 +591,7 @@ fn cvt_ssize(t: libc::ssize_t) -> io::Result { } } -#[cfg(target_os = "linux")] +#[cfg(all(target_os = "linux", target_env = "gnu"))] fn non_blocking_read(fd: c_int, buf: &mut [u8]) -> io::Result { static IS_NONBLOCKING_READ_UNSUPPORTED: AtomicBool = AtomicBool::new(false);