summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-04-12 16:53:58 +0000
committerbors <bors@rust-lang.org>2022-04-12 16:53:58 +0000
commit95aae38dce109eebfa1219d9487d4608fdc88bfc (patch)
treeada1e672f04c2113deed5064696d702595c92d6d
parent45b7f08e8e32feaf4ba699992989f8407deee31d (diff)
parentda00f5544a1a38aa6483a460f7eba08325e2f487 (diff)
downloadrust-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.rs26
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;