summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles J. Schneider <cjschneider2@gmail.com>2016-07-12 09:32:42 +0200
committerCharles J. Schneider <cjschneider2@gmail.com>2016-07-12 09:32:42 +0200
commit332bd866894cd580c16ab3ffe5d43fee8a7d779b (patch)
treeafc7e6d2b512de7fe5612cd7c3c2aa5ea0267be7
parent7d3764288454c9c6ce09549b2506ca93ca0e24fb (diff)
downloadrust-libc-332bd866894cd580c16ab3ffe5d43fee8a7d779b.tar.gz
Manually exclude Android instead of compiler cfg
This change is due to an unfortunate interaction between the `s!` macro and the Android abi. When the struct is defined, but excluded through a `[cfg(not(target_os = "android"))]` the macro tries to define a non-existent struct. This commit manually add the functions & struct to each platform independently.
-rw-r--r--src/unix/bsd/mod.rs7
-rw-r--r--src/unix/mod.rs6
-rw-r--r--src/unix/notbsd/linux/mod.rs8
-rw-r--r--src/unix/solaris/mod.rs37
4 files changed, 37 insertions, 21 deletions
diff --git a/src/unix/bsd/mod.rs b/src/unix/bsd/mod.rs
index f9af6738b2..f36fa61cab 100644
--- a/src/unix/bsd/mod.rs
+++ b/src/unix/bsd/mod.rs
@@ -120,6 +120,11 @@ s! {
pub struct fsid_t {
__fsid_val: [::int32_t; 2],
}
+
+ pub struct if_nameindex {
+ pub if_index: ::c_uint,
+ pub if_name: *mut ::c_char,
+ }
}
pub const LC_ALL: ::c_int = 0;
@@ -358,6 +363,8 @@ extern {
pub fn getprogname() -> *const ::c_char;
pub fn setprogname(name: *const ::c_char);
pub fn getloadavg(loadavg: *mut ::c_double, nelem: ::c_int) -> ::c_int;
+ pub fn if_nameindex() -> *mut if_nameindex;
+ pub fn if_freenameindex(ptr: *mut if_nameindex);
}
cfg_if! {
diff --git a/src/unix/mod.rs b/src/unix/mod.rs
index b0d2d5d858..214f2cc043 100644
--- a/src/unix/mod.rs
+++ b/src/unix/mod.rs
@@ -114,12 +114,6 @@ s! {
pub l_onoff: ::c_int,
pub l_linger: ::c_int,
}
-
- #[cfg(not(target_os = "android"))]
- pub struct if_nameindex {
- pub if_index: ::c_uint,
- pub if_name: *mut ::c_char,
- }
}
pub const SIG_DFL: sighandler_t = 0 as sighandler_t;
diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs
index 4b46caf7fe..bfcbd7473c 100644
--- a/src/unix/notbsd/linux/mod.rs
+++ b/src/unix/notbsd/linux/mod.rs
@@ -181,6 +181,12 @@ s! {
#[cfg(target_pointer_width = "64")]
bits: [u64; 16],
}
+
+ pub struct if_nameindex {
+ pub if_index: ::c_uint,
+ pub if_name: *mut ::c_char,
+ }
+
}
pub const ABDAY_1: ::nl_item = 0x20000;
@@ -637,6 +643,8 @@ extern {
// Not available now on Android
pub fn mkfifoat(dirfd: ::c_int, pathname: *const ::c_char,
mode: ::mode_t) -> ::c_int;
+ pub fn if_nameindex() -> *mut if_nameindex;
+ pub fn if_freenameindex(ptr: *mut if_nameindex);
}
cfg_if! {
diff --git a/src/unix/solaris/mod.rs b/src/unix/solaris/mod.rs
index 7c31c35d17..809a4d9d7f 100644
--- a/src/unix/solaris/mod.rs
+++ b/src/unix/solaris/mod.rs
@@ -318,6 +318,11 @@ s! {
pub l_pid: ::pid_t,
pub l_pad: [::c_long; 4]
}
+
+ pub struct if_nameindex {
+ pub if_index: ::c_uint,
+ pub if_name: *mut ::c_char,
+ }
}
pub const LC_CTYPE: ::c_int = 0;
@@ -990,21 +995,23 @@ extern {
pub fn linkat(olddirfd: ::c_int, oldpath: *const ::c_char,
newdirfd: ::c_int, newpath: *const ::c_char,
flags: ::c_int) -> ::c_int;
- pub fn mkdirat(dirfd: ::c_int, pathname: *const ::c_char,
- mode: ::mode_t) -> ::c_int;
- pub fn mknodat(dirfd: ::c_int, pathname: *const ::c_char,
- mode: ::mode_t, dev: dev_t) -> ::c_int;
- pub fn readlinkat(dirfd: ::c_int, pathname: *const ::c_char,
- buf: *mut ::c_char, bufsiz: ::size_t) -> ::ssize_t;
- pub fn renameat(olddirfd: ::c_int, oldpath: *const ::c_char,
- newdirfd: ::c_int, newpath: *const ::c_char)
- -> ::c_int;
- pub fn symlinkat(target: *const ::c_char, newdirfd: ::c_int,
- linkpath: *const ::c_char) -> ::c_int;
- pub fn unlinkat(dirfd: ::c_int, pathname: *const ::c_char,
- flags: ::c_int) -> ::c_int;
- pub fn mkfifoat(dirfd: ::c_int, pathname: *const ::c_char,
+ pub fn mkdirat(dirfd: ::c_int, pathname: *const ::c_char,
mode: ::mode_t) -> ::c_int;
- pub fn sethostname(name: *const ::c_char, len: ::size_t) -> ::c_int;
+ pub fn mknodat(dirfd: ::c_int, pathname: *const ::c_char,
+ mode: ::mode_t, dev: dev_t) -> ::c_int;
+ pub fn readlinkat(dirfd: ::c_int, pathname: *const ::c_char,
+ buf: *mut ::c_char, bufsiz: ::size_t) -> ::ssize_t;
+ pub fn renameat(olddirfd: ::c_int, oldpath: *const ::c_char,
+ newdirfd: ::c_int, newpath: *const ::c_char)
+ -> ::c_int;
+ pub fn symlinkat(target: *const ::c_char, newdirfd: ::c_int,
+ linkpath: *const ::c_char) -> ::c_int;
+ pub fn unlinkat(dirfd: ::c_int, pathname: *const ::c_char,
+ flags: ::c_int) -> ::c_int;
+ pub fn mkfifoat(dirfd: ::c_int, pathname: *const ::c_char,
+ mode: ::mode_t) -> ::c_int;
+ pub fn sethostname(name: *const ::c_char, len: ::size_t) -> ::c_int;
+ pub fn if_nameindex() -> *mut if_nameindex;
+ pub fn if_freenameindex(ptr: *mut if_nameindex);
}