diff options
author | bors <bors@rust-lang.org> | 2022-04-12 16:53:58 +0000 |
---|---|---|
committer | bors <bors@rust-lang.org> | 2022-04-12 16:53:58 +0000 |
commit | 95aae38dce109eebfa1219d9487d4608fdc88bfc (patch) | |
tree | ada1e672f04c2113deed5064696d702595c92d6d | |
parent | 45b7f08e8e32feaf4ba699992989f8407deee31d (diff) | |
parent | da00f5544a1a38aa6483a460f7eba08325e2f487 (diff) | |
download | rust-libc-95aae38dce109eebfa1219d9487d4608fdc88bfc.tar.gz |
Auto merge of #2750 - pfmooney:uclibc-siginfo, r=Amanieu
Add siginfo accessors for uclibc
With rust-lang/rust#95688 switching to the libc-provided `si_addr()` accessor on `siginfo_t`, it became apparent that the uclibc target was lacking that implementation (see rust-lang/rust#95866).
It would be nice to provide the same accessor in uclibc as the other UNIX-y platforms.
CC: `@asomers` `@name1e5s` `@skrap` - If you have a testing env for this, could you try it out?
-rw-r--r-- | src/unix/linux_like/linux/uclibc/mod.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/unix/linux_like/linux/uclibc/mod.rs b/src/unix/linux_like/linux/uclibc/mod.rs index b1ac310283..fc80f0f9d6 100644 --- a/src/unix/linux_like/linux/uclibc/mod.rs +++ b/src/unix/linux_like/linux/uclibc/mod.rs @@ -81,6 +81,32 @@ s! { } } +impl siginfo_t { + pub unsafe fn si_addr(&self) -> *mut ::c_void { + #[repr(C)] + struct siginfo_sigfault { + _si_signo: ::c_int, + _si_errno: ::c_int, + _si_code: ::c_int, + si_addr: *mut ::c_void, + } + (*(self as *const siginfo_t as *const siginfo_sigfault)).si_addr + } + + pub unsafe fn si_value(&self) -> ::sigval { + #[repr(C)] + struct siginfo_si_value { + _si_signo: ::c_int, + _si_errno: ::c_int, + _si_code: ::c_int, + _si_timerid: ::c_int, + _si_overrun: ::c_int, + si_value: ::sigval, + } + (*(self as *const siginfo_t as *const siginfo_si_value)).si_value + } +} + pub const MCL_CURRENT: ::c_int = 0x0001; pub const MCL_FUTURE: ::c_int = 0x0002; |