Back to index

glibc  2.9
wait4.c
Go to the documentation of this file.
00001 /* Copyright (C) 1993,94,95,96,97,98,99,2002 Free Software Foundation, Inc.
00002    This file is part of the GNU C Library.
00003 
00004    The GNU C Library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Lesser General Public
00006    License as published by the Free Software Foundation; either
00007    version 2.1 of the License, or (at your option) any later version.
00008 
00009    The GNU C Library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Lesser General Public License for more details.
00013 
00014    You should have received a copy of the GNU Lesser General Public
00015    License along with the GNU C Library; if not, write to the Free
00016    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00017    02111-1307 USA.  */
00018 
00019 #include <sys/types.h>
00020 #include <sys/wait.h>
00021 #include <errno.h>
00022 #include <hurd.h>
00023 #include <hurd/port.h>
00024 
00025 pid_t
00026 __wait4 (pid_t pid, __WAIT_STATUS_DEFN stat_loc, int options,
00027         struct rusage *usage)
00028 {
00029   pid_t dead;
00030   error_t err;
00031   struct rusage ignored;
00032   int sigcode;
00033   int dummy;
00034 
00035   err = __USEPORT (PROC, __proc_wait (port, pid, options,
00036                                   stat_loc ?: &dummy, &sigcode,
00037                                   usage ?: &ignored, &dead));
00038   switch (err)
00039     {
00040     case 0:                 /* Got a child.  */
00041       return dead;
00042     case EAGAIN:
00043       /* The RPC returns this error when the WNOHANG flag is set and no
00044         selected children are dead (but some are living).  In that
00045         situation, our return value is zero.  (The RPC can't return zero
00046         for DEAD without also returning some garbage for the other out
00047         parameters, so an error return is much more natural here.  Hence
00048         the difference between the RPC and the POSIX.1 interface.  */
00049       return (pid_t) 0;
00050     default:
00051       return (pid_t) __hurd_fail (err);
00052     }
00053 }
00054 
00055 weak_alias (__wait4, wait4)