File tree Expand file tree Collapse file tree 5 files changed +98
-0
lines changed
Expand file tree Collapse file tree 5 files changed +98
-0
lines changed Original file line number Diff line number Diff line change @@ -680,6 +680,14 @@ impl siginfo_t {
680680
681681 ( * ( self as * const siginfo_t as * const siginfo_timer ) ) . si_value
682682 }
683+
684+ pub unsafe fn si_pid ( & self ) -> :: pid_t {
685+ self . si_pid
686+ }
687+
688+ pub unsafe fn si_uid ( & self ) -> :: uid_t {
689+ self . si_uid
690+ }
683691}
684692
685693cfg_if ! {
Original file line number Diff line number Diff line change @@ -31,6 +31,14 @@ impl siginfo_t {
3131 pub unsafe fn si_value ( & self ) -> :: sigval {
3232 self . si_value
3333 }
34+
35+ pub unsafe fn si_pid ( & self ) -> :: pid_t {
36+ self . si_pid
37+ }
38+
39+ pub unsafe fn si_uid ( & self ) -> :: uid_t {
40+ self . si_uid
41+ }
3442}
3543
3644s ! {
Original file line number Diff line number Diff line change @@ -38,6 +38,20 @@ impl ::Clone for timezone {
3838 }
3939}
4040
41+ impl siginfo_t {
42+ pub unsafe fn si_addr ( & self ) -> * mut :: c_void {
43+ self . si_addr
44+ }
45+
46+ pub unsafe fn si_pid ( & self ) -> :: pid_t {
47+ self . si_pid
48+ }
49+
50+ pub unsafe fn si_uid ( & self ) -> :: uid_t {
51+ self . si_uid
52+ }
53+ }
54+
4155s ! {
4256 pub struct in_addr {
4357 pub s_addr: :: in_addr_t,
Original file line number Diff line number Diff line change @@ -287,6 +287,36 @@ s! {
287287 }
288288}
289289
290+ // Internal, for casts to access union fields
291+ #[ cfg( libc_union) ]
292+ #[ repr( C ) ]
293+ #[ derive( Copy , Clone ) ]
294+ struct sifields_sigchld {
295+ si_pid : :: pid_t ,
296+ si_uid : :: uid_t ,
297+ si_status : :: c_int ,
298+ }
299+
300+ // Internal, for casts to access union fields
301+ #[ cfg( libc_union) ]
302+ #[ repr( C ) ]
303+ union sifields {
304+ _align_pointer : * mut :: c_void ,
305+ sigchld : sifields_sigchld ,
306+ }
307+
308+ // Internal, for casts to access union fields. Note that some variants of
309+ // sifields start with a pointer, which makes the alignment of sifields vary on
310+ // 32-bit and 64-bit architectures.
311+ #[ cfg( libc_union) ]
312+ #[ repr( C ) ]
313+ struct siginfo_sifields {
314+ _si_signo : :: c_int ,
315+ _si_errno : :: c_int ,
316+ _si_code : :: c_int ,
317+ sifields : sifields ,
318+ }
319+
290320impl siginfo_t {
291321 pub unsafe fn si_addr ( & self ) -> * mut :: c_void {
292322 #[ repr( C ) ]
@@ -311,6 +341,26 @@ impl siginfo_t {
311341 }
312342 ( * ( self as * const siginfo_t as * const siginfo_timer ) ) . si_sigval
313343 }
344+
345+ #[ cfg( libc_union) ]
346+ unsafe fn sifields ( & self ) -> & sifields {
347+ & ( * ( self as * const siginfo_t as * const siginfo_sifields ) ) . sifields
348+ }
349+
350+ #[ cfg( libc_union) ]
351+ pub unsafe fn si_pid ( & self ) -> :: pid_t {
352+ self . sifields ( ) . sigchld . si_pid
353+ }
354+
355+ #[ cfg( libc_union) ]
356+ pub unsafe fn si_uid ( & self ) -> :: uid_t {
357+ self . sifields ( ) . sigchld . si_uid
358+ }
359+
360+ #[ cfg( libc_union) ]
361+ pub unsafe fn si_status ( & self ) -> :: c_int {
362+ self . sifields ( ) . sigchld . si_status
363+ }
314364}
315365
316366s_no_extra_traits ! {
Original file line number Diff line number Diff line change @@ -112,6 +112,24 @@ impl ::Clone for _Vx_semaphore {
112112 }
113113}
114114
115+ impl siginfo_t {
116+ pub unsafe fn si_addr ( & self ) -> * mut :: c_void {
117+ self . si_addr
118+ }
119+
120+ pub unsafe fn si_value ( & self ) -> :: sigval {
121+ self . si_value
122+ }
123+
124+ pub unsafe fn si_pid ( & self ) -> :: pid_t {
125+ self . si_pid
126+ }
127+
128+ pub unsafe fn si_uid ( & self ) -> :: uid_t {
129+ self . si_uid
130+ }
131+ }
132+
115133s ! {
116134 // b_pthread_condattr_t.h
117135 pub struct pthread_condattr_t {
You can’t perform that action at this time.
0 commit comments