metal-cos/lib/libc/process.c
2023-10-02 19:33:47 -04:00

54 lines
889 B
C

#include <stdint.h>
#include <sys/cdefs.h>
#include <sys/wait.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <errno.h>
#include <syscall.h>
unsigned int
sleep(unsigned int seconds)
{
OSThreadSleep(seconds);
// Should return left over time if woke up early
return 0;
}
pid_t
spawn(const char *path, const char *argv[])
{
uint64_t status = OSSpawn(path, argv);
if (SYSCALL_ERRCODE(status) != 0) {
errno = SYSCALL_ERRCODE(status);
return -1;
}
return (pid_t)SYSCALL_VALUE(status);
}
pid_t
waitpid(pid_t pid, int *status, UNUSED int options)
{
uint64_t wstatus = OSWait(pid);
if (SYSCALL_ERRCODE(wstatus) != 0) {
errno = SYSCALL_ERRCODE(wstatus);
return -1;
}
*status = SYSCALL_VALUE(wstatus) & 0x0000ffff;
return WGETPID(SYSCALL_VALUE(wstatus));
}
pid_t
wait(int *status)
{
return waitpid(WAIT_ANY, status, 0);
}