Files
Astral/kernel-src/sys/syscalls/sigtimedwait.c
2024-09-08 15:42:08 -03:00

34 lines
715 B
C

#include <kernel/syscalls.h>
#include <kernel/signal.h>
#include <time.h>
#include <logging.h>
syscallret_t syscall_sigtimedwait(context_t *, sigset_t *uset, siginfo_t *uinfo, timespec_t *utimeout) {
syscallret_t ret = {
.ret = -1
};
sigset_t set;
timespec_t timeout;
siginfo_t info;
int signum;
ret.errno = usercopy_fromuser(&set, uset, sizeof(sigset_t));
if (ret.errno)
return ret;
ret.errno = usercopy_fromuser(&timeout, utimeout, sizeof(timespec_t));
if (ret.errno)
return ret;
ret.errno = signal_wait(&set, &timeout, &info, &signum);
if (ret.errno)
return ret;
if (uinfo)
ret.errno = usercopy_touser(uinfo, &info, sizeof(siginfo_t));
ret.ret = ret.errno ? -1 : 0;
return ret;
}