home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / LIBSRC.ZOO / libsrc / local / sigact.c < prev    next >
Text File  |  1992-03-10  |  687b  |  37 lines

  1. #include <signal.h>
  2. #include <errno.h>
  3.  
  4. extern int __handler_mask[32];
  5. extern void *__signal_proc[32];
  6.  
  7. int sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
  8. {
  9.     if (sig < 1 || sig > 31)
  10.    {
  11.       errno = EINVAL;
  12.       return (-1);
  13.    }
  14.  
  15.    if (sig == SIGKILL || sig == SIGSTOP || sig == SIGCONT)
  16.    {
  17.       errno = EINVAL;
  18.       return (-1);
  19.    }
  20.  
  21.    if (oact)
  22.    {
  23.       oact -> sa_handler = __signal_proc[sig];
  24.       oact -> sa_mask = __handler_mask[sig];
  25.       oact -> sa_flags = 0;
  26.    }
  27.  
  28.    if (act)
  29.    {
  30.       __signal_proc[sig] = act -> sa_handler;
  31.       __handler_mask[sig] = act -> sa_mask;
  32.    }
  33.  
  34.    return (0);
  35. }
  36.  
  37.