use core::ptr;
use super::abi::*;
use crate::{
result_from_value,
timeval,
};
pub const WNOHANG: i32 = 1;
#[repr(C)]
pub struct Rusage {
u_time: timeval,
s_time: timeval,
max_rss: usize,
ix_rss: usize,
is_rss: usize,
min_flt: usize,
maj_flt: usize,
swaps: usize,
block_inputs: usize,
block_outputs: usize,
msgs_sent: usize,
msgs_recv: usize,
signals: usize,
voluntary_ctx_switches: usize,
involuntary_ctx_switches: usize,
}
#[inline]
pub fn wait4(
pid: i32,
status: Option<&mut i32>,
options: i32,
rusage: Option<&mut Rusage>,
) -> crate::Result<i32> {
let status = match status {
Some(r) => r as *mut i32,
None => ptr::null_mut(),
};
let rusage = match rusage {
Some(r) => r as *mut Rusage,
None => ptr::null_mut(),
};
let ret = unsafe {
syscall_4(
61,
pid as usize,
status as usize,
options as usize,
rusage as usize,
) as i32
};
result_from_value(ret)
}