home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / LIBSRC.ZOO / libsrc / local / wait4.c < prev    next >
Text File  |  1992-03-09  |  1KB  |  43 lines

  1. #define INCL_DOSPROCESS
  2. #define INCL_DOSERRORS
  3. #include <os2.h>
  4. #include <sys/types.h>
  5. #include <sys/time.h>
  6. #include <sys/resource.h>
  7. #include <errno.h>
  8.  
  9. ULONG Dos32WaitChild() asm ("Dos32WaitChild");
  10.  
  11. pid_t wait4 (pid_t wpid, int *status, int options, struct rusage *rusage)
  12. {
  13.    ULONG rc;
  14.    RESULTCODES rc_wait;
  15.    PID pid;
  16.  
  17.    rc = Dos32WaitChild (DCWA_PROCESS, /* wait for process id'ed by parm 5 */
  18.                         DCWW_WAIT,    /* wait for process to end */
  19.                         &rc_wait,     /* place to put termination results */
  20.                         &pid,         /* place to put the pid of the dead process */
  21.                         0);           /* wait for any child process to end */
  22.  
  23.    if (rc)
  24.    {
  25.       if (rc == ERROR_WAIT_NO_CHILDREN || rc == ERROR_NO_CHILD_PROCESS)
  26.       {
  27.          errno = ECHILD;
  28.          return (-1);
  29.       }
  30.  
  31.       errno = EFAULT;
  32.       return (-1);
  33.    }
  34.  
  35.    if (rc_wait.codeTerminate == 4)
  36.       *status = 0x400 | (rc_wait.codeResult & 0xff);
  37.    else
  38.       *status = (rc_wait.codeResult & 0xff) << 8;
  39.  
  40.    return (pid);
  41. }
  42.  
  43.