signal.rs 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. use core::mem;
  2. use super::super::types::*;
  3. use super::super::PalSignal;
  4. use super::{e, Sys};
  5. impl PalSignal for Sys {
  6. fn kill(pid: pid_t, sig: c_int) -> c_int {
  7. e(unsafe { syscall!(KILL, pid, sig) }) as c_int
  8. }
  9. fn killpg(pgrp: pid_t, sig: c_int) -> c_int {
  10. e(unsafe { syscall!(KILL, -(pgrp as isize) as pid_t, sig) }) as c_int
  11. }
  12. fn raise(sig: c_int) -> c_int {
  13. let tid = e(unsafe { syscall!(GETTID) }) as pid_t;
  14. let ret = if tid == !0 {
  15. -1
  16. } else {
  17. e(unsafe { syscall!(TKILL, tid, sig) }) as c_int
  18. };
  19. ret
  20. }
  21. unsafe fn sigaction(sig: c_int, act: *const sigaction, oact: *mut sigaction) -> c_int {
  22. e(syscall!(
  23. RT_SIGACTION,
  24. sig,
  25. act,
  26. oact,
  27. mem::size_of::<sigset_t>()
  28. )) as c_int
  29. }
  30. fn sigprocmask(how: c_int, set: *const sigset_t, oset: *mut sigset_t) -> c_int {
  31. e(unsafe { syscall!(RT_SIGPROCMASK, how, set, oset, mem::size_of::<sigset_t>()) }) as c_int
  32. }
  33. }