1/* posixwait.h -- job control definitions from POSIX 1003.1 */
2
3/* Copyright (C) 1997 Free Software Foundation, Inc.
4
5   This file is part of GNU Bash, the Bourne Again SHell.
6
7   Bash is free software; you can redistribute it and/or modify it under
8   the terms of the GNU General Public License as published by the Free
9   Software Foundation; either version 2, or (at your option) any later
10   version.
11
12   Bash is distributed in the hope that it will be useful, but WITHOUT ANY
13   WARRANTY; without even the implied warranty of MERCHANTABILITY or
14   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15   for more details.
16
17   You should have received a copy of the GNU General Public License along
18   with Bash; see the file COPYING.  If not, write to the Free Software
19   Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
20
21#if !defined (_POSIXWAIT_H_)
22#  define _POSIXWAIT_H_
23
24/* If _POSIX_VERSION is not defined, we assume that <sys/wait.h> defines
25   a `union wait' and various macros used to manipulate it.  Look in
26   unionwait.h for the things we expect to find. */
27#if defined (HAVE_SYS_WAIT_H)
28#  include <sys/wait.h>
29#else /* !HAVE_SYS_WAIT_H */
30#  if !defined (_POSIX_VERSION)
31#    include "unionwait.h"
32#  endif
33#endif  /* !HAVE_SYS_WAIT_H */
34
35/* How to get the status of a job.  For Posix, this is just an
36   int, but for other systems we have to crack the union wait. */
37#if !defined (_POSIX_VERSION)
38typedef union wait WAIT;
39#  define WSTATUS(t)  (t.w_status)
40#else /* _POSIX_VERSION */
41typedef int WAIT;
42#  define WSTATUS(t)  (t)
43#endif /* _POSIX_VERSION */
44
45/* Make sure that parameters to wait3 are defined. */
46#if !defined (WNOHANG)
47#  define WNOHANG 1
48#  define WUNTRACED 2
49#endif /* WNOHANG */
50
51/* More Posix P1003.1 definitions.  In the POSIX versions, the parameter is
52   passed as an `int', in the non-POSIX version, as `union wait'. */
53#if defined (_POSIX_VERSION)
54
55#  if !defined (WSTOPSIG)
56#    define WSTOPSIG(s)       ((s) >> 8)
57#  endif /* !WSTOPSIG */
58
59#  if !defined (WTERMSIG)
60#    define WTERMSIG(s)	      ((s) & 0177)
61#  endif /* !WTERMSIG */
62
63#  if !defined (WEXITSTATUS)
64#    define WEXITSTATUS(s)    ((s) >> 8)
65#  endif /* !WEXITSTATUS */
66
67#  if !defined (WIFSTOPPED)
68#    define WIFSTOPPED(s)     (((s) & 0177) == 0177)
69#  endif /* !WIFSTOPPED */
70
71#  if !defined (WIFEXITED)
72#    define WIFEXITED(s)      (((s) & 0377) == 0)
73#  endif /* !WIFEXITED */
74
75#  if !defined (WIFSIGNALED)
76#    define WIFSIGNALED(s)    (!WIFSTOPPED(s) && !WIFEXITED(s))
77#  endif /* !WIFSIGNALED */
78
79#  if !defined (WIFCORED)
80#    define WIFCORED(s)       ((s) & 0200)
81#  endif /* !WIFCORED */
82
83#else /* !_POSIX_VERSION */
84
85#  if !defined (WSTOPSIG)
86#    define WSTOPSIG(s)	      ((s).w_stopsig)
87#  endif /* !WSTOPSIG */
88
89#  if !defined (WTERMSIG)
90#    define WTERMSIG(s)	      ((s).w_termsig)
91#  endif /* !WTERMSIG */
92
93#  if !defined (WEXITSTATUS)
94#    define WEXITSTATUS(s)    ((s).w_retcode)
95#  endif /* !WEXITSTATUS */
96
97#  if !defined (WIFCORED)
98#    define WIFCORED(s)       ((s).w_coredump)
99#  endif /* !WIFCORED */
100
101#endif /* !_POSIX_VERSION */
102
103#endif /* !_POSIXWAIT_H_ */
104