summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-04-03 14:48:34 -0700
committerbors <bors@rust-lang.org>2016-04-03 14:48:34 -0700
commitfb2f0bbdab5aa79d684d1e15ccd755f8d37bc07e (patch)
tree5f4dfe9e1713093e9dbef00fb130c123c7551505
parent46cca7a06ec4b3bdd080313d1c5a358a612412ac (diff)
parent4d1efd9e8ae349bdc459e04cf86b4df571dd194e (diff)
downloadrust-libc-fb2f0bbdab5aa79d684d1e15ccd755f8d37bc07e.tar.gz
Auto merge of #253 - nodakai:strerror_r, r=alexcrichton
On non-musl Linux, strerror_r should be linked to __xpg_strerror_r Currently `libc::strerror_r()` wrongly returns a `c_char` pointer as a large `c_int`. Also exclude `MS_RMT_MASK` from `libc-test`.
-rw-r--r--libc-test/build.rs1
-rw-r--r--src/unix/mod.rs4
2 files changed, 3 insertions, 2 deletions
diff --git a/libc-test/build.rs b/libc-test/build.rs
index 7206cc6e62..984a63ac8f 100644
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -312,6 +312,7 @@ fn main() {
// weird signed extension or something like that?
"MS_NOUSER" => true,
+ "MS_RMT_MASK" => true, // updated in glibc 2.22 and musl 1.1.13
// These OSX constants are flagged as deprecated
"NOTE_EXIT_REPARENTED" |
diff --git a/src/unix/mod.rs b/src/unix/mod.rs
index dc741df140..e958dd2064 100644
--- a/src/unix/mod.rs
+++ b/src/unix/mod.rs
@@ -506,8 +506,8 @@ extern {
pub fn pthread_sigmask(how: ::c_int, set: *const sigset_t,
oldset: *mut sigset_t) -> ::c_int;
pub fn pthread_kill(thread: ::pthread_t, sig: ::c_int) -> ::c_int;
-
- // #[cfg_attr(target_os = "linux", link_name = "__xpg_strerror_r")]
+ #[cfg_attr(all(target_os = "linux", not(target_env = "musl")),
+ link_name = "__xpg_strerror_r")]
pub fn strerror_r(errnum: ::c_int, buf: *mut c_char,
buflen: ::size_t) -> ::c_int;