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 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation, either version 3 of the License, or 10 (at your option) any later version. 11 12 Bash is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with Bash. If not, see <http://www.gnu.org/licenses/>. 19 */ 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) 38 typedef union wait WAIT; 39 # define WSTATUS(t) (t.w_status) 40 #else /* _POSIX_VERSION */ 41 typedef 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 # if defined (WCOREDUMP) 81 # define WIFCORED(s) (WCOREDUMP(s)) 82 # else 83 # define WIFCORED(s) ((s) & 0200) 84 # endif 85 # endif /* !WIFCORED */ 86 87 #else /* !_POSIX_VERSION */ 88 89 # if !defined (WSTOPSIG) 90 # define WSTOPSIG(s) ((s).w_stopsig) 91 # endif /* !WSTOPSIG */ 92 93 # if !defined (WTERMSIG) 94 # define WTERMSIG(s) ((s).w_termsig) 95 # endif /* !WTERMSIG */ 96 97 # if !defined (WEXITSTATUS) 98 # define WEXITSTATUS(s) ((s).w_retcode) 99 # endif /* !WEXITSTATUS */ 100 101 # if !defined (WIFCORED) 102 # define WIFCORED(s) ((s).w_coredump) 103 # endif /* !WIFCORED */ 104 105 #endif /* !_POSIX_VERSION */ 106 107 #endif /* !_POSIXWAIT_H_ */ 108