File tree 5 files changed +98
-0
lines changed
5 files changed +98
-0
lines changed Original file line number Diff line number Diff line change @@ -680,6 +680,14 @@ impl siginfo_t {
680
680
681
681
( * ( self as * const siginfo_t as * const siginfo_timer ) ) . si_value
682
682
}
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
+ }
683
691
}
684
692
685
693
cfg_if ! {
Original file line number Diff line number Diff line change @@ -31,6 +31,14 @@ impl siginfo_t {
31
31
pub unsafe fn si_value ( & self ) -> :: sigval {
32
32
self . si_value
33
33
}
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
+ }
34
42
}
35
43
36
44
s ! {
Original file line number Diff line number Diff line change @@ -38,6 +38,20 @@ impl ::Clone for timezone {
38
38
}
39
39
}
40
40
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
+
41
55
s ! {
42
56
pub struct in_addr {
43
57
pub s_addr: :: in_addr_t,
Original file line number Diff line number Diff line change @@ -287,6 +287,36 @@ s! {
287
287
}
288
288
}
289
289
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
+
290
320
impl siginfo_t {
291
321
pub unsafe fn si_addr ( & self ) -> * mut :: c_void {
292
322
#[ repr( C ) ]
@@ -311,6 +341,26 @@ impl siginfo_t {
311
341
}
312
342
( * ( self as * const siginfo_t as * const siginfo_timer ) ) . si_sigval
313
343
}
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
+ }
314
364
}
315
365
316
366
s_no_extra_traits ! {
Original file line number Diff line number Diff line change @@ -112,6 +112,24 @@ impl ::Clone for _Vx_semaphore {
112
112
}
113
113
}
114
114
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
+
115
133
s ! {
116
134
// b_pthread_condattr_t.h
117
135
pub struct pthread_condattr_t {
You can’t perform that action at this time.
0 commit comments