diff --git a/CHANGELOG.md b/CHANGELOG.md index fda5b6905b..a49686a92d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,11 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Changed ### Fixed +- `lutimes` never worked on OpenBSD as it is not implemented on OpenBSD. It has + been removed. ([#1000](https://github.com/nix-rust/nix/pull/1000)) +- `fexecve` never worked on NetBSD or on OpenBSD as it is not implemented on + either OS. It has been removed. ([#1000](https://github.com/nix-rust/nix/pull/1000)) + ### Removed ## [0.12.0] 2018-11-28 diff --git a/src/sys/stat.rs b/src/sys/stat.rs index e03678599e..1e0936ed86 100644 --- a/src/sys/stat.rs +++ b/src/sys/stat.rs @@ -209,7 +209,12 @@ pub fn utimes(path: &P, atime: &TimeVal, mtime: &TimeVal) - /// # References /// /// [lutimes(2)](http://pubs.opengroup.org/onlinepubs/9699919799/functions/lutimes.html). -#[cfg(not(target_os = "android"))] +#[cfg(any(target_os = "linux", + target_os = "haiku", + target_os = "ios", + target_os = "macos", + target_os = "freebsd", + target_os = "netbsd"))] pub fn lutimes(path: &P, atime: &TimeVal, mtime: &TimeVal) -> Result<()> { let times: [libc::timeval; 2] = [*atime.as_ref(), *mtime.as_ref()]; let res = path.with_nix_path(|cstr| unsafe { diff --git a/src/unistd.rs b/src/unistd.rs index 2c00f7f036..a41c1392be 100644 --- a/src/unistd.rs +++ b/src/unistd.rs @@ -760,11 +760,12 @@ pub fn execvpe(filename: &CString, args: &[CString], env: &[CString]) -> Result< /// /// This function is similar to `execve`, except that the program to be executed /// is referenced as a file descriptor instead of a path. +// 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. #[cfg(any(target_os = "android", - target_os = "freebsd", target_os = "linux", - target_os = "netbsd", - target_os = "openbsd"))] + target_os = "freebsd"))] #[inline] pub fn fexecve(fd: RawFd, args: &[CString], env: &[CString]) -> Result { let args_p = to_exec_array(args); diff --git a/test/sys/test_aio_drop.rs b/test/sys/test_aio_drop.rs index 1f4a3e7963..492da401ef 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 9d27ce7944..fae8df821c 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 ead4b4874e..3fb5053512 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. } }