153 lines
2.8 KiB
Rust
153 lines
2.8 KiB
Rust
use core::{
|
|
ffi::{c_char, c_int, c_uint},
|
|
time::Duration,
|
|
};
|
|
|
|
use crate::{
|
|
error::{self, CIntCountResult, CIntZeroResult, ResultExt},
|
|
headers::{
|
|
errno::Errno,
|
|
sys_types::{gid_t, pid_t, uid_t},
|
|
},
|
|
process,
|
|
};
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn _exit(status: c_int) -> ! {
|
|
process::c_exit_immediately(status)
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn fork() -> pid_t {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn getegid() -> gid_t {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn geteuid() -> uid_t {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn getgid() -> gid_t {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn getgroups(gidsetsize: c_int, grouplist: *mut gid_t) -> c_int {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn getpgid(pid: pid_t) -> pid_t {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn getpgrp() -> pid_t {
|
|
process::getpgrp()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn getpid() -> pid_t {
|
|
process::getpid()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn getppid() -> pid_t {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn getsid(pid: pid_t) -> pid_t {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn getuid() -> uid_t {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn nice(incr: c_int) -> CIntCountResult {
|
|
log::error!("TODO: nice()");
|
|
CIntCountResult::success(0)
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn pause() -> CIntZeroResult {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn setegid(gid: gid_t) -> c_int {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn seteuid(uid: uid_t) -> c_int {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn setgid(gid: gid_t) -> c_int {
|
|
todo!()
|
|
}
|
|
#[no_mangle]
|
|
unsafe extern "C" fn setpgid(pid: pid_t, pgid: pid_t) -> c_int {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn setpgrp() -> pid_t {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn setregid(rgid: gid_t, egid: gid_t) -> c_int {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn setreuid(ruid: uid_t, euid: uid_t) -> c_int {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn setsid() -> pid_t {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn setuid(uid: uid_t) -> c_int {
|
|
todo!()
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn sleep(seconds: c_uint) -> c_uint {
|
|
let duration = Duration::from_secs(seconds.try_into().unwrap());
|
|
match process::sleep(duration) {
|
|
Ok(()) => 0,
|
|
Err(remaining) => {
|
|
error::errno = Errno::EINTR;
|
|
remaining.as_secs() as c_uint + (remaining.subsec_nanos() != 0) as c_uint
|
|
}
|
|
}
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn usleep(millis: c_uint) -> CIntZeroResult {
|
|
let duration = Duration::from_millis(millis.try_into().unwrap());
|
|
process::sleep(duration).e_map_err(|_| Errno::EINTR)?;
|
|
CIntZeroResult::SUCCESS
|
|
}
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn getpagesize() -> usize {
|
|
4096
|
|
}
|