summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorn-salim <53019816+n-salim@users.noreply.github.com>2019-09-23 14:54:03 -0700
committerGitHub <noreply@github.com>2019-09-23 14:54:03 -0700
commit49f7b415509e4f7a1a75d94b5a57d4f690516ace (patch)
tree22f8a94d767d93df7ba06e3423dfabc9e2e2eb20
parent78a16cbaab8cbd27e1c5e09b23a38b8ee8cba084 (diff)
parentd751f237125d96147cb5eb1d074113a5e5cf8d10 (diff)
downloadrust-libc-49f7b415509e4f7a1a75d94b5a57d4f690516ace.tar.gz
Merge pull request #15 from Wind-River/union
use union for unions
-rwxr-xr-xsrc/vxworks/mod.rs70
1 files changed, 64 insertions, 6 deletions
diff --git a/src/vxworks/mod.rs b/src/vxworks/mod.rs
index 3f9930b0ba..f17773dae7 100755
--- a/src/vxworks/mod.rs
+++ b/src/vxworks/mod.rs
@@ -252,8 +252,9 @@ s! {
}
// signal.h
+
pub struct sigaction {
- pub sa_u : ::size_t, // actually union of two function pointers
+ pub sa_u : ::sa_u_t,
pub sa_mask : ::sigset_t,
pub sa_flags : ::c_int,
}
@@ -269,7 +270,7 @@ s! {
pub struct siginfo_t {
pub si_signo : ::c_int,
pub si_code : ::c_int,
- pub si_value : ::size_t, // actually union of int and void *
+ pub si_value : ::sigval,
pub si_errno : ::c_int,
pub si_status: ::c_int,
pub si_addr: *mut ::c_void,
@@ -414,6 +415,16 @@ s_no_extra_traits! {
pub __ss_pad2 : [::c_char; _SS_PAD2SIZE],
}
+ pub union sa_u_t {
+ pub sa_handler : extern "C" fn(::c_int) -> !,
+ pub sa_sigaction: extern "C" fn(::c_int, *mut ::siginfo_t,
+ *mut ::c_void) -> !,
+ }
+
+ pub union sigval {
+ pub sival_int : ::c_int,
+ pub sival_ptr : *mut ::c_void,
+ }
}
cfg_if! {
@@ -463,6 +474,46 @@ cfg_if! {
.finish()
}
}
+
+ impl PartialEq for sa_u_t {
+ fn eq(&self, other: &sa_u_t) -> bool {
+ unsafe { self.sa_handler == other.sa_handler }
+ }
+ }
+ impl Eq for sa_u_t {}
+ impl ::fmt::Debug for sa_u_t {
+ fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+ f.debug_struct("sa_u_t")
+ .field("sa_handler", unsafe { &self.sa_handler })
+ .field("sa_sigaction", unsafe { &self.sa_sigaction })
+ .finish()
+ }
+ }
+ impl ::hash::Hash for sa_u_t {
+ fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
+ unsafe { self.sa_handler.hash(state) };
+ }
+ }
+
+ impl PartialEq for sigval {
+ fn eq(&self, other: &sigval) -> bool {
+ unsafe { self.sival_ptr == other.sival_ptr }
+ }
+ }
+ impl Eq for sigval {}
+ impl ::fmt::Debug for sigval {
+ fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+ f.debug_struct("sigval")
+ .field("sival_int", unsafe { &self.sival_int})
+ .field("sival_ptr", unsafe { &self.sival_ptr })
+ .finish()
+ }
+ }
+ impl ::hash::Hash for sigval {
+ fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
+ unsafe { self.sival_ptr.hash(state) };
+ }
+ }
}
}
@@ -1976,16 +2027,14 @@ extern "C" {
pub fn sigqueue(
__pid: pid_t,
__signo: ::c_int,
- __value: ::size_t, // Actual type is const union sigval value,
- // which is a union of int and void *
+ __value: ::sigval,
) -> ::c_int;
// signal.h for user
pub fn _sigqueue(
rtpId: ::RTP_ID,
signo: ::c_int,
- pValue: *mut ::size_t, // Actual type is const union * sigval value,
- // which is a union of int and void *
+ pValue: *const ::sigval,
sigCode: ::c_int,
) -> ::c_int;
@@ -2001,6 +2050,15 @@ extern "C" {
// rtpLibCommon.h
pub fn rtpInfoGet(rtpId: ::RTP_ID, rtpStruct: *mut ::RTP_DESC) -> ::c_int;
+ pub fn rtpSpawn(
+ pubrtpFileName: *const ::c_char,
+ argv: *const *const ::c_char,
+ envp: *const *const ::c_char,
+ priority: ::c_int,
+ uStackSize: ::size_t,
+ options: ::c_int,
+ taskOptions: ::c_int,
+ ) -> RTP_ID;
// ioLib.h
pub fn _realpath(