home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Mint / mntlib25.zoo / kill.c < prev    next >
C/C++ Source or Header  |  1992-09-05  |  1KB  |  67 lines

  1. /* kill() for MiNT */
  2.  
  3. #include <stdlib.h>
  4. #include <errno.h>
  5. #include <osbind.h>
  6. #include <signal.h>
  7. #include <unistd.h>
  8. #include "mintbind.h"
  9.  
  10. extern int __mint;
  11.  
  12. /* vector of signal handlers (for TOS) */
  13. extern __Sigfunc _sig_handler[];    /* in signal.c */
  14.  
  15. /* vector giving which signals are currently blocked from delivery (for TOS) */
  16. extern long _sigmask;            /* in signal.c */
  17.  
  18. /* which signals are pending? */
  19. extern long _sigpending;
  20.  
  21. int
  22. kill(pid, sig)
  23.     int pid, sig;
  24. {
  25.     long r;
  26.     __Sigfunc hndle;
  27.  
  28.     if (pid < 0) {
  29.         errno = ERANGE;
  30.         return -1;
  31.     }
  32.  
  33.     if (__mint) {
  34.         r = Pkill(pid, sig);
  35.         if (r < 0) {
  36.             errno = (int) -r;
  37.             return -1;
  38.         }
  39.     } else {
  40.         if (sig < 0 || sig >= NSIG || (pid && pid != getpid())) {
  41.             errno = ERANGE;
  42.             return -1;
  43.         }
  44.         hndle = _sig_handler[sig];
  45.         if (hndle == SIG_IGN)
  46.             return 0;
  47.     /* check here for masked signals */
  48.         else if (sig != SIGKILL && (_sigmask & (1L << sig)))
  49.             _sigpending |= (1L << sig);
  50.         else {
  51.             _sigpending &= ~(1L << sig);
  52.             if (hndle == SIG_DFL) {
  53.                 switch (sig) {
  54.                 case SIGCONT:
  55.                 case SIGCHLD:
  56.                     return 0;
  57.                 default:
  58.                     exit(sig << 8);
  59.                 }
  60.             } else {
  61.                 (*hndle)(sig);
  62.             }
  63.         }
  64.     }
  65.     return 0;
  66. }
  67.