lx 0.4.0

A no_std crate to use Linux system calls
Documentation
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)
}