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;