Files
Astral/kernel-src/sys/syscalls/sigaltstack.c
T
2024-06-09 19:31:26 -03:00

26 lines
522 B
C

#include <kernel/syscalls.h>
#include <arch/cpu.h>
syscallret_t syscall_sigaltstack(context_t *, stack_t *new, stack_t *old) {
syscallret_t ret = {
.ret = -1
};
stack_t newtmp, oldtmp;
if (new && usercopy_fromuser(&newtmp, new, sizeof(stack_t))) {
ret.errno = EFAULT;
return ret;
}
signal_altstack(_cpu()->thread, new ? &newtmp : NULL, old ? &oldtmp : NULL);
if (old && usercopy_touser(old, &oldtmp, sizeof(stack_t))) {
ret.errno = EFAULT;
return ret;
}
ret.errno = 0;
ret.ret = 0;
return ret;
}