Skip to content

linux/uclibc completing siginfo fields. #3537

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 18, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions src/unix/linux_like/linux/uclibc/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,64 @@ impl siginfo_t {
}
}

// Internal, for casts to access union fields
#[repr(C)]
struct sifields_sigchld {
si_pid: ::pid_t,
si_uid: ::uid_t,
si_status: ::c_int,
si_utime: ::c_long,
si_stime: ::c_long,
}
impl ::Copy for sifields_sigchld {}
impl ::Clone for sifields_sigchld {
fn clone(&self) -> sifields_sigchld {
*self
}
}

// Internal, for casts to access union fields
#[repr(C)]
union sifields {
_align_pointer: *mut ::c_void,
sigchld: sifields_sigchld,
}

// Internal, for casts to access union fields. Note that some variants
// of sifields start with a pointer, which makes the alignment of
// sifields vary on 32-bit and 64-bit architectures.
#[repr(C)]
struct siginfo_f {
_siginfo_base: [::c_int; 3],
sifields: sifields,
}

impl siginfo_t {
unsafe fn sifields(&self) -> &sifields {
&(*(self as *const siginfo_t as *const siginfo_f)).sifields
}

pub unsafe fn si_pid(&self) -> ::pid_t {
self.sifields().sigchld.si_pid
}

pub unsafe fn si_uid(&self) -> ::uid_t {
self.sifields().sigchld.si_uid
}

pub unsafe fn si_status(&self) -> ::c_int {
self.sifields().sigchld.si_status
}

pub unsafe fn si_utime(&self) -> ::c_long {
self.sifields().sigchld.si_utime
}

pub unsafe fn si_stime(&self) -> ::c_long {
self.sifields().sigchld.si_stime
}
}

pub const MCL_CURRENT: ::c_int = 0x0001;
pub const MCL_FUTURE: ::c_int = 0x0002;
pub const MCL_ONFAULT: ::c_int = 0x0004;
Expand Down