1 /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ 2 /* A POSIX-like <sys/wait.h>. 3 Copyright (C) 2001-2003, 2005-2012 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3, or (at your option) 8 any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, see <http://www.gnu.org/licenses/>. */ 17 18 19 #ifndef _GL_SYS_WAIT_H 20 21 #if __GNUC__ >= 3 22 #pragma GCC system_header 23 #endif 24 25 26 /* The include_next requires a split double-inclusion guard. */ 27 #if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) 28 # include_next <sys/wait.h> 29 #endif 30 31 #ifndef _GL_SYS_WAIT_H 32 #define _GL_SYS_WAIT_H 33 34 /* Get pid_t. */ 35 #include <sys/types.h> 36 37 38 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ 39 #ifndef _GL_CXXDEFS_H 40 #define _GL_CXXDEFS_H 41 42 /* The three most frequent use cases of these macros are: 43 44 * For providing a substitute for a function that is missing on some 45 platforms, but is declared and works fine on the platforms on which 46 it exists: 47 48 #if @GNULIB_FOO@ 49 # if !@HAVE_FOO@ 50 _GL_FUNCDECL_SYS (foo, ...); 51 # endif 52 _GL_CXXALIAS_SYS (foo, ...); 53 _GL_CXXALIASWARN (foo); 54 #elif defined GNULIB_POSIXCHECK 55 ... 56 #endif 57 58 * For providing a replacement for a function that exists on all platforms, 59 but is broken/insufficient and needs to be replaced on some platforms: 60 61 #if @GNULIB_FOO@ 62 # if @REPLACE_FOO@ 63 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 64 # undef foo 65 # define foo rpl_foo 66 # endif 67 _GL_FUNCDECL_RPL (foo, ...); 68 _GL_CXXALIAS_RPL (foo, ...); 69 # else 70 _GL_CXXALIAS_SYS (foo, ...); 71 # endif 72 _GL_CXXALIASWARN (foo); 73 #elif defined GNULIB_POSIXCHECK 74 ... 75 #endif 76 77 * For providing a replacement for a function that exists on some platforms 78 but is broken/insufficient and needs to be replaced on some of them and 79 is additionally either missing or undeclared on some other platforms: 80 81 #if @GNULIB_FOO@ 82 # if @REPLACE_FOO@ 83 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 84 # undef foo 85 # define foo rpl_foo 86 # endif 87 _GL_FUNCDECL_RPL (foo, ...); 88 _GL_CXXALIAS_RPL (foo, ...); 89 # else 90 # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ 91 _GL_FUNCDECL_SYS (foo, ...); 92 # endif 93 _GL_CXXALIAS_SYS (foo, ...); 94 # endif 95 _GL_CXXALIASWARN (foo); 96 #elif defined GNULIB_POSIXCHECK 97 ... 98 #endif 99 */ 100 101 /* _GL_EXTERN_C declaration; 102 performs the declaration with C linkage. */ 103 #if defined __cplusplus 104 # define _GL_EXTERN_C extern "C" 105 #else 106 # define _GL_EXTERN_C extern 107 #endif 108 109 /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); 110 declares a replacement function, named rpl_func, with the given prototype, 111 consisting of return type, parameters, and attributes. 112 Example: 113 _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) 114 _GL_ARG_NONNULL ((1))); 115 */ 116 #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ 117 _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) 118 #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ 119 _GL_EXTERN_C rettype rpl_func parameters_and_attributes 120 121 /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); 122 declares the system function, named func, with the given prototype, 123 consisting of return type, parameters, and attributes. 124 Example: 125 _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) 126 _GL_ARG_NONNULL ((1))); 127 */ 128 #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ 129 _GL_EXTERN_C rettype func parameters_and_attributes 130 131 /* _GL_CXXALIAS_RPL (func, rettype, parameters); 132 declares a C++ alias called GNULIB_NAMESPACE::func 133 that redirects to rpl_func, if GNULIB_NAMESPACE is defined. 134 Example: 135 _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); 136 */ 137 #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ 138 _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) 139 #if defined __cplusplus && defined GNULIB_NAMESPACE 140 # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ 141 namespace GNULIB_NAMESPACE \ 142 { \ 143 rettype (*const func) parameters = ::rpl_func; \ 144 } \ 145 _GL_EXTERN_C int _gl_cxxalias_dummy 146 #else 147 # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ 148 _GL_EXTERN_C int _gl_cxxalias_dummy 149 #endif 150 151 /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); 152 is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); 153 except that the C function rpl_func may have a slightly different 154 declaration. A cast is used to silence the "invalid conversion" error 155 that would otherwise occur. */ 156 #if defined __cplusplus && defined GNULIB_NAMESPACE 157 # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ 158 namespace GNULIB_NAMESPACE \ 159 { \ 160 rettype (*const func) parameters = \ 161 reinterpret_cast<rettype(*)parameters>(::rpl_func); \ 162 } \ 163 _GL_EXTERN_C int _gl_cxxalias_dummy 164 #else 165 # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ 166 _GL_EXTERN_C int _gl_cxxalias_dummy 167 #endif 168 169 /* _GL_CXXALIAS_SYS (func, rettype, parameters); 170 declares a C++ alias called GNULIB_NAMESPACE::func 171 that redirects to the system provided function func, if GNULIB_NAMESPACE 172 is defined. 173 Example: 174 _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); 175 */ 176 #if defined __cplusplus && defined GNULIB_NAMESPACE 177 /* If we were to write 178 rettype (*const func) parameters = ::func; 179 like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls 180 better (remove an indirection through a 'static' pointer variable), 181 but then the _GL_CXXALIASWARN macro below would cause a warning not only 182 for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */ 183 # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ 184 namespace GNULIB_NAMESPACE \ 185 { \ 186 static rettype (*func) parameters = ::func; \ 187 } \ 188 _GL_EXTERN_C int _gl_cxxalias_dummy 189 #else 190 # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ 191 _GL_EXTERN_C int _gl_cxxalias_dummy 192 #endif 193 194 /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); 195 is like _GL_CXXALIAS_SYS (func, rettype, parameters); 196 except that the C function func may have a slightly different declaration. 197 A cast is used to silence the "invalid conversion" error that would 198 otherwise occur. */ 199 #if defined __cplusplus && defined GNULIB_NAMESPACE 200 # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ 201 namespace GNULIB_NAMESPACE \ 202 { \ 203 static rettype (*func) parameters = \ 204 reinterpret_cast<rettype(*)parameters>(::func); \ 205 } \ 206 _GL_EXTERN_C int _gl_cxxalias_dummy 207 #else 208 # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ 209 _GL_EXTERN_C int _gl_cxxalias_dummy 210 #endif 211 212 /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); 213 is like _GL_CXXALIAS_SYS (func, rettype, parameters); 214 except that the C function is picked among a set of overloaded functions, 215 namely the one with rettype2 and parameters2. Two consecutive casts 216 are used to silence the "cannot find a match" and "invalid conversion" 217 errors that would otherwise occur. */ 218 #if defined __cplusplus && defined GNULIB_NAMESPACE 219 /* The outer cast must be a reinterpret_cast. 220 The inner cast: When the function is defined as a set of overloaded 221 functions, it works as a static_cast<>, choosing the designated variant. 222 When the function is defined as a single variant, it works as a 223 reinterpret_cast<>. The parenthesized cast syntax works both ways. */ 224 # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ 225 namespace GNULIB_NAMESPACE \ 226 { \ 227 static rettype (*func) parameters = \ 228 reinterpret_cast<rettype(*)parameters>( \ 229 (rettype2(*)parameters2)(::func)); \ 230 } \ 231 _GL_EXTERN_C int _gl_cxxalias_dummy 232 #else 233 # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ 234 _GL_EXTERN_C int _gl_cxxalias_dummy 235 #endif 236 237 /* _GL_CXXALIASWARN (func); 238 causes a warning to be emitted when ::func is used but not when 239 GNULIB_NAMESPACE::func is used. func must be defined without overloaded 240 variants. */ 241 #if defined __cplusplus && defined GNULIB_NAMESPACE 242 # define _GL_CXXALIASWARN(func) \ 243 _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) 244 # define _GL_CXXALIASWARN_1(func,namespace) \ 245 _GL_CXXALIASWARN_2 (func, namespace) 246 /* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, 247 we enable the warning only when not optimizing. */ 248 # if !__OPTIMIZE__ 249 # define _GL_CXXALIASWARN_2(func,namespace) \ 250 _GL_WARN_ON_USE (func, \ 251 "The symbol ::" #func " refers to the system function. " \ 252 "Use " #namespace "::" #func " instead.") 253 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 254 # define _GL_CXXALIASWARN_2(func,namespace) \ 255 extern __typeof__ (func) func 256 # else 257 # define _GL_CXXALIASWARN_2(func,namespace) \ 258 _GL_EXTERN_C int _gl_cxxalias_dummy 259 # endif 260 #else 261 # define _GL_CXXALIASWARN(func) \ 262 _GL_EXTERN_C int _gl_cxxalias_dummy 263 #endif 264 265 /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); 266 causes a warning to be emitted when the given overloaded variant of ::func 267 is used but not when GNULIB_NAMESPACE::func is used. */ 268 #if defined __cplusplus && defined GNULIB_NAMESPACE 269 # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ 270 _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ 271 GNULIB_NAMESPACE) 272 # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ 273 _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) 274 /* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, 275 we enable the warning only when not optimizing. */ 276 # if !__OPTIMIZE__ 277 # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ 278 _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ 279 "The symbol ::" #func " refers to the system function. " \ 280 "Use " #namespace "::" #func " instead.") 281 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 282 # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ 283 extern __typeof__ (func) func 284 # else 285 # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ 286 _GL_EXTERN_C int _gl_cxxalias_dummy 287 # endif 288 #else 289 # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ 290 _GL_EXTERN_C int _gl_cxxalias_dummy 291 #endif 292 293 #endif /* _GL_CXXDEFS_H */ 294 295 /* The definition of _GL_WARN_ON_USE is copied here. */ 296 #ifndef _GL_WARN_ON_USE 297 298 # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) 299 /* A compiler attribute is available in gcc versions 4.3.0 and later. */ 300 # define _GL_WARN_ON_USE(function, message) \ 301 extern __typeof__ (function) function __attribute__ ((__warning__ (message))) 302 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 303 /* Verify the existence of the function. */ 304 # define _GL_WARN_ON_USE(function, message) \ 305 extern __typeof__ (function) function 306 # else /* Unsupported. */ 307 # define _GL_WARN_ON_USE(function, message) \ 308 _GL_WARN_EXTERN_C int _gl_warn_on_use 309 # endif 310 #endif 311 312 /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") 313 is like _GL_WARN_ON_USE (function, "string"), except that the function is 314 declared with the given prototype, consisting of return type, parameters, 315 and attributes. 316 This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does 317 not work in this case. */ 318 #ifndef _GL_WARN_ON_USE_CXX 319 # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) 320 # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ 321 extern rettype function parameters_and_attributes \ 322 __attribute__ ((__warning__ (msg))) 323 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 324 /* Verify the existence of the function. */ 325 # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ 326 extern rettype function parameters_and_attributes 327 # else /* Unsupported. */ 328 # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ 329 _GL_WARN_EXTERN_C int _gl_warn_on_use 330 # endif 331 #endif 332 333 /* _GL_WARN_EXTERN_C declaration; 334 performs the declaration with C linkage. */ 335 #ifndef _GL_WARN_EXTERN_C 336 # if defined __cplusplus 337 # define _GL_WARN_EXTERN_C extern "C" 338 # else 339 # define _GL_WARN_EXTERN_C extern 340 # endif 341 #endif 342 343 344 #if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) 345 /* Unix API. */ 346 347 /* The following macros apply to an argument x, that is a status of a process, 348 as returned by waitpid(). 349 On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and 350 WTERMSIG are bits 7..0, while BeOS uses the opposite. Therefore programs 351 have to use the abstract macros. */ 352 353 /* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x) 354 is true. */ 355 # ifndef WIFSIGNALED 356 # define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f) 357 # endif 358 # ifndef WIFEXITED 359 # define WIFEXITED(x) (WTERMSIG (x) == 0) 360 # endif 361 # ifndef WIFSTOPPED 362 # define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f) 363 # endif 364 365 /* The termination signal. Only to be accessed if WIFSIGNALED(x) is true. */ 366 # ifndef WTERMSIG 367 # define WTERMSIG(x) ((x) & 0x7f) 368 # endif 369 370 /* The exit status. Only to be accessed if WIFEXITED(x) is true. */ 371 # ifndef WEXITSTATUS 372 # define WEXITSTATUS(x) (((x) >> 8) & 0xff) 373 # endif 374 375 /* The stopping signal. Only to be accessed if WIFSTOPPED(x) is true. */ 376 # ifndef WSTOPSIG 377 # define WSTOPSIG(x) (((x) >> 8) & 0x7f) 378 # endif 379 380 /* True if the process dumped core. Not standardized by POSIX. */ 381 # ifndef WCOREDUMP 382 # define WCOREDUMP(x) ((x) & 0x80) 383 # endif 384 385 #else 386 /* Native Windows API. */ 387 388 # include <signal.h> /* for SIGTERM */ 389 390 /* The following macros apply to an argument x, that is a status of a process, 391 as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess(). 392 This value is simply an 'int', not composed of bit fields. */ 393 394 /* When an unhandled fatal signal terminates a process, the exit code is 3. */ 395 # define WIFSIGNALED(x) ((x) == 3) 396 # define WIFEXITED(x) ((x) != 3) 397 # define WIFSTOPPED(x) 0 398 399 /* The signal that terminated a process is not known posthum. */ 400 # define WTERMSIG(x) SIGTERM 401 402 # define WEXITSTATUS(x) (x) 403 404 /* There are no stopping signals. */ 405 # define WSTOPSIG(x) 0 406 407 /* There are no core dumps. */ 408 # define WCOREDUMP(x) 0 409 410 #endif 411 412 413 /* Declarations of functions. */ 414 415 #if 1 416 # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ 417 _GL_FUNCDECL_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options)); 418 # endif 419 _GL_CXXALIAS_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options)); 420 _GL_CXXALIASWARN (waitpid); 421 #elif defined GNULIB_POSIXCHECK 422 # undef waitpid 423 # if HAVE_RAW_DECL_WAITPID 424 _GL_WARN_ON_USE (waitpid, "waitpid is unportable - " 425 "use gnulib module sys_wait for portability"); 426 # endif 427 #endif 428 429 430 #endif /* _GL_SYS_WAIT_H */ 431 #endif /* _GL_SYS_WAIT_H */ 432