From 526058705e4b840a5c45a615f238d815396f3822 Mon Sep 17 00:00:00 2001
From: Alex Crichton <alex@alexcrichton.com>
Date: Tue, 15 Sep 2015 16:49:37 -0700
Subject: [PATCH] More consolidation and fix all android types

---
 src/unix/mod.rs              |   1 +
 src/unix/notbsd/android.rs   |  23 +--
 src/unix/notbsd/linux/mod.rs | 266 +++++++++++++++++------------------
 src/unix/notbsd/mod.rs       |  17 ++-
 4 files changed, 147 insertions(+), 160 deletions(-)

diff --git a/src/unix/mod.rs b/src/unix/mod.rs
index 524b9be9..631d86c4 100644
--- a/src/unix/mod.rs
+++ b/src/unix/mod.rs
@@ -292,6 +292,7 @@ extern {
     pub fn flock(fd: c_int, operation: c_int) -> c_int;
 }
 
+// TODO: get rid of this #[cfg(not(...))]
 #[cfg(not(target_os = "android"))]
 extern {
     pub fn getifaddrs(ifap: *mut *mut ifaddrs) -> c_int;
diff --git a/src/unix/notbsd/android.rs b/src/unix/notbsd/android.rs
index 78c3f14c..7d191a3a 100644
--- a/src/unix/notbsd/android.rs
+++ b/src/unix/notbsd/android.rs
@@ -1,40 +1,27 @@
 //! Android-specific definitions for linux-like values
 
-pub type c_char = i8;
-pub type c_schar = i8;
-pub type c_uchar = u8;
-pub type c_short = i16;
-pub type c_ushort = u16;
-pub type c_int = i32;
-pub type c_uint = u32;
+pub type c_char = u8;
 pub type c_long = i32;
 pub type c_ulong = u32;
-pub type c_float = f32;
-pub type c_double = f64;
 pub type size_t = u32;
 pub type ptrdiff_t = i32;
 pub type clock_t = i32;
 pub type time_t = i32;
 pub type suseconds_t = i32;
-pub type wchar_t = i32;
-pub type c_longlong = i64;
-pub type c_ulonglong = u64;
+pub type wchar_t = u32;
 pub type intptr_t = i32;
 pub type uintptr_t = u32;
-pub type intmax_t = i64;
-pub type uintmax_t = u64;
 pub type off_t = i32;
 pub type ino_t = u32;
-pub type pid_t = i32;
-pub type uid_t = u32;
-pub type gid_t = u32;
-pub type useconds_t = u32;
 pub type ssize_t = i32;
 pub type blkcnt_t = u32;
 pub type blksize_t = u32;
 pub type dev_t = u32;
 pub type mode_t = u16;
 pub type nlink_t = u16;
+pub type useconds_t = i32;
+pub type socklen_t = i32;
+pub type pthread_t = c_long;
 
 s! {
     pub struct stat {
diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs
index 8d032847..4f98565c 100644
--- a/src/unix/notbsd/linux/mod.rs
+++ b/src/unix/notbsd/linux/mod.rs
@@ -1,30 +1,16 @@
 //! Linux-specific definitions for linux-like values
 
-pub type c_schar = i8;
-pub type c_uchar = u8;
-pub type c_short = i16;
-pub type c_ushort = u16;
-pub type c_int = i32;
-pub type c_uint = u32;
-pub type c_float = f32;
-pub type c_double = f64;
-pub type c_longlong = i64;
-pub type c_ulonglong = u64;
-pub type intmax_t = i64;
-pub type uintmax_t = u64;
-
-pub type dev_t = u64;
-pub type gid_t = u32;
-pub type pid_t = i32;
-pub type uid_t = u32;
 pub type useconds_t = u32;
+pub type dev_t = u64;
+pub type socklen_t = u32;
+pub type pthread_t = c_ulong;
 
 s! {
     pub struct glob_t {
         pub gl_pathc: size_t,
         pub gl_pathv: *mut *mut c_char,
         pub gl_offs:  size_t,
-        pub gl_flags: c_int,
+        pub gl_flags: ::c_int,
 
         __unused1: *mut ::c_void,
         __unused2: *mut ::c_void,
@@ -36,7 +22,7 @@ s! {
     pub struct ifaddrs {
         pub ifa_next: *mut ifaddrs,
         pub ifa_name: *mut c_char,
-        pub ifa_flags: c_uint,
+        pub ifa_flags: ::c_uint,
         pub ifa_addr: *mut ::sockaddr,
         pub ifa_netmask: *mut ::sockaddr,
         pub ifa_ifu: *mut ::sockaddr, // FIXME This should be a union
@@ -44,147 +30,147 @@ s! {
     }
 }
 
-pub const BUFSIZ: c_uint = 8192;
-pub const FILENAME_MAX: c_uint = 4096;
-pub const FOPEN_MAX: c_uint = 16;
-pub const L_tmpnam: c_uint = 20;
-pub const TMP_MAX: c_uint = 238328;
-pub const _PC_NAME_MAX: c_int = 3;
-
-pub const _SC_ARG_MAX: c_int = 0;
-pub const _SC_CHILD_MAX: c_int = 1;
-pub const _SC_CLK_TCK: c_int = 2;
-pub const _SC_NGROUPS_MAX: c_int = 3;
-pub const _SC_OPEN_MAX: c_int = 4;
-pub const _SC_STREAM_MAX: c_int = 5;
-pub const _SC_TZNAME_MAX: c_int = 6;
-pub const _SC_JOB_CONTROL: c_int = 7;
-pub const _SC_SAVED_IDS: c_int = 8;
-pub const _SC_REALTIME_SIGNALS: c_int = 9;
-pub const _SC_PRIORITY_SCHEDULING: c_int = 10;
-pub const _SC_TIMERS: c_int = 11;
-pub const _SC_ASYNCHRONOUS_IO: c_int = 12;
-pub const _SC_PRIORITIZED_IO: c_int = 13;
-pub const _SC_SYNCHRONIZED_IO: c_int = 14;
-pub const _SC_FSYNC: c_int = 15;
-pub const _SC_MAPPED_FILES: c_int = 16;
-pub const _SC_MEMLOCK: c_int = 17;
-pub const _SC_MEMLOCK_RANGE: c_int = 18;
-pub const _SC_MEMORY_PROTECTION: c_int = 19;
-pub const _SC_MESSAGE_PASSING: c_int = 20;
-pub const _SC_SEMAPHORES: c_int = 21;
-pub const _SC_SHARED_MEMORY_OBJECTS: c_int = 22;
-pub const _SC_AIO_LISTIO_MAX: c_int = 23;
-pub const _SC_AIO_MAX: c_int = 24;
-pub const _SC_AIO_PRIO_DELTA_MAX: c_int = 25;
-pub const _SC_DELAYTIMER_MAX: c_int = 26;
-pub const _SC_MQ_OPEN_MAX: c_int = 27;
-pub const _SC_MQ_PRIO_MAX: c_int = 28;
-pub const _SC_VERSION: c_int = 29;
-pub const _SC_PAGESIZE: c_int = 30;
-pub const _SC_RTSIG_MAX: c_int = 31;
-pub const _SC_SEM_NSEMS_MAX: c_int = 32;
-pub const _SC_SEM_VALUE_MAX: c_int = 33;
-pub const _SC_SIGQUEUE_MAX: c_int = 34;
-pub const _SC_TIMER_MAX: c_int = 35;
-pub const _SC_BC_BASE_MAX: c_int = 36;
-pub const _SC_BC_DIM_MAX: c_int = 37;
-pub const _SC_BC_SCALE_MAX: c_int = 38;
-pub const _SC_BC_STRING_MAX: c_int = 39;
-pub const _SC_COLL_WEIGHTS_MAX: c_int = 40;
-pub const _SC_EXPR_NEST_MAX: c_int = 42;
-pub const _SC_LINE_MAX: c_int = 43;
-pub const _SC_RE_DUP_MAX: c_int = 44;
-pub const _SC_2_VERSION: c_int = 46;
-pub const _SC_2_C_BIND: c_int = 47;
-pub const _SC_2_C_DEV: c_int = 48;
-pub const _SC_2_FORT_DEV: c_int = 49;
-pub const _SC_2_FORT_RUN: c_int = 50;
-pub const _SC_2_SW_DEV: c_int = 51;
-pub const _SC_2_LOCALEDEF: c_int = 52;
-pub const _SC_IOV_MAX: c_int = 60;
-pub const _SC_THREADS: c_int = 67;
-pub const _SC_THREAD_SAFE_FUNCTIONS: c_int = 68;
-pub const _SC_GETGR_R_SIZE_MAX: c_int = 69;
-pub const _SC_GETPW_R_SIZE_MAX: c_int = 70;
-pub const _SC_LOGIN_NAME_MAX: c_int = 71;
-pub const _SC_TTY_NAME_MAX: c_int = 72;
-pub const _SC_THREAD_DESTRUCTOR_ITERATIONS: c_int = 73;
-pub const _SC_THREAD_KEYS_MAX: c_int = 74;
-pub const _SC_THREAD_STACK_MIN: c_int = 75;
-pub const _SC_THREAD_THREADS_MAX: c_int = 76;
-pub const _SC_THREAD_ATTR_STACKADDR: c_int = 77;
-pub const _SC_THREAD_ATTR_STACKSIZE: c_int = 78;
-pub const _SC_THREAD_PRIORITY_SCHEDULING: c_int = 79;
-pub const _SC_THREAD_PRIO_INHERIT: c_int = 80;
-pub const _SC_THREAD_PRIO_PROTECT: c_int = 81;
-pub const _SC_NPROCESSORS_ONLN: c_int = 84;
-pub const _SC_ATEXIT_MAX: c_int = 87;
-pub const _SC_XOPEN_VERSION: c_int = 89;
-pub const _SC_XOPEN_XCU_VERSION: c_int = 90;
-pub const _SC_XOPEN_UNIX: c_int = 91;
-pub const _SC_XOPEN_CRYPT: c_int = 92;
-pub const _SC_XOPEN_ENH_I18N: c_int = 93;
-pub const _SC_XOPEN_SHM: c_int = 94;
-pub const _SC_2_CHAR_TERM: c_int = 95;
-pub const _SC_2_C_VERSION: c_int = 96;
-pub const _SC_2_UPE: c_int = 97;
-pub const _SC_XBS5_ILP32_OFF32: c_int = 125;
-pub const _SC_XBS5_ILP32_OFFBIG: c_int = 126;
-pub const _SC_XBS5_LPBIG_OFFBIG: c_int = 128;
-pub const _SC_XOPEN_LEGACY: c_int = 129;
-pub const _SC_XOPEN_REALTIME: c_int = 130;
-pub const _SC_XOPEN_REALTIME_THREADS: c_int = 131;
+pub const BUFSIZ: ::c_uint = 8192;
+pub const FILENAME_MAX: ::c_uint = 4096;
+pub const FOPEN_MAX: ::c_uint = 16;
+pub const L_tmpnam: ::c_uint = 20;
+pub const TMP_MAX: ::c_uint = 238328;
+pub const _PC_NAME_MAX: ::c_int = 3;
+
+pub const _SC_ARG_MAX: ::c_int = 0;
+pub const _SC_CHILD_MAX: ::c_int = 1;
+pub const _SC_CLK_TCK: ::c_int = 2;
+pub const _SC_NGROUPS_MAX: ::c_int = 3;
+pub const _SC_OPEN_MAX: ::c_int = 4;
+pub const _SC_STREAM_MAX: ::c_int = 5;
+pub const _SC_TZNAME_MAX: ::c_int = 6;
+pub const _SC_JOB_CONTROL: ::c_int = 7;
+pub const _SC_SAVED_IDS: ::c_int = 8;
+pub const _SC_REALTIME_SIGNALS: ::c_int = 9;
+pub const _SC_PRIORITY_SCHEDULING: ::c_int = 10;
+pub const _SC_TIMERS: ::c_int = 11;
+pub const _SC_ASYNCHRONOUS_IO: ::c_int = 12;
+pub const _SC_PRIORITIZED_IO: ::c_int = 13;
+pub const _SC_SYNCHRONIZED_IO: ::c_int = 14;
+pub const _SC_FSYNC: ::c_int = 15;
+pub const _SC_MAPPED_FILES: ::c_int = 16;
+pub const _SC_MEMLOCK: ::c_int = 17;
+pub const _SC_MEMLOCK_RANGE: ::c_int = 18;
+pub const _SC_MEMORY_PROTECTION: ::c_int = 19;
+pub const _SC_MESSAGE_PASSING: ::c_int = 20;
+pub const _SC_SEMAPHORES: ::c_int = 21;
+pub const _SC_SHARED_MEMORY_OBJECTS: ::c_int = 22;
+pub const _SC_AIO_LISTIO_MAX: ::c_int = 23;
+pub const _SC_AIO_MAX: ::c_int = 24;
+pub const _SC_AIO_PRIO_DELTA_MAX: ::c_int = 25;
+pub const _SC_DELAYTIMER_MAX: ::c_int = 26;
+pub const _SC_MQ_OPEN_MAX: ::c_int = 27;
+pub const _SC_MQ_PRIO_MAX: ::c_int = 28;
+pub const _SC_VERSION: ::c_int = 29;
+pub const _SC_PAGESIZE: ::c_int = 30;
+pub const _SC_RTSIG_MAX: ::c_int = 31;
+pub const _SC_SEM_NSEMS_MAX: ::c_int = 32;
+pub const _SC_SEM_VALUE_MAX: ::c_int = 33;
+pub const _SC_SIGQUEUE_MAX: ::c_int = 34;
+pub const _SC_TIMER_MAX: ::c_int = 35;
+pub const _SC_BC_BASE_MAX: ::c_int = 36;
+pub const _SC_BC_DIM_MAX: ::c_int = 37;
+pub const _SC_BC_SCALE_MAX: ::c_int = 38;
+pub const _SC_BC_STRING_MAX: ::c_int = 39;
+pub const _SC_COLL_WEIGHTS_MAX: ::c_int = 40;
+pub const _SC_EXPR_NEST_MAX: ::c_int = 42;
+pub const _SC_LINE_MAX: ::c_int = 43;
+pub const _SC_RE_DUP_MAX: ::c_int = 44;
+pub const _SC_2_VERSION: ::c_int = 46;
+pub const _SC_2_C_BIND: ::c_int = 47;
+pub const _SC_2_C_DEV: ::c_int = 48;
+pub const _SC_2_FORT_DEV: ::c_int = 49;
+pub const _SC_2_FORT_RUN: ::c_int = 50;
+pub const _SC_2_SW_DEV: ::c_int = 51;
+pub const _SC_2_LOCALEDEF: ::c_int = 52;
+pub const _SC_IOV_MAX: ::c_int = 60;
+pub const _SC_THREADS: ::c_int = 67;
+pub const _SC_THREAD_SAFE_FUNCTIONS: ::c_int = 68;
+pub const _SC_GETGR_R_SIZE_MAX: ::c_int = 69;
+pub const _SC_GETPW_R_SIZE_MAX: ::c_int = 70;
+pub const _SC_LOGIN_NAME_MAX: ::c_int = 71;
+pub const _SC_TTY_NAME_MAX: ::c_int = 72;
+pub const _SC_THREAD_DESTRUCTOR_ITERATIONS: ::c_int = 73;
+pub const _SC_THREAD_KEYS_MAX: ::c_int = 74;
+pub const _SC_THREAD_STACK_MIN: ::c_int = 75;
+pub const _SC_THREAD_THREADS_MAX: ::c_int = 76;
+pub const _SC_THREAD_ATTR_STACKADDR: ::c_int = 77;
+pub const _SC_THREAD_ATTR_STACKSIZE: ::c_int = 78;
+pub const _SC_THREAD_PRIORITY_SCHEDULING: ::c_int = 79;
+pub const _SC_THREAD_PRIO_INHERIT: ::c_int = 80;
+pub const _SC_THREAD_PRIO_PROTECT: ::c_int = 81;
+pub const _SC_NPROCESSORS_ONLN: ::c_int = 84;
+pub const _SC_ATEXIT_MAX: ::c_int = 87;
+pub const _SC_XOPEN_VERSION: ::c_int = 89;
+pub const _SC_XOPEN_XCU_VERSION: ::c_int = 90;
+pub const _SC_XOPEN_UNIX: ::c_int = 91;
+pub const _SC_XOPEN_CRYPT: ::c_int = 92;
+pub const _SC_XOPEN_ENH_I18N: ::c_int = 93;
+pub const _SC_XOPEN_SHM: ::c_int = 94;
+pub const _SC_2_CHAR_TERM: ::c_int = 95;
+pub const _SC_2_C_VERSION: ::c_int = 96;
+pub const _SC_2_UPE: ::c_int = 97;
+pub const _SC_XBS5_ILP32_OFF32: ::c_int = 125;
+pub const _SC_XBS5_ILP32_OFFBIG: ::c_int = 126;
+pub const _SC_XBS5_LPBIG_OFFBIG: ::c_int = 128;
+pub const _SC_XOPEN_LEGACY: ::c_int = 129;
+pub const _SC_XOPEN_REALTIME: ::c_int = 130;
+pub const _SC_XOPEN_REALTIME_THREADS: ::c_int = 131;
 
 pub const RLIM_SAVED_MAX: ::rlim_t = RLIM_INFINITY;
 pub const RLIM_SAVED_CUR: ::rlim_t = RLIM_INFINITY;
 
 #[cfg(not(target_env = "musl"))]
-pub const RUSAGE_THREAD: c_int = 1;
-
-pub const GLOB_ERR: c_int = 1 << 0;
-pub const GLOB_MARK: c_int = 1 << 1;
-pub const GLOB_NOSORT: c_int = 1 << 2;
-pub const GLOB_DOOFFS: c_int = 1 << 3;
-pub const GLOB_NOCHECK: c_int = 1 << 4;
-pub const GLOB_APPEND: c_int = 1 << 5;
-pub const GLOB_NOESCAPE: c_int = 1 << 6;
-
-pub const GLOB_NOSPACE: c_int = 1;
-pub const GLOB_ABORTED: c_int = 2;
-pub const GLOB_NOMATCH: c_int = 3;
-
-pub const POSIX_MADV_NORMAL: c_int = 0;
-pub const POSIX_MADV_RANDOM: c_int = 1;
-pub const POSIX_MADV_SEQUENTIAL: c_int = 2;
-pub const POSIX_MADV_WILLNEED: c_int = 3;
-pub const POSIX_MADV_DONTNEED: c_int = 4;
+pub const RUSAGE_THREAD: ::c_int = 1;
+
+pub const GLOB_ERR: ::c_int = 1 << 0;
+pub const GLOB_MARK: ::c_int = 1 << 1;
+pub const GLOB_NOSORT: ::c_int = 1 << 2;
+pub const GLOB_DOOFFS: ::c_int = 1 << 3;
+pub const GLOB_NOCHECK: ::c_int = 1 << 4;
+pub const GLOB_APPEND: ::c_int = 1 << 5;
+pub const GLOB_NOESCAPE: ::c_int = 1 << 6;
+
+pub const GLOB_NOSPACE: ::c_int = 1;
+pub const GLOB_ABORTED: ::c_int = 2;
+pub const GLOB_NOMATCH: ::c_int = 3;
+
+pub const POSIX_MADV_NORMAL: ::c_int = 0;
+pub const POSIX_MADV_RANDOM: ::c_int = 1;
+pub const POSIX_MADV_SEQUENTIAL: ::c_int = 2;
+pub const POSIX_MADV_WILLNEED: ::c_int = 3;
+pub const POSIX_MADV_DONTNEED: ::c_int = 4;
 
 pub const S_IEXEC: mode_t = 64;
 pub const S_IWRITE: mode_t = 128;
 pub const S_IREAD: mode_t = 256;
 
-pub const F_LOCK: c_int = 1;
-pub const F_TEST: c_int = 3;
-pub const F_TLOCK: c_int = 2;
-pub const F_ULOCK: c_int = 0;
+pub const F_LOCK: ::c_int = 1;
+pub const F_TEST: ::c_int = 3;
+pub const F_TLOCK: ::c_int = 2;
+pub const F_ULOCK: ::c_int = 0;
 
 #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
-pub const MAP_32BIT: c_int = 0x0040;
+pub const MAP_32BIT: ::c_int = 0x0040;
 
-pub const TCP_MD5SIG: c_int = 14;
+pub const TCP_MD5SIG: ::c_int = 14;
 
 extern {
-    pub fn shm_open(name: *const c_char, oflag: c_int,
-                    mode: mode_t) -> c_int;
+    pub fn shm_open(name: *const c_char, oflag: ::c_int,
+                    mode: mode_t) -> ::c_int;
     #[cfg(not(target_env = "musl"))]
-    pub fn sysctl(name: *mut c_int,
-                  namelen: c_int,
+    pub fn sysctl(name: *mut ::c_int,
+                  namelen: ::c_int,
                   oldp: *mut ::c_void,
                   oldlenp: *mut size_t,
                   newp: *mut ::c_void,
                   newlen: size_t)
-                  -> c_int;
+                  -> ::c_int;
 }
 
 cfg_if! {
diff --git a/src/unix/notbsd/mod.rs b/src/unix/notbsd/mod.rs
index 8222c01a..a45f16d5 100644
--- a/src/unix/notbsd/mod.rs
+++ b/src/unix/notbsd/mod.rs
@@ -1,10 +1,23 @@
+pub type c_schar = i8;
+pub type c_uchar = u8;
+pub type c_short = i16;
+pub type c_ushort = u16;
+pub type c_int = i32;
+pub type c_uint = u32;
+pub type c_float = f32;
+pub type c_double = f64;
+pub type c_longlong = i64;
+pub type c_ulonglong = u64;
+pub type intmax_t = i64;
+pub type uintmax_t = u64;
+pub type pid_t = i32;
+pub type uid_t = u32;
+pub type gid_t = u32;
 pub type in_addr_t = u32;
 pub type in_port_t = u16;
-pub type pthread_t = c_ulong;
 pub type rlim_t = c_ulong;
 pub type sa_family_t = u16;
 pub type sighandler_t = size_t;
-pub type socklen_t = u32;
 
 pub enum timezone {}
 
-- 
GitLab