use core::ffi::CStr;
use super::abi::*;
use crate::CStrArray;
/// Executes a program.
#[inline]
pub fn execve(filename: &CStr, argv: &CStrArray, envp: &CStrArray) -> crate::Result<!> {
let ret = unsafe {
syscall_3(
59,
filename.as_ptr() as usize,
argv as *const CStrArray as usize,
envp as *const CStrArray as usize,
) as u32
};
if let Ok(err) = crate::Error::try_from(ret) {
return Err(err);
}
unreachable!("execve returned an invalid error code")
}