diff --git a/src/vxworks/aarch64.rs b/src/vxworks/aarch64.rs
index 577c8bef16b721c0da23b622e026f66a09988d15..4032488b6c0d5b1128fad52fabe5faaf80add3c4 100644
--- a/src/vxworks/aarch64.rs
+++ b/src/vxworks/aarch64.rs
@@ -1,3 +1,4 @@
 pub type c_char = u8;
+pub type wchar_t = u32;
 pub type c_long = i64;
 pub type c_ulong = u64;
diff --git a/src/vxworks/arm.rs b/src/vxworks/arm.rs
index cfdce825a0b86c4f3243bb7efcc4183574a45810..55240068aa08eb7992d9adc49739f44679207b8b 100644
--- a/src/vxworks/arm.rs
+++ b/src/vxworks/arm.rs
@@ -1,3 +1,4 @@
 pub type c_char = u8;
+pub type wchar_t = u32;
 pub type c_long = i32;
 pub type c_ulong = u32;
diff --git a/src/vxworks/armv7.rs b/src/vxworks/armv7.rs
deleted file mode 100644
index 9b0b338b91e5b52050c6d0edab5b3d5ea0263037..0000000000000000000000000000000000000000
--- a/src/vxworks/armv7.rs
+++ /dev/null
@@ -1,2 +0,0 @@
-pub type c_long = i32;
-pub type c_ulong = u32;
diff --git a/src/vxworks/mod.rs b/src/vxworks/mod.rs
index 37a8c2c56ffd255dd3ecfc7f572f7a920424df9c..0cc107b14a165439f01e7120f72b6a62f19834fd 100755
--- a/src/vxworks/mod.rs
+++ b/src/vxworks/mod.rs
@@ -25,33 +25,43 @@ pub type c_ulonglong = u64;
 pub type intmax_t = i64;
 pub type uintmax_t = u64;
 
-pub type size_t = usize;
-pub type ptrdiff_t = isize;
-pub type intptr_t = isize;
-pub type uintptr_t = usize;
-pub type ssize_t = isize;
+cfg_if! {
+    if #[cfg(target_pointer_width = "32")] {
+        pub type size_t = c_uint;
+        pub type ssize_t = c_int;
+        pub type ptrdiff_t = c_int;
+        pub type intptr_t = c_int;
+        pub type uintptr_t = c_uint;
+    } else if #[cfg(target_pointer_width = "64")] {
+        pub type size_t = c_ulonglong;
+        pub type ssize_t = c_longlong;
+        pub type ptrdiff_t = c_longlong;
+        pub type intptr_t = c_longlong;
+        pub type uintptr_t = c_ulonglong;
+    } else {
+        // Unknown target_pointer_width
+    }
+}
 
 pub type pid_t = i32;
 pub type in_addr_t = u32;
-pub type in_port_t = u16;
 pub type sighandler_t = ::size_t;
-pub type cc_t = ::c_uchar;
+pub type cpuset_t = u32;
 
 pub type blkcnt_t = ::c_long;
 pub type blksize_t = ::c_long;
 pub type ino_t = ::c_ulong;
-pub type ino32_t = u32;
 pub type off_t = ::c_longlong;
 
-pub type rlim_t = ::c_ulonglong;
+pub type rlim_t = ::c_ulong;
 pub type suseconds_t = ::c_long;
 pub type time_t = ::c_long;
-pub type wchar_t = ::c_int;
+
 pub type errno_t = ::c_int;
 
 pub type useconds_t = ::c_ulong;
 
-pub type socklen_t = ::c_int;
+pub type socklen_t = ::c_uint;
 
 pub type pthread_t = ::c_ulong;
 
@@ -65,24 +75,19 @@ pub type uid_t = ::c_ushort;
 pub type gid_t = ::c_ushort;
 pub type sigset_t = ::c_ulonglong;
 pub type key_t = ::c_long;
-pub type shmatt_t = ::c_ulong;
-
-pub type mqd_t = ::c_int;
 
 pub type nfds_t = ::c_uint;
-pub type nl_item = ::c_int;
 pub type stat64 = ::stat;
 
 pub type pthread_key_t = ::c_ulong;
 
 // From b_off_t.h
 pub type off64_t = ::c_longlong;
-pub type off_t64 = ::c_longlong;
 
 // From b_BOOL.h
-pub type BOOL = ::c_int; // excuse me what
+pub type BOOL = ::c_int;
 
-//Straight from vxWind.h ..
+// From vxWind.h ..
 pub type _Vx_OBJ_HANDLE = ::c_int;
 pub type _Vx_TASK_ID = ::_Vx_OBJ_HANDLE;
 pub type _Vx_MSG_Q_ID = ::_Vx_OBJ_HANDLE;
@@ -100,43 +105,29 @@ pub type SD_ID = ::OBJ_HANDLE;
 pub type CONDVAR_ID = ::OBJ_HANDLE;
 
 // From vxTypes.h
-pub type _Vx_usr_arg_t = ::ssize_t; // c_int for LP32
-pub type _Vx_exit_code_t = ::ssize_t; // c_int for LP32
+pub type _Vx_usr_arg_t = isize;
+pub type _Vx_exit_code_t = isize;
 pub type _Vx_ticks_t = ::c_uint;
 pub type _Vx_ticks64_t = ::c_ulonglong;
 
-// From vxTypesBase.h
-pub type va_list = *mut ::c_char;
-
 pub type sa_family_t = ::c_uchar;
 
