From 709cbdf12cacb6ecf42cca9000d1d46380b6ba62 Mon Sep 17 00:00:00 2001 From: Michael Neumann Date: Fri, 17 Nov 2017 12:23:41 +0100 Subject: Fix support for DragonFly * DragonFly does not have a O_DSYNC flag * Fix type_of_cmsg_data on DragonFly * No fexecve() on DragonFly * Do not run aio test cases on DragonFly * Keep target lists in alphabetical order * Unscrable #[cfg] directives and use cfg_if! macro instead * Fix errno on DragonFly Below follows an explanation why we have to use a C extension to get errno working on DragonFly: DragonFly uses a thread-local errno variable, but #[thread_local] is feature-gated and not available in stable Rust as of this writing (Rust 1.21.0). We have to use a C extension (src/errno_dragonfly.c) to access it. Tracking issue for `thread_local` stabilization: https://github.com/rust-lang/rust/issues/29594 Once this becomes stable, we can remove build.rs, src/errno_dragonfly.c, remove the build-dependency from Cargo.toml, and use: extern { #[thread_local] static errno: c_int; } Now all targets will use the build.rs script, but only on DragonFly this will do something. Also, there are no additional dependencies for targets other than DragonFly (no gcc dep). --- test/test_unistd.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'test/test_unistd.rs') diff --git a/test/test_unistd.rs b/test/test_unistd.rs index b29ece3e..11e57ff7 100644 --- a/test/test_unistd.rs +++ b/test/test_unistd.rs @@ -241,16 +241,17 @@ cfg_if!{ if #[cfg(target_os = "android")] { 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 = "dragonfly", - target_os = "freebsd", + } else if #[cfg(any(target_os = "freebsd", + target_os = "linux", target_os = "netbsd", - target_os = "openbsd", - target_os = "linux", ))] { + target_os = "openbsd"))] { 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 = "ios", target_os = "macos", ))] { + } else if #[cfg(any(target_os = "dragonfly", + target_os = "ios", + target_os = "macos"))] { execve_test_factory!(test_execve, execve, &CString::new("/bin/sh").unwrap()); - // No fexecve() on macos/ios. + // No fexecve() on macos/ios and DragonFly. } } -- cgit v1.2.3