diff options
author | Charles J. Schneider <cjschneider2@gmail.com> | 2016-07-12 09:32:42 +0200 |
---|---|---|
committer | Charles J. Schneider <cjschneider2@gmail.com> | 2016-07-12 09:32:42 +0200 |
commit | 332bd866894cd580c16ab3ffe5d43fee8a7d779b (patch) | |
tree | afc7e6d2b512de7fe5612cd7c3c2aa5ea0267be7 | |
parent | 7d3764288454c9c6ce09549b2506ca93ca0e24fb (diff) | |
download | rust-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.rs | 7 | ||||
-rw-r--r-- | src/unix/mod.rs | 6 | ||||
-rw-r--r-- | src/unix/notbsd/linux/mod.rs | 8 | ||||
-rw-r--r-- | src/unix/solaris/mod.rs | 37 |
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); } |