-// structs that only exist in userspace
-s! {
-    // b_struct_vx_eventsResourceCb.h
-    pub struct _Vx_EVENTS_RSRC {
-        pub registered : ::c_uint,
-        pub taskId     : ::c_int,
-        pub options    : ::c_uchar,
-        pub pad        : [::c_uchar; 3],
-    }
-
-    // b_struct_vx_semaphore.h
-    pub struct _Vx_semaphore {
-        pub magic  : ::c_uint,
-        pub semType: ::c_uint,
-        pub options: ::c_uint,
-        pub recurse: ::c_uint,
-        pub owned_k: ::c_uint, // owned_k is volatile
-        pub semId_k: ::_Vx_SEM_ID_KERNEL,
-        pub state  : ::c_uint, //state is union of _Vx_UINT and _Vx_UINT
-        pub events : ::_Vx_EVENTS_RSRC,
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
+pub enum _Vx_semaphore {}
+impl ::Copy for _Vx_semaphore {}
+impl ::Clone for _Vx_semaphore {
+    fn clone(&self) -> _Vx_semaphore {
+        *self
     }
+}
 
+// structs that only exist in userspace
+s! {
     // b_pthread_condattr_t.h
     pub struct pthread_condattr_t {
         pub condAttrStatus: ::c_int,
         pub condAttrPshared: ::c_int,
-        pub _CondAttrClockId: ::clockid_t,
+        pub condAttrClockId: ::clockid_t,
     }
 
     // b_pthread_cond_t.h
@@ -147,23 +138,25 @@ s! {
         pub condRefCount: ::c_int,
         pub condMutex: *mut ::pthread_mutex_t,
         pub condAttr: ::pthread_condattr_t,
-        pub condSemName: [::c_char; PTHREAD_SHARED_SEM_NAME_MAX]
+        pub condSemName: [::c_char; _PTHREAD_SHARED_SEM_NAME_MAX]
     }
 
     // b_pthread_rwlockattr_t.h
     pub struct pthread_rwlockattr_t {
         pub rwlockAttrStatus: ::c_int,
+        pub rwlockAttrPshared: ::c_int,
         pub rwlockAttrMaxReaders: ::c_uint,
+        pub rwlockAttrConformOpt: ::c_uint,
     }
 
     // b_pthread_rwlock_t.h
     pub struct pthread_rwlock_t {
         pub rwlockSemId: :: _Vx_SEM_ID,
-        pub rwlockReadersRefCount: ::c_int,
+        pub rwlockReadersRefCount: ::c_uint,
         pub rwlockValid: ::c_int,
         pub rwlockInitted: ::c_int,
         pub rwlockAttr: ::pthread_rwlockattr_t,
-        pub rwlockName: [::c_char; PTHREAD_SHARED_SEM_NAME_MAX]
+        pub rwlockSemName: [::c_char; _PTHREAD_SHARED_SEM_NAME_MAX]
     }
 
     // b_struct_timeval.h
@@ -173,29 +166,38 @@ s! {
     }
 
     // socket.h
+    pub struct linger {
+        pub l_onoff: ::c_int,
+        pub l_linger: ::c_int,
+    }
+
     pub struct sockaddr {
         pub sa_len    : ::c_uchar,
         pub sa_family : sa_family_t,
         pub sa_data   : [::c_char; 14],
     }
 
-    // socket.h
-    pub struct sockaddr_storage {
-        pub ss_len     : ::c_uchar,
-        pub ss_family  : ::sa_family_t,
-        pub __ss_pad1  : [::c_char; _SS_PAD1SIZE],
-        pub __ss_align : i32,
-        // pub __ss_pad2  : [::c_char; _SS_PAD2SIZE],
-        pub __ss_pad2  : [::c_char; 32],
-        pub __ss_pad3  : [::c_char; 32],
-        pub __ss_pad4  : [::c_char; 32],
-        pub __ss_pad5  : [::c_char; _SS_PAD2SIZE - 96],
-    }
     pub struct iovec {
         pub iov_base: *mut ::c_void,
         pub iov_len: ::size_t,
     }
 
+    pub struct msghdr {
+        pub msg_name: *mut c_void,
+        pub msg_namelen: socklen_t,
+        pub msg_iov: *mut iovec,
+        pub msg_iovlen: ::c_int,
+        pub msg_control: *mut c_void,
+        pub msg_controllen: socklen_t,
+        pub msg_flags: ::c_int,
+    }
+
+    pub struct cmsghdr {
+        pub cmsg_len: socklen_t,
+        pub cmsg_level: ::c_int,
+        pub cmsg_type: ::c_int,
+    }
+
     // poll.h
     pub struct pollfd {
         pub fd      : ::c_int,
@@ -203,40 +205,10 @@ s! {
         pub revents : ::c_short,
     }
 
-    // dirent.h
-    pub struct dirent {
-        pub d_ino  : ::ino_t,
-        // pub d_name : [::c_char; (_PARM_NAME_MAX + 1)],
-        pub d_name : [::c_char; 32],
-        pub d_name1 : [::c_char; 32],
-        pub d_name2 : [::c_char; 32],
-        pub d_name3 : [::c_char; 32],
-        pub d_name4 : [::c_char; 32],
-        pub d_name5 : [::c_char; 32],
-        pub d_name6 : [::c_char; 32],
-        pub d_name7 : [::c_char; 32],
-    }
-
-    pub struct dirent64 {
-        pub d_ino    : ::ino_t,
-        pub d_off    : ::off64_t,
-        pub d_reclen : u16,
-        pub d_type   : u8,
-        // pub d_name   : [::c_char; 256],
-        pub d_name   : [::c_char; 32],
-        pub d_name1   : [::c_char; 32],
-        pub d_name2   : [::c_char; 32],
-        pub d_name3   : [::c_char; 32],
-        pub d_name4   : [::c_char; 32],
-        pub d_name5   : [::c_char; 32],
-        pub d_name6   : [::c_char; 32],
-        pub d_name7   : [::c_char; 32],
-    } // Doesn't seem like it exists anymore
-
     // resource.h
     pub struct rlimit { /* Is this really needed? Questionable ... */
-                           pub rlim_cur : ::size_t,
-                           pub rlim_max : ::size_t,
+                           pub rlim_cur : ::rlim_t,
+                           pub rlim_max : ::rlim_t,
     }
 
     // stat.h
@@ -316,21 +288,11 @@ s! {
         // This field is a union of int and void * in vxworks
         // The size has been set to the larger of the two
         pub si_value : ::size_t,
-    }
-
-    pub struct ipc_perm {
-                             pub __key : key_t,
-                             pub uid   : uid_t,
-                             pub gid   : gid_t,
-                             pub cuid  : uid_t,
-                             pub cgid  : gid_t,
-                             pub mode  : ::c_ushort,
-                             pub __seq : ::c_ushort,
-    }
-
-    pub struct shmid_ds {
-        pub shm_perm  : ipc_perm,
-        pub shm_segsz : ::c_int,
+        pub si_errno : ::c_int,
+        pub si_status: ::c_int,
+        pub si_addr: *mut ::c_void,
+        pub si_uid: ::uid_t,
+        pub si_pid: ::pid_t,
     }
 
     // pthread.h (krnl)
@@ -352,7 +314,7 @@ s! {
         pub mutexCondRefCount: ::c_int,
         pub mutexSavPriority: ::c_int,
         pub mutexAttr: ::pthread_mutexattr_t,
-        pub mutexSemName: [::c_char; PTHREAD_SHARED_SEM_NAME_MAX],
+        pub mutexSemName: [::c_char; _PTHREAD_SHARED_SEM_NAME_MAX],
     }
 
     // b_struct_timespec.h
@@ -361,6 +323,19 @@ s! {
         pub tv_nsec: ::c_long,
     }
 
+    // time.h
+    pub struct tm {
+        pub tm_sec: ::c_int,
+        pub tm_min: ::c_int,
+        pub tm_hour: ::c_int,
+        pub tm_mday: ::c_int,
+        pub tm_mon: ::c_int,
+        pub tm_year: ::c_int,
+        pub tm_wday: ::c_int,
+        pub tm_yday: ::c_int,
+        pub tm_isdst: ::c_int,
+    }
+
     // in.h
     pub struct in_addr {
         pub s_addr: in_addr_t,
@@ -373,6 +348,7 @@ s! {
     }
 
     // in6.h
+    #[repr(align(4))]
     pub struct in6_addr {
         pub s6_addr: [u8; 16],
     }
@@ -417,15 +393,6 @@ s! {
         pub sin6_scope_id: u32,
     }
 
-    pub struct sockaddr_un {
-        pub sun_family: sa_family_t,
-        //pub sun_path: [::c_char; 108]
-        pub sun_path: [::c_char; 32],
-        pub sun_path1: [::c_char; 32],
-        pub sun_path2: [::c_char; 32],
-        pub sun_path3: [::c_char; 12],
-    }
-
     pub struct passwd {
         pub pw_name: *mut ::c_char,
         pub pw_uid: ::uid_t,
@@ -434,6 +401,27 @@ s! {
         pub pw_shell: *mut ::c_char,
     }
 
+    pub struct Dl_info {
+        pub dli_fname: *const ::c_char,
+        pub dli_fbase: *mut ::c_void,
+        pub dli_sname: *const ::c_char,
+        pub dli_saddr: *mut ::c_void,
+    }
+}
+
+s_no_extra_traits! {
+    // dirent.h
+    pub struct dirent {
+        pub d_ino  : ::ino_t,
+        pub d_name : [::c_char; _PARM_NAME_MAX + 1],
+    }
+
+    pub struct sockaddr_un {
+        pub sun_len: u8,
+        pub sun_family: sa_family_t,
+        pub sun_path: [::c_char; 104]
+    }
+
     // rtpLibCommon.h
     pub struct RTP_DESC {
         pub status    : ::c_int,
@@ -441,25 +429,69 @@ s! {
         pub entrAddr  : *mut ::c_void,
         pub initTaskId: ::TASK_ID,
         pub parentId  : ::RTP_ID,
-        //pub pathName  : [::c_char; (VX_RTP_NAME_LENGTH + 1)],
-        pub pathName  : [::c_char; 32],
-        pub pathName1  : [::c_char; 32],
-        pub pathName2  : [::c_char; 32],
-        pub pathName3  : [::c_char; 32],
-        pub pathName4  : [::c_char; 32],
-        pub pathName5  : [::c_char; 32],
-        pub pathName6  : [::c_char; 32],
-        pub pathName7  : [::c_char; 32],
-        pub taskCnt   : u32,
+        pub pathName  : [::c_char; VX_RTP_NAME_LENGTH + 1],
+        pub taskCnt   : ::c_int,
         pub textStart : *mut ::c_void,
         pub textEnd   : *mut ::c_void,
     }
+    // socket.h
+    pub struct sockaddr_storage {
+        pub ss_len     : ::c_uchar,
+        pub ss_family  : ::sa_family_t,
+        pub __ss_pad1  : [::c_char; _SS_PAD1SIZE],
+        pub __ss_align : i32,
+        pub __ss_pad2  : [::c_char; _SS_PAD2SIZE],
+    }
 
-    pub struct Dl_info {
-        pub dli_fname: *const ::c_char,
-        pub dli_fbase: *mut ::c_void,
-        pub dli_sname: *const ::c_char,
-        pub dli_saddr: *mut ::c_void,
+}
+
+cfg_if! {
+    if #[cfg(feature = "extra_traits")] {
+        impl ::fmt::Debug for dirent {
+            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+                f.debug_struct("dirent")
+                    .field("d_ino", &self.d_ino)
+                    .field("d_name", &&self.d_name[..])
+                    .finish()
+            }
+        }
+
+        impl ::fmt::Debug for sockaddr_un {
+            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+                f.debug_struct("sockaddr_un")
+                    .field("sun_len", &self.sun_len)
+                    .field("sun_family", &self.sun_family)
+                    .field("sun_path", &&self.sun_path[..])
+                    .finish()
+            }
+        }
+
+        impl ::fmt::Debug for RTP_DESC {
+            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+                f.debug_struct("RTP_DESC")
+                    .field("status", &self.status)
+                    .field("options", &self.options)
+                    .field("entrAddr", &self.entrAddr)
+                    .field("initTaskId", &self.initTaskId)
+                    .field("parentId", &self.parentId)
+                    .field("pathName", &&self.pathName[..])
+                    .field("taskCnt", &self.taskCnt)
+                    .field("textStart", &self.textStart)
+                    .field("textEnd", &self.textEnd)
+                    .finish()
+            }
+        }
+        impl ::fmt::Debug for sockaddr_storage {
+            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+                f.debug_struct("sockaddr_storage")
+                    .field("ss_len", &self.ss_len)
+                    .field("ss_family", &self.ss_family)
+                    .field("__ss_pad1", &&self.__ss_pad1[..])
+                    .field("__ss_align", &self.__ss_align)
+                    .field("__ss_pad2", &&self.__ss_pad2[..])
+                    .finish()
+            }
+        }
     }
 }
 
@@ -500,7 +532,7 @@ pub const PTHREAD_MUTEX_ERRORCHECK: ::c_int = 1;
 pub const PTHREAD_MUTEX_RECURSIVE: ::c_int = 2;
 pub const PTHREAD_MUTEX_DEFAULT: ::c_int = PTHREAD_MUTEX_NORMAL;
 pub const PTHREAD_STACK_MIN: usize = 4096;
-pub const PTHREAD_SHARED_SEM_NAME_MAX: usize = 30;
+pub const _PTHREAD_SHARED_SEM_NAME_MAX: usize = 30;
 
 pub const EFAULT: ::c_int = 14;
 pub const EBUSY: ::c_int = 16;
@@ -508,7 +540,7 @@ pub const EEXIST: ::c_int = 17;
 pub const ENODEV: ::c_int = 19;
 pub const EINVAL: ::c_int = 22;
 pub const EPIPE: ::c_int = 32;
-pub const ERANGE: ::c_int = 34;
+pub const ERANGE: ::c_int = 38;
 
 // ERRNO STUFF
 pub const EPERM: ::c_int = 1; /* Not owner */
@@ -571,61 +603,46 @@ enum nfsstat {
     NFSERR_NOSPC = 28,
     NFSERR_ROFS = 30,
     NFSERR_MLINK = 31,
-    NFSERR_NAMETOOLONG = 63,
-    NFSERR_NOTEMPTY = 66,
-    NFSERR_DQUOT = 69,
-    NFSERR_STALE = 70,
+    NFSERR_NAMETOOLONG = 26,
+    NFSERR_NOTEMPTY = 15,
+    NFSERR_DQUOT = 83,
+    NFSERR_STALE = 88,
     NFSERR_REMOTE = 71,
     NFSERR_WFLUSH = 99,
     NFSERR_BADHANDLE = 10001,
     NFSERR_NOT_SYNC = 10002,
     NFSERR_BAD_COOKIE = 10003,
-    NFSERR_NOTSUPP = 10004,
+    NFSERR_NOTSUPP = 45,
     NFSERR_TOOSMALL = 10005,
-    NFSERR_SERVERFAULT = 10006,
     NFSERR_BADTYPE = 10007,
     NFSERR_JUKEBOX = 10008,
 }
 
-pub const S_nfsLib_NFS_OK: ::c_int = M_nfsStat | nfsstat::NFS_OK as ::c_int;
-pub const S_nfsLib_NFSERR_PERM: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_PERM as ::c_int;
-pub const S_nfsLib_NFSERR_NOENT: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_NOENT as ::c_int;
-pub const S_nfsLib_NFSERR_IO: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_IO as ::c_int;
-pub const S_nfsLib_NFSERR_NXIO: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_NXIO as ::c_int;
-pub const S_nfsLib_NFSERR_ACCESS: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_ACCESS as ::c_int;
-pub const S_nfsLib_NFSERR_EXIST: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_EXIST as ::c_int;
+pub const S_nfsLib_NFS_OK: ::c_int = nfsstat::NFS_OK as ::c_int;
+pub const S_nfsLib_NFSERR_PERM: ::c_int = nfsstat::NFSERR_PERM as ::c_int;
+pub const S_nfsLib_NFSERR_NOENT: ::c_int = nfsstat::NFSERR_NOENT as ::c_int;
+pub const S_nfsLib_NFSERR_IO: ::c_int = nfsstat::NFSERR_IO as ::c_int;
+pub const S_nfsLib_NFSERR_NXIO: ::c_int = nfsstat::NFSERR_NXIO as ::c_int;
+pub const S_nfsLib_NFSERR_ACCESS: ::c_int = nfsstat::NFSERR_ACCESS as ::c_int;
+pub const S_nfsLib_NFSERR_EXIST: ::c_int = nfsstat::NFSERR_EXIST as ::c_int;
 pub const S_nfsLib_NFSERR_XDEV: ::c_int =
     M_nfsStat | nfsstat::NFSERR_XDEV as ::c_int;
 pub const S_nfsLib_NFSERR_NODEV: ::c_int =
     M_nfsStat | nfsstat::NFSERR_NODEV as ::c_int;
-pub const S_nfsLib_NFSERR_NOTDIR: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_NOTDIR as ::c_int;
-pub const S_nfsLib_NFSERR_ISDIR: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_ISDIR as ::c_int;
-pub const S_nfsLib_NFSERR_INVAL: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_INVAL as ::c_int;
-pub const S_nfsLib_NFSERR_FBIG: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_FBIG as ::c_int;
-pub const S_nfsLib_NFSERR_NOSPC: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_NOSPC as ::c_int;
-pub const S_nfsLib_NFSERR_ROFS: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_ROFS as ::c_int;
+pub const S_nfsLib_NFSERR_NOTDIR: ::c_int = nfsstat::NFSERR_NOTDIR as ::c_int;
+pub const S_nfsLib_NFSERR_ISDIR: ::c_int = nfsstat::NFSERR_ISDIR as ::c_int;
+pub const S_nfsLib_NFSERR_INVAL: ::c_int = nfsstat::NFSERR_INVAL as ::c_int;
+pub const S_nfsLib_NFSERR_FBIG: ::c_int = nfsstat::NFSERR_FBIG as ::c_int;
+pub const S_nfsLib_NFSERR_NOSPC: ::c_int = nfsstat::NFSERR_NOSPC as ::c_int;
+pub const S_nfsLib_NFSERR_ROFS: ::c_int = nfsstat::NFSERR_ROFS as ::c_int;
 pub const S_nfsLib_NFSERR_MLINK: ::c_int =
     M_nfsStat | nfsstat::NFSERR_MLINK as ::c_int;
 pub const S_nfsLib_NFSERR_NAMETOOLONG: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_NAMETOOLONG as ::c_int;
+    nfsstat::NFSERR_NAMETOOLONG as ::c_int;
 pub const S_nfsLib_NFSERR_NOTEMPTY: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_NOTEMPTY as ::c_int;
-pub const S_nfsLib_NFSERR_DQUOT: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_DQUOT as ::c_int;
-pub const S_nfsLib_NFSERR_STALE: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_STALE as ::c_int;
+    nfsstat::NFSERR_NOTEMPTY as ::c_int;
+pub const S_nfsLib_NFSERR_DQUOT: ::c_int = nfsstat::NFSERR_DQUOT as ::c_int;
+pub const S_nfsLib_NFSERR_STALE: ::c_int = nfsstat::NFSERR_STALE as ::c_int;
 pub const S_nfsLib_NFSERR_WFLUSH: ::c_int =
     M_nfsStat | nfsstat::NFSERR_WFLUSH as ::c_int;
 pub const S_nfsLib_NFSERR_REMOTE: ::c_int =
@@ -637,26 +654,34 @@ pub const S_nfsLib_NFSERR_NOT_SYNC: ::c_int =
 pub const S_nfsLib_NFSERR_BAD_COOKIE: ::c_int =
     M_nfsStat | nfsstat::NFSERR_BAD_COOKIE as ::c_int;
 pub const S_nfsLib_NFSERR_NOTSUPP: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_NOTSUPP as ::c_int;
+    nfsstat::NFSERR_NOTSUPP as ::c_int;
 pub const S_nfsLib_NFSERR_TOOSMALL: ::c_int =
     M_nfsStat | nfsstat::NFSERR_TOOSMALL as ::c_int;
-pub const S_nfsLib_NFSERR_SERVERFAULT: ::c_int =
-    M_nfsStat | nfsstat::NFSERR_SERVERFAULT as ::c_int;
+pub const S_nfsLib_NFSERR_SERVERFAULT: ::c_int = nfsstat::NFSERR_IO as ::c_int;
 pub const S_nfsLib_NFSERR_BADTYPE: ::c_int =
     M_nfsStat | nfsstat::NFSERR_BADTYPE as ::c_int;
 pub const S_nfsLib_NFSERR_JUKEBOX: ::c_int =
     M_nfsStat | nfsstat::NFSERR_JUKEBOX as ::c_int;
 
-// IP Stuff? These are allll guesswork
+// in.h
 pub const IPPROTO_IP: ::c_int = 0;
-pub const IP_TTL: ::c_int = 4; // not sure if this is right
-pub const IP_ADD_MEMBERSHIP: ::c_int = 11;
-pub const IP_DROP_MEMBERSHIP: ::c_int = 12;
-pub const IPV6_V6ONLY: ::c_int = 26;
-pub const IP_MULTICAST_TTL: ::c_int = 33;
-pub const IP_MULTICAST_LOOP: ::c_int = 34;
-pub const IPV6_MULTICAST_LOOP: ::c_int = 19;
-pub const IPPROTO_IPV6: ::c_int = 41; // or this one, for that matter
+pub const IPPROTO_IPV6: ::c_int = 41;
+
+pub const IP_TTL: ::c_int = 4;
+pub const IP_MULTICAST_IF: ::c_int = 9;
+pub const IP_MULTICAST_TTL: ::c_int = 10;
+pub const IP_MULTICAST_LOOP: ::c_int = 11;
+pub const IP_ADD_MEMBERSHIP: ::c_int = 12;
+pub const IP_DROP_MEMBERSHIP: ::c_int = 13;
+
+// in6.h
+pub const IPV6_V6ONLY: ::c_int = 1;
+pub const IPV6_UNICAST_HOPS: ::c_int = 4;
+pub const IPV6_MULTICAST_IF: ::c_int = 9;
+pub const IPV6_MULTICAST_HOPS: ::c_int = 10;
+pub const IPV6_MULTICAST_LOOP: ::c_int = 11;
+pub const IPV6_ADD_MEMBERSHIP: ::c_int = 12;
+pub const IPV6_DROP_MEMBERSHIP: ::c_int = 13;
 
 // STAT Stuff
 pub const S_IFMT: ::c_int = 0xf000;
@@ -685,21 +710,39 @@ pub const S_IWOTH: ::c_int = 0x0002;
 pub const S_IXOTH: ::c_int = 0x0001;
 pub const S_IRWXO: ::c_int = 0x0007;
 
+// socket.h
 pub const SOL_SOCKET: ::c_int = 0xffff;
-pub const SO_BROADCAST: ::c_int = 0x001e;
+
+pub const SO_DEBUG: ::c_int = 0x0001;
+pub const SO_REUSEADDR: ::c_int = 0x0004;
+pub const SO_KEEPALIVE: ::c_int = 0x0008;
+pub const SO_DONTROUTE: ::c_int = 0x0010;
+pub const SO_RCVLOWAT: ::c_int = 0x0012;
+pub const SO_SNDLOWAT: ::c_int = 0x0013;
 pub const SO_SNDTIMEO: ::c_int = 0x1005;
+pub const SO_ACCEPTCONN: ::c_int = 0x001e;
+pub const SO_BROADCAST: ::c_int = 0x0020;
+pub const SO_USELOOPBACK: ::c_int = 0x0040;
+pub const SO_LINGER: ::c_int = 0x0080;
+pub const SO_REUSEPORT: ::c_int = 0x0200;
+
+pub const SO_VLAN: ::c_int = 0x8000;
+
+pub const SO_SNDBUF: ::c_int = 0x1001;
+pub const SO_RCVBUF: ::c_int = 0x1002;
 pub const SO_RCVTIMEO: ::c_int = 0x1006;
+pub const SO_ERROR: ::c_int = 0x1007;
+pub const SO_TYPE: ::c_int = 0x1008;
+pub const SO_BINDTODEVICE: ::c_int = 0x1010;
+pub const SO_OOBINLINE: ::c_int = 0x1011;
+pub const SO_CONNTIMEO: ::c_int = 0x100a;
+
 pub const SOCK_STREAM: ::c_int = 1;
 pub const SOCK_DGRAM: ::c_int = 2;
 pub const SOCK_RAW: ::c_int = 3;
 pub const SOCK_RDM: ::c_int = 4;
 pub const SOCK_SEQPACKET: ::c_int = 5;
 pub const SOCK_PACKET: ::c_int = 10;
-pub const SO_DEBUG: ::c_int = 0x0001;
-pub const SO_REUSEADDR: ::c_int = 0x0004;
-pub const SO_KEEPALIVE: ::c_int = 0x0008;
-pub const SO_DONTROUTE: ::c_int = 0x0010;
-pub const SO_RCVLOWAT: ::c_int = 0x0012;
 
 pub const _SS_MAXSIZE: usize = 128;
 pub const _SS_ALIGNSIZE: usize = size_of::<u32>();
@@ -740,7 +783,7 @@ pub const AF_SOCKDEV: ::c_int = 31;
 pub const AF_TIPC: ::c_int = 33;
 pub const AF_MIPC: ::c_int = 34;
 pub const AF_MIPC_SAFE: ::c_int = 35;
-pub const AF_MAX: ::c_int = 36;
+pub const AF_MAX: ::c_int = 37;
 
 pub const SHUT_RD: ::c_int = 0;
 pub const SHUT_WR: ::c_int = 1;
@@ -753,7 +796,6 @@ pub const TCP_NOPUSH: ::c_int = 3;
 pub const TCP_KEEPIDLE: ::c_int = 4;
 pub const TCP_KEEPINTVL: ::c_int = 5;
 pub const TCP_KEEPCNT: ::c_int = 6;
-pub const SO_ERROR: ::c_int = 4;
 
 // IO Lib Definitions:
 
@@ -772,7 +814,7 @@ pub const FIOWRITE: ::c_int = 12;
 pub const FIODISKCHANGE: ::c_int = 13;
 pub const FIOCANCEL: ::c_int = 14;
 pub const FIOSQUEEZE: ::c_int = 15;
-pub const FIONBIO: ::c_int = -1878786032; // it goes on ...
+pub const FIONBIO: ::c_int = 16;
 pub const _POSIX_PATH_MAX: ::c_int = 256;
 
 // Some poll stuff
@@ -783,7 +825,7 @@ pub const POLLRDNORM: ::c_short = 0x0040;
 pub const POLLWRNORM: ::c_short = POLLOUT;
 pub const POLLRDBAND: ::c_short = 0x0080;
 pub const POLLWRBAND: ::c_short = 0x0100;
-pub const POLLER: ::c_short = 0x0008;
+pub const POLLERR: ::c_short = 0x0008;
 pub const POLLHUP: ::c_short = 0x0010;
 pub const POLLNVAL: ::c_short = 0x0020;
 
@@ -801,25 +843,12 @@ pub const F_SETLK: ::c_int = 8;
 pub const F_SETLKW: ::c_int = 9;
 pub const F_DUPFD_CLOEXEC: ::c_int = 14;
 
-//Some Dirent.h stuff
-pub const DT_UNKNOWN: ::c_uchar = 0x0;
-pub const DT_FIFO: ::c_uchar = 0x1;
-pub const DT_CHR: ::c_uchar = 0x2;
-pub const DT_DIR: ::c_uchar = 0x4;
-pub const DT_BLK: ::c_uchar = 0x6;
-pub const DT_REG: ::c_uchar = 0x8;
-pub const DT_LNK: ::c_uchar = 0xA;
-pub const DT_SOCK: ::c_uchar = 0xC;
-pub const DT_WHT: ::c_uchar = 0xE;
-
 // Other Random Stuff
 pub const VXSIM_EWOULDBLOCK: ::c_int = 70;
-pub const IPV6_ADD_MEMBERSHIP: ::c_int = 20;
-pub const IPV6_DROP_MEMBERSHIP: ::c_int = 21;
 
-pub const SIG_DFL: sighandler_t = 0 as sighandler_t;
-pub const SIG_IGN: sighandler_t = 1 as sighandler_t;
-pub const SIG_ERR: sighandler_t = !0 as sighandler_t;
+pub const SIG_DFL: c_int = 0;
+pub const SIG_IGN: c_int = 1;
+pub const SIG_ERR: c_int = !0;
 
 pub const SIGHUP: ::c_int = 1;
 pub const SIGINT: ::c_int = 2;
@@ -878,15 +907,15 @@ pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = pthread_mutex_t {
     mutexValid: PTHREAD_VALID_OBJ,
     mutexInitted: PTHREAD_UNUSED_YET_OBJ,
     mutexCondRefCount: 0,
-    mutexSavPriority: 0,
+    mutexSavPriority: -1,
     mutexAttr: PTHREAD_MUTEXATTR_INITIALIZER,
-    mutexSemName: [0; PTHREAD_SHARED_SEM_NAME_MAX],
+    mutexSemName: [0; _PTHREAD_SHARED_SEM_NAME_MAX],
 };
 
 const PTHREAD_CONDATTR_INITIALIZER: pthread_condattr_t = pthread_condattr_t {
-    condAttrStatus: 0,
-    condAttrPshared: 0,
-    _CondAttrClockId: CLOCK_REALTIME,
+    condAttrStatus: 0xf70990ef,
+    condAttrPshared: 1,
+    condAttrClockId: CLOCK_REALTIME,
 };
 pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = pthread_cond_t {
     condSemId: null_mut(),
@@ -895,13 +924,15 @@ pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = pthread_cond_t {
     condRefCount: 0,
     condMutex: null_mut(),
     condAttr: PTHREAD_CONDATTR_INITIALIZER,
-    condSemName: [0; PTHREAD_SHARED_SEM_NAME_MAX],
+    condSemName: [0; _PTHREAD_SHARED_SEM_NAME_MAX],
 };
 
 const PTHREAD_RWLOCKATTR_INITIALIZER: pthread_rwlockattr_t =
     pthread_rwlockattr_t {
         rwlockAttrStatus: PTHREAD_INITIALIZED_OBJ,
+        rwlockAttrPshared: 1,
         rwlockAttrMaxReaders: 0,
+        rwlockAttrConformOpt: 1,
     };
 pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t {
     rwlockSemId: null_mut(),
@@ -909,7 +940,7 @@ pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t {
     rwlockValid: PTHREAD_VALID_OBJ,
     rwlockInitted: PTHREAD_UNUSED_YET_OBJ,
     rwlockAttr: PTHREAD_RWLOCKATTR_INITIALIZER,
-    rwlockName: [0; PTHREAD_SHARED_SEM_NAME_MAX],
+    rwlockSemName: [0; _PTHREAD_SHARED_SEM_NAME_MAX],
 };
 
 pub const SEEK_SET: ::c_int = 0;
@@ -919,19 +950,19 @@ pub const SEEK_END: ::c_int = 2;
 // rtpLibCommon.h
 pub const VX_RTP_NAME_LENGTH: usize = 255;
 
-//Some unsupported stuff
-pub const _SC_GETPW_R_SIZE_MAX: ::c_int = -1; // Via unistd.h
-pub const _SC_PAGESIZE: ::c_int = 64;
+// h/public/unistd.h
+pub const _SC_GETPW_R_SIZE_MAX: ::c_int = 21; // Via unistd.h
+pub const _SC_PAGESIZE: ::c_int = 39;
 pub const O_ACCMODE: ::c_int = 3;
 pub const O_CLOEXEC: ::c_int = 0x100000; // fcntlcom
 pub const O_EXCL: ::c_int = 0x0800;
 pub const O_CREAT: ::c_int = 0x0200;
 pub const O_TRUNC: ::c_int = 0x0400;
 pub const O_APPEND: ::c_int = 0x0008;
-pub const O_RDWR: ::c_int = 2;
-pub const O_WRONLY: ::c_int = 1;
+pub const O_RDWR: ::c_int = 0x0002;
+pub const O_WRONLY: ::c_int = 0x0001;
 pub const O_RDONLY: ::c_int = 0;
-pub const O_NONBLOCK: ::c_int = 0x4;
+pub const O_NONBLOCK: ::c_int = 0x4000;
 
 #[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum FILE {}
@@ -950,6 +981,48 @@ impl ::Clone for fpos_t {
     }
 }
 
+f! {
+    pub fn CMSG_ALIGN(len: usize) -> usize {
+        len + ::mem::size_of::<usize>() - 1 & !(::mem::size_of::<usize>() - 1)
+    }
+
+    pub fn CMSG_NXTHDR(mhdr: *const msghdr,
+                       cmsg: *const cmsghdr) -> *mut cmsghdr {
+        let next = cmsg as usize + CMSG_ALIGN((*cmsg).cmsg_len as usize)
+            + CMSG_ALIGN(::mem::size_of::<::cmsghdr>());
+        let max = (*mhdr).msg_control as usize
+            + (*mhdr).msg_controllen as usize;
+        if next <= max {
+            (cmsg as usize + CMSG_ALIGN((*cmsg).cmsg_len as usize))
+                as *mut ::cmsghdr
+        } else {
+            0 as *mut ::cmsghdr
+        }
+    }
+
+    pub fn CMSG_FIRSTHDR(mhdr: *const msghdr) -> *mut cmsghdr {
+        if (*mhdr).msg_controllen as usize > 0  {
+            (*mhdr).msg_control as *mut cmsghdr
+        } else {
+            0 as *mut cmsghdr
+        }
+    }
+
+    pub fn CMSG_DATA(cmsg: *const cmsghdr) -> *mut ::c_uchar {
+        (cmsg as *mut ::c_uchar)
+            .offset(CMSG_ALIGN(::mem::size_of::<::cmsghdr>()) as isize)
+    }
+
+    pub fn CMSG_SPACE(length: ::c_uint) -> ::c_uint {
+        (CMSG_ALIGN(length as usize) + CMSG_ALIGN(::mem::size_of::<cmsghdr>()))
+            as ::c_uint
+    }
+
+    pub fn CMSG_LEN(length: ::c_uint) -> ::c_uint {
+        CMSG_ALIGN(::mem::size_of::<cmsghdr>()) as ::c_uint + length
+    }
+}
+
 extern "C" {
     pub fn isalnum(c: c_int) -> c_int;
     pub fn isalpha(c: c_int) -> c_int;
@@ -1030,7 +1103,6 @@ extern "C" {
     pub fn free(p: *mut c_void);
     pub fn abort() -> !;
     pub fn exit(status: c_int) -> !;
-    //    pub fn _exit(status: c_int) -> !;
     pub fn atexit(cb: extern "C" fn()) -> c_int;
     pub fn system(s: *const c_char) -> c_int;
     pub fn getenv(s: *const c_char) -> *mut c_char;
@@ -1064,7 +1136,6 @@ extern "C" {
         n: size_t,
     ) -> c_int;
     pub fn strlen(cs: *const c_char) -> size_t;
-    pub fn strnlen(cs: *const c_char, maxlen: size_t) -> size_t;
     pub fn strerror(n: c_int) -> *mut c_char;
     pub fn strtok(s: *mut c_char, t: *const c_char) -> *mut c_char;
     pub fn strxfrm(s: *mut c_char, ct: *const c_char, n: size_t) -> size_t;
@@ -1289,6 +1360,15 @@ extern "C" {
     ) -> *mut ::c_void;
     pub fn dlclose(handle: *mut ::c_void) -> ::c_int;
     pub fn res_init() -> ::c_int;
+
+    // time.h
+    pub fn gmtime_r(time_p: *const time_t, result: *mut tm) -> *mut tm;
+    pub fn localtime_r(time_p: *const time_t, result: *mut tm) -> *mut tm;
+    pub fn mktime(tm: *mut tm) -> time_t;
+    pub fn time(time: *mut time_t) -> time_t;
+    pub fn gmtime(time_p: *const time_t) -> *mut tm;
+    pub fn localtime(time_p: *const time_t) -> *mut tm;
+    pub fn timegm(tm: *mut tm) -> time_t;
     pub fn difftime(time1: time_t, time0: time_t) -> ::c_double;
 
     pub fn mknod(
@@ -1298,7 +1378,7 @@ extern "C" {
     ) -> ::c_int;
     pub fn gethostname(name: *mut ::c_char, len: ::size_t) -> ::c_int;
     pub fn chroot(name: *const ::c_char) -> ::c_int;
-    pub fn usleep(secs: ::c_uint) -> ::c_int;
+    pub fn usleep(secs: ::useconds_t) -> ::c_int;
     pub fn putenv(string: *mut c_char) -> ::c_int;
     pub fn setlocale(
         category: ::c_int,
@@ -1354,10 +1434,7 @@ extern "C" {
 }
 
 extern "C" {
-    // this is gonna be a big one
-
     // stdlib.h
-    // This function may not be defined for armv7
     pub fn memalign(block_size: ::size_t, size_arg: ::size_t)
         -> *mut ::c_void;
 
@@ -1368,10 +1445,7 @@ extern "C" {
     pub fn chdir(attr: *const ::c_char) -> ::c_int;
 
     // pthread.h
-    pub fn pthread_mutexattr_init(
-        /* PTHREAD STUFF */
-        attr: *mut pthread_mutexattr_t,
-    ) -> ::c_int;
+    pub fn pthread_mutexattr_init(attr: *mut pthread_mutexattr_t) -> ::c_int;
 
     // pthread.h
     pub fn pthread_mutexattr_destroy(
@@ -1707,6 +1781,12 @@ extern "C" {
         pFromLen: *mut ::socklen_t,
     ) -> ::ssize_t;
 
+    pub fn recvmsg(
+        socket: ::c_int,
+        mp: *mut ::msghdr,
+        flags: ::c_int,
+    ) -> ::ssize_t;
+
     // socket.h
     pub fn send(
         socket: ::c_int,
@@ -1715,6 +1795,12 @@ extern "C" {
         flags: ::c_int,
     ) -> ::ssize_t;
 
+    pub fn sendmsg(
+        socket: ::c_int,
+        mp: *const ::msghdr,
+        flags: ::c_int,
+    ) -> ::ssize_t;
+
     // socket.h
     pub fn sendto(
         socket: ::c_int,
@@ -1895,7 +1981,7 @@ extern "C" {
     pub fn closedir(ptr: *mut ::DIR) -> ::c_int;
 
     pub fn pwrite64(
-        fd: ::c_int, // if you want to use fd, you gotta fix these
+        fd: ::c_int,
         buf: *const ::c_void,
         count: ::size_t,
         offset: off64_t,
@@ -2075,7 +2161,9 @@ pub fn posix_memalign(
 ) -> ::c_int {
     // check to see if align is a power of 2 and if align is a multiple
     //  of sizeof(void *)
-    if (align & align - 1 != 0) || (align % size_of::<::size_t>() != 0) {
+    if (align & align - 1 != 0)
+        || (align as usize % size_of::<::size_t>() != 0)
+    {
         return ::EINVAL;
     }
 
@@ -2154,9 +2242,6 @@ cfg_if! {
     } else if #[cfg(any(target_arch = "arm"))] {
         mod arm;
         pub use self::arm::*;
-    } else if #[cfg(any(target_arch = "armv7"))] {
-        mod armv7;
-        pub use self::armv7::*;
     }  else if #[cfg(any(target_arch = "x86"))] {
         mod x86;
         pub use self::x86::*;
diff --git a/src/vxworks/powerpc.rs b/src/vxworks/powerpc.rs
index cfdce825a0b86c4f3243bb7efcc4183574a45810..55240068aa08eb7992d9adc49739f44679207b8b 100644
--- a/src/vxworks/powerpc.rs
+++ b/src/vxworks/powerpc.rs
@@ -1,3 +1,4 @@
 pub type c_char = u8;
+pub type wchar_t = u32;
 pub type c_long = i32;
 pub type c_ulong = u32;
diff --git a/src/vxworks/powerpc64.rs b/src/vxworks/powerpc64.rs
index 577c8bef16b721c0da23b622e026f66a09988d15..4032488b6c0d5b1128fad52fabe5faaf80add3c4 100644
--- a/src/vxworks/powerpc64.rs
+++ b/src/vxworks/powerpc64.rs
@@ -1,3 +1,4 @@
 pub type c_char = u8;
+pub type wchar_t = u32;
 pub type c_long = i64;
 pub type c_ulong = u64;
diff --git a/src/vxworks/x86.rs b/src/vxworks/x86.rs
index 81ba14588b146b0bdb19452d82611adba53062aa..e617bb83c6ce342761d36dade9d591486f264521 100644
--- a/src/vxworks/x86.rs
+++ b/src/vxworks/x86.rs
@@ -1,3 +1,4 @@
 pub type c_char = i8;
+pub type wchar_t = i32;
 pub type c_long = i32;
 pub type c_ulong = u32;
diff --git a/src/vxworks/x86_64.rs b/src/vxworks/x86_64.rs
index 27b94126688fbb59c5184c9c098a28a248fb6a3a..5e95ea2567ddfe80fd88feb2aaecf70697f06d99 100644
--- a/src/vxworks/x86_64.rs
+++ b/src/vxworks/x86_64.rs
@@ -1,3 +1,4 @@
+pub type c_char = i8;
+pub type wchar_t = i32;
 pub type c_long = i64;
 pub type c_ulong = u64;
-pub type c_char = i8;