1 /*
   2  * Redistribution and use in source and binary forms, with or without
   3  * modification, are permitted provided that the following conditions
   4  * are met:
   5  * 1. Redistributions of source code must retain the above copyright
   6  *    notice, this list of conditions and the following disclaimer.
   7  * 2. Redistributions in binary form must reproduce the above copyright
   8  *    notice, this list of conditions and the following disclaimer in the
   9  *    documentation and/or other materials provided with the distribution.
  10  *
  11  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  12  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  13  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  14  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  15  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  16  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  17  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  18  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  19  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  20  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  21  */
  22 
  23 #include "includes.h"
  24 
  25 RCSID("$Id: bsd-waitpid.c,v 1.3 2001/03/26 05:35:34 mouring Exp $");
  26 
  27 #pragma ident   "%Z%%M% %I%     %E% SMI"
  28 
  29 #ifndef HAVE_WAITPID 
  30 #include <errno.h>
  31 #include <sys/wait.h>
  32 #include "bsd-waitpid.h"
  33 
  34 pid_t
  35 waitpid(int pid, int *stat_loc, int options)
  36 {
  37         union wait statusp;
  38         pid_t wait_pid;
  39 
  40         if (pid <= 0) {
  41                 if (pid != -1) {
  42                         errno = EINVAL;
  43                         return -1;
  44                 }
  45                 pid = 0;   /* wait4() wants pid=0 for indiscriminate wait. */
  46         }
  47         wait_pid = wait4(pid, &statusp, options, NULL);
  48         if (stat_loc)
  49                 *stat_loc = (int) statusp.w_status;            
  50 
  51         return wait_pid;                               
  52 }
  53 
  54 #endif /* !HAVE_WAITPID */