signal.c 671 B

123456789101112131415161718192021222324252627282930313233343536
  1. /* include signal */
  2. #include "unp.h"
  3. Sigfunc *
  4. signal(int signo, Sigfunc *func)
  5. {
  6. struct sigaction act, oact;
  7. act.sa_handler = func;
  8. sigemptyset(&act.sa_mask);
  9. act.sa_flags = 0;
  10. if (signo == SIGALRM) {
  11. #ifdef SA_INTERRUPT
  12. act.sa_flags |= SA_INTERRUPT; /* SunOS 4.x */
  13. #endif
  14. } else {
  15. #ifdef SA_RESTART
  16. act.sa_flags |= SA_RESTART; /* SVR4, 44BSD */
  17. #endif
  18. }
  19. if (sigaction(signo, &act, &oact) < 0)
  20. return(SIG_ERR);
  21. return(oact.sa_handler);
  22. }
  23. /* end signal */
  24. Sigfunc *
  25. Signal(int signo, Sigfunc *func) /* for our signal() function */
  26. {
  27. Sigfunc *sigfunc;
  28. if ( (sigfunc = signal(signo, func)) == SIG_ERR)
  29. err_sys("signal error");
  30. return(sigfunc);
  31. }