105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A POSIX-like <sys/wait.h>.
205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Copyright (C) 2001-2003, 2005-2012 Free Software Foundation, Inc.
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is free software; you can redistribute it and/or modify
505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   it under the terms of the GNU General Public License as published by
605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the Free Software Foundation; either version 3, or (at your option)
705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   any later version.
805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is distributed in the hope that it will be useful,
1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   but WITHOUT ANY WARRANTY; without even the implied warranty of
1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GNU General Public License for more details.
1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   You should have received a copy of the GNU General Public License
1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _@GUARD_PREFIX@_SYS_WAIT_H
1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if __GNUC__ >= 3
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang@PRAGMA_SYSTEM_HEADER@
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang@PRAGMA_COLUMNS@
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The include_next requires a split double-inclusion guard.  */
2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# @INCLUDE_NEXT@ @NEXT_SYS_WAIT_H@
2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _@GUARD_PREFIX@_SYS_WAIT_H
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _@GUARD_PREFIX@_SYS_WAIT_H
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Get pid_t.  */
3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <sys/types.h>
3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_WARN_ON_USE is copied here.  */
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Unix API.  */
4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The following macros apply to an argument x, that is a status of a process,
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   as returned by waitpid().
4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and
4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   WTERMSIG are bits 7..0, while BeOS uses the opposite.  Therefore programs
4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   have to use the abstract macros.  */
5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x)
5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is true.  */
5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef WIFSIGNALED
5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f)
5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef WIFEXITED
5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define WIFEXITED(x) (WTERMSIG (x) == 0)
5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef WIFSTOPPED
6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f)
6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The termination signal. Only to be accessed if WIFSIGNALED(x) is true.  */
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef WTERMSIG
6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define WTERMSIG(x) ((x) & 0x7f)
6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The exit status. Only to be accessed if WIFEXITED(x) is true.  */
6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef WEXITSTATUS
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define WEXITSTATUS(x) (((x) >> 8) & 0xff)
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The stopping signal. Only to be accessed if WIFSTOPPED(x) is true.  */
7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef WSTOPSIG
7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define WSTOPSIG(x) (((x) >> 8) & 0x7f)
7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* True if the process dumped core.  Not standardized by POSIX.  */
7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef WCOREDUMP
8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define WCOREDUMP(x) ((x) & 0x80)
8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Native Windows API.  */
8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <signal.h> /* for SIGTERM */
8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The following macros apply to an argument x, that is a status of a process,
8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess().
9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This value is simply an 'int', not composed of bit fields.  */
9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* When an unhandled fatal signal terminates a process, the exit code is 3.  */
9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define WIFSIGNALED(x) ((x) == 3)
9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define WIFEXITED(x) ((x) != 3)
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define WIFSTOPPED(x) 0
9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The signal that terminated a process is not known posthum.  */
9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define WTERMSIG(x) SIGTERM
9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define WEXITSTATUS(x) (x)
10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* There are no stopping signals.  */
10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define WSTOPSIG(x) 0
10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* There are no core dumps.  */
10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define WCOREDUMP(x) 0
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Declarations of functions.  */
11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WAITPID@
11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options));
11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options));
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (waitpid);
11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef waitpid
12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WAITPID
12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (waitpid, "waitpid is unportable - "
12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module sys_wait for portability");
12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _@GUARD_PREFIX@_SYS_WAIT_H */
12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _@GUARD_PREFIX@_SYS_WAIT_H */
130