Kernel/LibC: add SYS_SIGNAL/signal()
This commit is contained in:
@@ -43,6 +43,7 @@ __BEGIN_DECLS
|
||||
#define SYS_DUP2 36
|
||||
#define SYS_RAISE 37
|
||||
#define SYS_KILL 38
|
||||
#define SYS_SIGNAL 39
|
||||
|
||||
__END_DECLS
|
||||
|
||||
|
||||
@@ -10,4 +10,10 @@ int raise(int sig)
|
||||
int kill(pid_t pid, int sig)
|
||||
{
|
||||
return syscall(SYS_KILL, pid, sig);
|
||||
}
|
||||
|
||||
void (*signal(int sig, void (*func)(int)))(int)
|
||||
{
|
||||
long ret = syscall(SYS_SIGNAL, sig, func);
|
||||
return (void (*)(int))ret;
|
||||
}
|
||||
@@ -279,6 +279,13 @@ long syscall(long syscall, ...)
|
||||
ret = Kernel::syscall(SYS_KILL, pid, signal);
|
||||
break;
|
||||
}
|
||||
case SYS_SIGNAL:
|
||||
{
|
||||
int signal = va_arg(args, int);
|
||||
void (*handler)(int) = va_arg(args, void(*)(int));
|
||||
ret = Kernel::syscall(SYS_SIGNAL, signal, (uintptr_t)handler);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
puts("LibC: Unhandeled syscall");
|
||||
ret = -ENOSYS;
|
||||
|
||||
Reference in New Issue
Block a user