Home | History | Annotate | Download | only in sys
      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