//! This module corresponds to `mach/mach_traps.h`.
use kern_return::kern_return_t;
use port::{mach_port_name_t, mach_port_t};

extern "C" {
    static mach_task_self_: mach_port_t;
    pub fn task_for_pid(
        target_tport: mach_port_name_t,
        pid: ::libc::c_int,
        tn: *mut mach_port_name_t,
    ) -> kern_return_t;
}

pub unsafe fn mach_task_self() -> mach_port_t {
    mach_task_self_
}

pub unsafe fn current_task() -> mach_port_t {
    mach_task_self()
}

#[cfg(test)]
mod tests {
    use port::*;
    use traps::*;

    #[test]
    fn mach_task_self_sanity() {
        unsafe {
            let this_task = mach_task_self();
            assert!(this_task != MACH_PORT_NULL);
            assert!(this_task != MACH_PORT_DEAD);
        }
    }
}
