From 8819bd50d236b166aaa39c18d24d39a02f93d1f0 Mon Sep 17 00:00:00 2001 From: Michael Neumann <mneumann@ntecs.de> Date: Sat, 29 Dec 2018 13:55:36 +0100 Subject: [PATCH] Fix errno on DragonFly __dfly_error() was removed from Rust many years ago. 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.31.0). We have to use a C extension to access it. Tracking issue for `thread_local` stabilization: https://github.com/rust-lang/rust/issues/29594 Once this becomes stable, we can simply use: extern { #[thread_local] static errno: c_int; } --- members/sys/Cargo.toml | 4 ++++ members/sys/src/sys/unix/mod.rs | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/members/sys/Cargo.toml b/members/sys/Cargo.toml index 889481c6..b8ac096a 100644 --- a/members/sys/Cargo.toml +++ b/members/sys/Cargo.toml @@ -12,3 +12,7 @@ users = "0.8.1" [target."cfg(target_os = \"redox\")".dependencies] redox_syscall = { git = "https://gitlab.redox-os.org/redox-os/syscall.git", branch = "relibc" } + + +[target."cfg(target_os = \"dragonfly\")".dependencies] +errno-dragonfly = "0.1.1" diff --git a/members/sys/src/sys/unix/mod.rs b/members/sys/src/sys/unix/mod.rs index 0e8b66fe..eb4576fc 100644 --- a/members/sys/src/sys/unix/mod.rs +++ b/members/sys/src/sys/unix/mod.rs @@ -1,4 +1,6 @@ extern crate libc; +#[cfg(target_os = "dragonfly")] +extern crate errno_dragonfly; pub mod signals; @@ -57,7 +59,7 @@ fn errno() -> i32 { unsafe { *libc::__errno() } } fn errno() -> i32 { unsafe { *libc::__error() } } #[cfg(target_os = "dragonfly")] -fn errno() -> i32 { unsafe { *libc::__dfly_error() } } +fn errno() -> i32 { unsafe { *errno_dragonfly::errno_location()} } pub fn strerror(errno: i32) -> &'static str { unsafe { -- GitLab