use crate::{c_void, impl_trait};
#[doc = crate::_tags!(linux signal abi)]
#[doc = crate::_doc_meta!{
location("sys/os/linux/process"),
#[cfg(target_pointer_width = "32")]
test_size_of(LinuxSiginfo = 40|320),
#[cfg(target_pointer_width = "64")]
test_size_of(LinuxSiginfo = 48|384),
}]
#[repr(C)]
#[must_use]
pub struct LinuxSiginfo {
si_signo: i32,
si_errno: i32,
si_code: i32,
si_pid: i32,
si_uid: u32,
si_status: i32,
si_addr: *mut c_void,
si_band: i64,
si_value: LinuxSigval,
}
#[rustfmt::skip]
impl LinuxSiginfo {
pub fn signo(&self) -> i32 { self.si_signo }
pub fn errno(&self) -> i32 { self.si_errno }
pub fn code(&self) -> i32 { self.si_code }
pub fn pid(&self) -> i32 { self.si_pid }
pub fn uid(&self) -> u32 { self.si_uid }
pub fn status(&self) -> i32 { self.si_status }
pub fn addr(&self) -> *mut c_void { self.si_addr }
pub fn band(&self) -> i64 { self.si_band }
#[cfg(feature = "unsafe_syscall")]
pub fn value_int(&self) -> i32 { unsafe { self.si_value.int } }
#[cfg(feature = "unsafe_syscall")]
pub fn value_ptr(&self) -> *mut c_void { unsafe { self.si_value.ptr } }
}
impl_trait! { fmt::Debug for LinuxSiginfo |self, f| {
let mut fmt = f.debug_struct("LinuxSiginfo");
fmt.field("si_signo", &self.si_signo)
.field("si_errno", &self.si_errno)
.field("si_code", &self.si_code)
.field("si_pid", &self.si_pid)
.field("si_uid", &self.si_uid)
.field("si_status", &self.si_status)
.field("si_addr", &self.si_addr)
.field("si_band", &self.si_band);
#[cfg(feature = "unsafe_syscall")]
fmt.field("si_value", &self.si_value);
fmt.finish()
}}
#[cfg(target_pointer_width = "32")]
crate::test_size_of!(LinuxSigval = 4 | 32);
#[cfg(target_pointer_width = "64")]
crate::test_size_of!(LinuxSigval = 8 | 64);
#[repr(C)]
union LinuxSigval {
int: i32,
ptr: *mut c_void,
}
#[cfg(feature = "unsafe_syscall")]
impl_trait![fmt::Debug for LinuxSigval |self, f|
write!(
f,
"LinuxSigval {{ sival_int: {}, sival_ptr: {:?} }}",
unsafe { self.int },
unsafe { self.ptr },
)
];