diff options
author | Andrei-Marius Radu <thendiscard@users.noreply.github.com> | 2019-01-14 22:18:06 +0200 |
---|---|---|
committer | Andrei-Marius Radu <thendiscard@users.noreply.github.com> | 2019-01-15 00:53:52 +0200 |
commit | bdca86b8f779ca258106c44ba380c0bd508ce911 (patch) | |
tree | 48be710bf6c49f0ec81b0fea47a70ad5d3d29498 /test | |
parent | 7bcd9d2318602553c6bd917a4e552a580f9156bb (diff) | |
download | nix-bdca86b8f779ca258106c44ba380c0bd508ce911.zip |
Fix build and tests issues on OpenBSD 6.4+
1) lutimes doesn't exist on OpenBSD so it needs to be under conditional
compilation.
The only "reference" that I could find related to this is the discussion
here: https://github.com/rust-lang/libc/pull/790 .
2) fexecve doesn't exist on OpenBSD so add conditional compilation for it
in unistd and in related tests.
The only "reference" that I could find is a mention that fexecve is
not implemented on OpenBSD in the manual pages for signal(3) and
sigaction(2):
Official repository (search for "fexecve"):
https://cvsweb.openbsd.org/src/lib/libc/sys/sigaction.2?rev=1.75&content-type=text/x-cvsweb-markup
Github mirror:
https://github.com/openbsd/src/blob/master/lib/libc/sys/sigaction.2#L619
3) AIO doesn't work on OpenBSD so put test_aio_drop under conditional
compilation.
4) Add relevant changelog entries.
P.S. On OpenBSD remains the issue of test_scm_rights which builds
correctly but fails at runtime.
Diffstat (limited to 'test')
-rw-r--r-- | test/sys/test_aio_drop.rs | 17 | ||||
-rw-r--r-- | test/test_stat.rs | 15 | ||||
-rw-r--r-- | test/test_unistd.rs | 12 |
3 files changed, 33 insertions, 11 deletions
diff --git a/test/sys/test_aio_drop.rs b/test/sys/test_aio_drop.rs index 1f4a3e79..492da401 100644 --- a/test/sys/test_aio_drop.rs +++ b/test/sys/test_aio_drop.rs @@ -1,18 +1,23 @@ extern crate nix; extern crate tempfile; -use nix::sys::aio::*; -use nix::sys::signal::*; -use std::os::unix::io::AsRawFd; -use tempfile::tempfile; - // Test dropping an AioCb that hasn't yet finished. // This must happen in its own process, because on OSX this test seems to hose // the AIO subsystem and causes subsequent tests to fail #[test] #[should_panic(expected = "Dropped an in-progress AioCb")] -#[cfg(not(target_env = "musl"))] +#[cfg(all(not(target_env = "musl"), + any(target_os = "linux", + target_os = "ios", + target_os = "macos", + target_os = "freebsd", + target_os = "netbsd")))] fn test_drop() { + use nix::sys::aio::*; + use nix::sys::signal::*; + use std::os::unix::io::AsRawFd; + use tempfile::tempfile; + const WBUF: &[u8] = b"CDEF"; let f = tempfile().unwrap(); diff --git a/test/test_stat.rs b/test/test_stat.rs index 9d27ce79..fae8df82 100644 --- a/test/test_stat.rs +++ b/test/test_stat.rs @@ -7,7 +7,14 @@ use std::time::{Duration, UNIX_EPOCH}; use libc::{S_IFMT, S_IFLNK}; use nix::fcntl; -use nix::sys::stat::{self, fchmod, fchmodat, futimens, lutimes, stat, utimes, utimensat}; +use nix::sys::stat::{self, fchmod, fchmodat, futimens, stat, utimes, utimensat}; +#[cfg(any(target_os = "linux", + target_os = "haiku", + target_os = "ios", + target_os = "macos", + target_os = "freebsd", + target_os = "netbsd"))] +use nix::sys::stat::lutimes; use nix::sys::stat::{Mode, FchmodatFlags, UtimensatFlags}; #[cfg(not(any(target_os = "netbsd")))] @@ -196,6 +203,12 @@ fn test_utimes() { } #[test] +#[cfg(any(target_os = "linux", + target_os = "haiku", + target_os = "ios", + target_os = "macos", + target_os = "freebsd", + target_os = "netbsd"))] fn test_lutimes() { let tempdir = tempfile::tempdir().unwrap(); let target = tempdir.path().join("target"); diff --git a/test/test_unistd.rs b/test/test_unistd.rs index ead4b487..3fb50535 100644 --- a/test/test_unistd.rs +++ b/test/test_unistd.rs @@ -230,16 +230,20 @@ cfg_if!{ execve_test_factory!(test_execve, execve, &CString::new("/system/bin/sh").unwrap()); execve_test_factory!(test_fexecve, fexecve, File::open("/system/bin/sh").unwrap().into_raw_fd()); } else if #[cfg(any(target_os = "freebsd", - target_os = "linux", - target_os = "openbsd"))] { + target_os = "linux"))] { execve_test_factory!(test_execve, execve, &CString::new("/bin/sh").unwrap()); execve_test_factory!(test_fexecve, fexecve, File::open("/bin/sh").unwrap().into_raw_fd()); } else if #[cfg(any(target_os = "dragonfly", target_os = "ios", target_os = "macos", - target_os = "netbsd"))] { + target_os = "netbsd", + target_os = "openbsd"))] { execve_test_factory!(test_execve, execve, &CString::new("/bin/sh").unwrap()); - // No fexecve() on DragonFly, ios, macos, and NetBSD. + // No fexecve() on DragonFly, ios, macos, NetBSD, OpenBSD. + // + // Note for NetBSD and OpenBSD: although rust-lang/libc includes it + // (under unix/bsd/netbsdlike/) fexecve is not currently implemented on + // NetBSD nor on OpenBSD. } } |