use core::ffi::{c_char, CStr};
pub use kernel_user_link::process::SpawnFileMapping;
use kernel_user_link::{
call_syscall,
syscalls::{SyscallError, SYS_EXIT, SYS_SPAWN, SYS_WAIT_PID},
};
pub unsafe fn exit(code: i32) -> ! {
unsafe {
call_syscall!(
SYS_EXIT,
code as u64, )
.unwrap();
}
unreachable!("exit syscall should not return")
}
pub unsafe fn spawn(
path: &CStr,
argv: &[*const c_char],
file_mappings: &[SpawnFileMapping],
) -> Result<u64, SyscallError> {
unsafe {
call_syscall!(
SYS_SPAWN,
path.as_ptr() as u64, argv.as_ptr() as u64, file_mappings.as_ptr() as u64, file_mappings.len() as u64 )
}
}
pub unsafe fn wait_for_pid(pid: u64, block: bool) -> Result<i32, SyscallError> {
unsafe {
call_syscall!(
SYS_WAIT_PID,
pid, block as u64 )
.map(|x| x as i32)
}
}