signal.cpp 768 B

1234567891011121314151617181920212223242526272829303132
  1. #include <unistd.h>
  2. #include <errno.h>
  3. #include <signal.h>
  4. #include <Kernel/Syscall.h>
  5. extern "C" {
  6. int kill(pid_t pid, int sig)
  7. {
  8. int rc = Syscall::invoke(Syscall::PosixKill, (dword)pid, (dword)sig);
  9. __RETURN_WITH_ERRNO(rc, rc, -1);
  10. }
  11. sighandler_t signal(int signum, sighandler_t handler)
  12. {
  13. sighandler_t old_handler = (sighandler_t)Syscall::invoke(Syscall::PosixSignal, (dword)signum, (dword)handler);
  14. if (old_handler == SIG_ERR) {
  15. errno = EINVAL;
  16. return SIG_ERR;
  17. }
  18. errno = 0;
  19. return old_handler;
  20. }
  21. int sigaction(int signum, const struct sigaction* act, struct sigaction* old_act)
  22. {
  23. int rc = Syscall::invoke(Syscall::Sigaction, (dword)signum, (dword)act, (dword)old_act);
  24. __RETURN_WITH_ERRNO(rc, rc, -1);
  25. }
  26. }