home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Mint / mntlib32.zoo / wait.c < prev    next >
C/C++ Source or Header  |  1993-05-16  |  773b  |  43 lines

  1. /*
  2.  * wait.c: a version of wait() for MiNT
  3.  */
  4.  
  5. #include <types.h>
  6. #include <wait.h>
  7. #include <errno.h>
  8. #include <signal.h>
  9. #include <osbind.h>
  10. #include <mintbind.h>
  11.  
  12. /* under TOS, vfork() puts its result in __waitval */
  13. extern long __waitval;    /* in thread.c */
  14.  
  15. pid_t wait(status)
  16.     int *status;
  17. {
  18.     long r;
  19.     int exit_status, sig_term, pid;
  20.     extern int __mint;
  21.  
  22.     if (__mint == 0) {    /* wait is faked by vfork() */
  23.         r = __waitval;
  24.         __waitval = -ENOENT;
  25.     }
  26.     else
  27.         r = Pwait3(0, 0L);
  28.  
  29.     if (r < 0) {
  30.         errno = (int) -r;
  31.         return -1;
  32.     }
  33.     pid = (int) ((r & 0xffff0000L) >> 16);
  34.     exit_status = (int) (r & 0x000000ffL);
  35.     sig_term = (int) ((r & 0x00007f00L) >> 8);
  36.     if (sig_term >= NSIG)
  37.       sig_term = 0;
  38.     if (status) {
  39.         *status = (exit_status << 8) | sig_term;
  40.     }
  41.     return pid;
  42. }
  43.