1*aedfa9edSchristos /* This file is automatically generated. DO NOT EDIT! */ 2*aedfa9edSchristos /* Generated from: NetBSD: mknative-gdb,v 1.12 2020/09/17 16:54:31 christos Exp */ 3*aedfa9edSchristos /* Generated from: NetBSD: mknative.common,v 1.16 2018/04/15 15:13:37 christos Exp */ 4*aedfa9edSchristos 5*aedfa9edSchristos /* DO NOT EDIT! GENERATED AUTOMATICALLY! */ 6*aedfa9edSchristos /* A GNU-like <signal.h>. 7*aedfa9edSchristos 8*aedfa9edSchristos Copyright (C) 2006-2020 Free Software Foundation, Inc. 9*aedfa9edSchristos 10*aedfa9edSchristos This program is free software: you can redistribute it and/or modify 11*aedfa9edSchristos it under the terms of the GNU General Public License as published by 12*aedfa9edSchristos the Free Software Foundation; either version 3 of the License, or 13*aedfa9edSchristos (at your option) any later version. 14*aedfa9edSchristos 15*aedfa9edSchristos This program is distributed in the hope that it will be useful, 16*aedfa9edSchristos but WITHOUT ANY WARRANTY; without even the implied warranty of 17*aedfa9edSchristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*aedfa9edSchristos GNU General Public License for more details. 19*aedfa9edSchristos 20*aedfa9edSchristos You should have received a copy of the GNU General Public License 21*aedfa9edSchristos along with this program. If not, see <https://www.gnu.org/licenses/>. */ 22*aedfa9edSchristos 23*aedfa9edSchristos #if __GNUC__ >= 3 24*aedfa9edSchristos #pragma GCC system_header 25*aedfa9edSchristos #endif 26*aedfa9edSchristos 27*aedfa9edSchristos 28*aedfa9edSchristos #if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T) 29*aedfa9edSchristos /* Special invocation convention: 30*aedfa9edSchristos - Inside glibc header files. 31*aedfa9edSchristos - On glibc systems we have a sequence of nested includes 32*aedfa9edSchristos <signal.h> -> <ucontext.h> -> <signal.h>. 33*aedfa9edSchristos In this situation, the functions are not yet declared, therefore we cannot 34*aedfa9edSchristos provide the C++ aliases. 35*aedfa9edSchristos - On glibc systems with GCC 4.3 we have a sequence of nested includes 36*aedfa9edSchristos <csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>. 37*aedfa9edSchristos In this situation, some of the functions are not yet declared, therefore 38*aedfa9edSchristos we cannot provide the C++ aliases. */ 39*aedfa9edSchristos 40*aedfa9edSchristos # include_next <signal.h> 41*aedfa9edSchristos 42*aedfa9edSchristos #else 43*aedfa9edSchristos /* Normal invocation convention. */ 44*aedfa9edSchristos 45*aedfa9edSchristos #ifndef _GL_SIGNAL_H 46*aedfa9edSchristos 47*aedfa9edSchristos #define _GL_ALREADY_INCLUDING_SIGNAL_H 48*aedfa9edSchristos 49*aedfa9edSchristos /* Define pid_t, uid_t. 50*aedfa9edSchristos Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. 51*aedfa9edSchristos On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes 52*aedfa9edSchristos us; so include <sys/types.h> now, before the second inclusion guard. */ 53*aedfa9edSchristos #include <sys/types.h> 54*aedfa9edSchristos 55*aedfa9edSchristos /* The include_next requires a split double-inclusion guard. */ 56*aedfa9edSchristos #include_next <signal.h> 57*aedfa9edSchristos 58*aedfa9edSchristos #undef _GL_ALREADY_INCLUDING_SIGNAL_H 59*aedfa9edSchristos 60*aedfa9edSchristos #ifndef _GL_SIGNAL_H 61*aedfa9edSchristos #define _GL_SIGNAL_H 62*aedfa9edSchristos 63*aedfa9edSchristos /* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6, Android 64*aedfa9edSchristos declare pthread_sigmask in <pthread.h>, not in <signal.h>. 65*aedfa9edSchristos But avoid namespace pollution on glibc systems.*/ 66*aedfa9edSchristos #if (0 || defined GNULIB_POSIXCHECK) \ 67*aedfa9edSchristos && ((defined __APPLE__ && defined __MACH__) \ 68*aedfa9edSchristos || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ \ 69*aedfa9edSchristos || defined __sun || defined __ANDROID__) \ 70*aedfa9edSchristos && ! defined __GLIBC__ 71*aedfa9edSchristos # include <pthread.h> 72*aedfa9edSchristos #endif 73*aedfa9edSchristos 74*aedfa9edSchristos /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ 75*aedfa9edSchristos /* C++ compatible function declaration macros. 76*aedfa9edSchristos Copyright (C) 2010-2020 Free Software Foundation, Inc. 77*aedfa9edSchristos 78*aedfa9edSchristos This program is free software: you can redistribute it and/or modify it 79*aedfa9edSchristos under the terms of the GNU General Public License as published 80*aedfa9edSchristos by the Free Software Foundation; either version 3 of the License, or 81*aedfa9edSchristos (at your option) any later version. 82*aedfa9edSchristos 83*aedfa9edSchristos This program is distributed in the hope that it will be useful, 84*aedfa9edSchristos but WITHOUT ANY WARRANTY; without even the implied warranty of 85*aedfa9edSchristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 86*aedfa9edSchristos General Public License for more details. 87*aedfa9edSchristos 88*aedfa9edSchristos You should have received a copy of the GNU General Public License 89*aedfa9edSchristos along with this program. If not, see <https://www.gnu.org/licenses/>. */ 90*aedfa9edSchristos 91*aedfa9edSchristos #ifndef _GL_CXXDEFS_H 92*aedfa9edSchristos #define _GL_CXXDEFS_H 93*aedfa9edSchristos 94*aedfa9edSchristos /* Begin/end the GNULIB_NAMESPACE namespace. */ 95*aedfa9edSchristos #if defined __cplusplus && defined GNULIB_NAMESPACE 96*aedfa9edSchristos # define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { 97*aedfa9edSchristos # define _GL_END_NAMESPACE } 98*aedfa9edSchristos #else 99*aedfa9edSchristos # define _GL_BEGIN_NAMESPACE 100*aedfa9edSchristos # define _GL_END_NAMESPACE 101*aedfa9edSchristos #endif 102*aedfa9edSchristos 103*aedfa9edSchristos /* The three most frequent use cases of these macros are: 104*aedfa9edSchristos 105*aedfa9edSchristos * For providing a substitute for a function that is missing on some 106*aedfa9edSchristos platforms, but is declared and works fine on the platforms on which 107*aedfa9edSchristos it exists: 108*aedfa9edSchristos 109*aedfa9edSchristos #if @GNULIB_FOO@ 110*aedfa9edSchristos # if !@HAVE_FOO@ 111*aedfa9edSchristos _GL_FUNCDECL_SYS (foo, ...); 112*aedfa9edSchristos # endif 113*aedfa9edSchristos _GL_CXXALIAS_SYS (foo, ...); 114*aedfa9edSchristos _GL_CXXALIASWARN (foo); 115*aedfa9edSchristos #elif defined GNULIB_POSIXCHECK 116*aedfa9edSchristos ... 117*aedfa9edSchristos #endif 118*aedfa9edSchristos 119*aedfa9edSchristos * For providing a replacement for a function that exists on all platforms, 120*aedfa9edSchristos but is broken/insufficient and needs to be replaced on some platforms: 121*aedfa9edSchristos 122*aedfa9edSchristos #if @GNULIB_FOO@ 123*aedfa9edSchristos # if @REPLACE_FOO@ 124*aedfa9edSchristos # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 125*aedfa9edSchristos # undef foo 126*aedfa9edSchristos # define foo rpl_foo 127*aedfa9edSchristos # endif 128*aedfa9edSchristos _GL_FUNCDECL_RPL (foo, ...); 129*aedfa9edSchristos _GL_CXXALIAS_RPL (foo, ...); 130*aedfa9edSchristos # else 131*aedfa9edSchristos _GL_CXXALIAS_SYS (foo, ...); 132*aedfa9edSchristos # endif 133*aedfa9edSchristos _GL_CXXALIASWARN (foo); 134*aedfa9edSchristos #elif defined GNULIB_POSIXCHECK 135*aedfa9edSchristos ... 136*aedfa9edSchristos #endif 137*aedfa9edSchristos 138*aedfa9edSchristos * For providing a replacement for a function that exists on some platforms 139*aedfa9edSchristos but is broken/insufficient and needs to be replaced on some of them and 140*aedfa9edSchristos is additionally either missing or undeclared on some other platforms: 141*aedfa9edSchristos 142*aedfa9edSchristos #if @GNULIB_FOO@ 143*aedfa9edSchristos # if @REPLACE_FOO@ 144*aedfa9edSchristos # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 145*aedfa9edSchristos # undef foo 146*aedfa9edSchristos # define foo rpl_foo 147*aedfa9edSchristos # endif 148*aedfa9edSchristos _GL_FUNCDECL_RPL (foo, ...); 149*aedfa9edSchristos _GL_CXXALIAS_RPL (foo, ...); 150*aedfa9edSchristos # else 151*aedfa9edSchristos # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ 152*aedfa9edSchristos _GL_FUNCDECL_SYS (foo, ...); 153*aedfa9edSchristos # endif 154*aedfa9edSchristos _GL_CXXALIAS_SYS (foo, ...); 155*aedfa9edSchristos # endif 156*aedfa9edSchristos _GL_CXXALIASWARN (foo); 157*aedfa9edSchristos #elif defined GNULIB_POSIXCHECK 158*aedfa9edSchristos ... 159*aedfa9edSchristos #endif 160*aedfa9edSchristos */ 161*aedfa9edSchristos 162*aedfa9edSchristos /* _GL_EXTERN_C declaration; 163*aedfa9edSchristos performs the declaration with C linkage. */ 164*aedfa9edSchristos #if defined __cplusplus 165*aedfa9edSchristos # define _GL_EXTERN_C extern "C" 166*aedfa9edSchristos #else 167*aedfa9edSchristos # define _GL_EXTERN_C extern 168*aedfa9edSchristos #endif 169*aedfa9edSchristos 170*aedfa9edSchristos /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); 171*aedfa9edSchristos declares a replacement function, named rpl_func, with the given prototype, 172*aedfa9edSchristos consisting of return type, parameters, and attributes. 173*aedfa9edSchristos Example: 174*aedfa9edSchristos _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) 175*aedfa9edSchristos _GL_ARG_NONNULL ((1))); 176*aedfa9edSchristos */ 177*aedfa9edSchristos #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ 178*aedfa9edSchristos _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) 179*aedfa9edSchristos #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ 180*aedfa9edSchristos _GL_EXTERN_C rettype rpl_func parameters_and_attributes 181*aedfa9edSchristos 182*aedfa9edSchristos /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); 183*aedfa9edSchristos declares the system function, named func, with the given prototype, 184*aedfa9edSchristos consisting of return type, parameters, and attributes. 185*aedfa9edSchristos Example: 186*aedfa9edSchristos _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) 187*aedfa9edSchristos _GL_ARG_NONNULL ((1))); 188*aedfa9edSchristos */ 189*aedfa9edSchristos #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ 190*aedfa9edSchristos _GL_EXTERN_C rettype func parameters_and_attributes 191*aedfa9edSchristos 192*aedfa9edSchristos /* _GL_CXXALIAS_RPL (func, rettype, parameters); 193*aedfa9edSchristos declares a C++ alias called GNULIB_NAMESPACE::func 194*aedfa9edSchristos that redirects to rpl_func, if GNULIB_NAMESPACE is defined. 195*aedfa9edSchristos Example: 196*aedfa9edSchristos _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); 197*aedfa9edSchristos 198*aedfa9edSchristos Wrapping rpl_func in an object with an inline conversion operator 199*aedfa9edSchristos avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is 200*aedfa9edSchristos actually used in the program. */ 201*aedfa9edSchristos #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ 202*aedfa9edSchristos _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) 203*aedfa9edSchristos #if defined __cplusplus && defined GNULIB_NAMESPACE 204*aedfa9edSchristos # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ 205*aedfa9edSchristos namespace GNULIB_NAMESPACE \ 206*aedfa9edSchristos { \ 207*aedfa9edSchristos static const struct _gl_ ## func ## _wrapper \ 208*aedfa9edSchristos { \ 209*aedfa9edSchristos typedef rettype (*type) parameters; \ 210*aedfa9edSchristos \ 211*aedfa9edSchristos inline operator type () const \ 212*aedfa9edSchristos { \ 213*aedfa9edSchristos return ::rpl_func; \ 214*aedfa9edSchristos } \ 215*aedfa9edSchristos } func = {}; \ 216*aedfa9edSchristos } \ 217*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 218*aedfa9edSchristos #else 219*aedfa9edSchristos # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ 220*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 221*aedfa9edSchristos #endif 222*aedfa9edSchristos 223*aedfa9edSchristos /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); 224*aedfa9edSchristos is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); 225*aedfa9edSchristos except that the C function rpl_func may have a slightly different 226*aedfa9edSchristos declaration. A cast is used to silence the "invalid conversion" error 227*aedfa9edSchristos that would otherwise occur. */ 228*aedfa9edSchristos #if defined __cplusplus && defined GNULIB_NAMESPACE 229*aedfa9edSchristos # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ 230*aedfa9edSchristos namespace GNULIB_NAMESPACE \ 231*aedfa9edSchristos { \ 232*aedfa9edSchristos static const struct _gl_ ## func ## _wrapper \ 233*aedfa9edSchristos { \ 234*aedfa9edSchristos typedef rettype (*type) parameters; \ 235*aedfa9edSchristos \ 236*aedfa9edSchristos inline operator type () const \ 237*aedfa9edSchristos { \ 238*aedfa9edSchristos return reinterpret_cast<type>(::rpl_func); \ 239*aedfa9edSchristos } \ 240*aedfa9edSchristos } func = {}; \ 241*aedfa9edSchristos } \ 242*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 243*aedfa9edSchristos #else 244*aedfa9edSchristos # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ 245*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 246*aedfa9edSchristos #endif 247*aedfa9edSchristos 248*aedfa9edSchristos /* _GL_CXXALIAS_SYS (func, rettype, parameters); 249*aedfa9edSchristos declares a C++ alias called GNULIB_NAMESPACE::func 250*aedfa9edSchristos that redirects to the system provided function func, if GNULIB_NAMESPACE 251*aedfa9edSchristos is defined. 252*aedfa9edSchristos Example: 253*aedfa9edSchristos _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); 254*aedfa9edSchristos 255*aedfa9edSchristos Wrapping func in an object with an inline conversion operator 256*aedfa9edSchristos avoids a reference to func unless GNULIB_NAMESPACE::func is 257*aedfa9edSchristos actually used in the program. */ 258*aedfa9edSchristos #if defined __cplusplus && defined GNULIB_NAMESPACE 259*aedfa9edSchristos # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ 260*aedfa9edSchristos namespace GNULIB_NAMESPACE \ 261*aedfa9edSchristos { \ 262*aedfa9edSchristos static const struct _gl_ ## func ## _wrapper \ 263*aedfa9edSchristos { \ 264*aedfa9edSchristos typedef rettype (*type) parameters; \ 265*aedfa9edSchristos \ 266*aedfa9edSchristos inline operator type () const \ 267*aedfa9edSchristos { \ 268*aedfa9edSchristos return ::func; \ 269*aedfa9edSchristos } \ 270*aedfa9edSchristos } func = {}; \ 271*aedfa9edSchristos } \ 272*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 273*aedfa9edSchristos #else 274*aedfa9edSchristos # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ 275*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 276*aedfa9edSchristos #endif 277*aedfa9edSchristos 278*aedfa9edSchristos /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); 279*aedfa9edSchristos is like _GL_CXXALIAS_SYS (func, rettype, parameters); 280*aedfa9edSchristos except that the C function func may have a slightly different declaration. 281*aedfa9edSchristos A cast is used to silence the "invalid conversion" error that would 282*aedfa9edSchristos otherwise occur. */ 283*aedfa9edSchristos #if defined __cplusplus && defined GNULIB_NAMESPACE 284*aedfa9edSchristos # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ 285*aedfa9edSchristos namespace GNULIB_NAMESPACE \ 286*aedfa9edSchristos { \ 287*aedfa9edSchristos static const struct _gl_ ## func ## _wrapper \ 288*aedfa9edSchristos { \ 289*aedfa9edSchristos typedef rettype (*type) parameters; \ 290*aedfa9edSchristos \ 291*aedfa9edSchristos inline operator type () const \ 292*aedfa9edSchristos { \ 293*aedfa9edSchristos return reinterpret_cast<type>(::func); \ 294*aedfa9edSchristos } \ 295*aedfa9edSchristos } func = {}; \ 296*aedfa9edSchristos } \ 297*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 298*aedfa9edSchristos #else 299*aedfa9edSchristos # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ 300*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 301*aedfa9edSchristos #endif 302*aedfa9edSchristos 303*aedfa9edSchristos /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); 304*aedfa9edSchristos is like _GL_CXXALIAS_SYS (func, rettype, parameters); 305*aedfa9edSchristos except that the C function is picked among a set of overloaded functions, 306*aedfa9edSchristos namely the one with rettype2 and parameters2. Two consecutive casts 307*aedfa9edSchristos are used to silence the "cannot find a match" and "invalid conversion" 308*aedfa9edSchristos errors that would otherwise occur. */ 309*aedfa9edSchristos #if defined __cplusplus && defined GNULIB_NAMESPACE 310*aedfa9edSchristos /* The outer cast must be a reinterpret_cast. 311*aedfa9edSchristos The inner cast: When the function is defined as a set of overloaded 312*aedfa9edSchristos functions, it works as a static_cast<>, choosing the designated variant. 313*aedfa9edSchristos When the function is defined as a single variant, it works as a 314*aedfa9edSchristos reinterpret_cast<>. The parenthesized cast syntax works both ways. */ 315*aedfa9edSchristos # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ 316*aedfa9edSchristos namespace GNULIB_NAMESPACE \ 317*aedfa9edSchristos { \ 318*aedfa9edSchristos static const struct _gl_ ## func ## _wrapper \ 319*aedfa9edSchristos { \ 320*aedfa9edSchristos typedef rettype (*type) parameters; \ 321*aedfa9edSchristos \ 322*aedfa9edSchristos inline operator type () const \ 323*aedfa9edSchristos { \ 324*aedfa9edSchristos return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ 325*aedfa9edSchristos } \ 326*aedfa9edSchristos } func = {}; \ 327*aedfa9edSchristos } \ 328*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 329*aedfa9edSchristos #else 330*aedfa9edSchristos # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ 331*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 332*aedfa9edSchristos #endif 333*aedfa9edSchristos 334*aedfa9edSchristos /* _GL_CXXALIASWARN (func); 335*aedfa9edSchristos causes a warning to be emitted when ::func is used but not when 336*aedfa9edSchristos GNULIB_NAMESPACE::func is used. func must be defined without overloaded 337*aedfa9edSchristos variants. */ 338*aedfa9edSchristos #if defined __cplusplus && defined GNULIB_NAMESPACE 339*aedfa9edSchristos # define _GL_CXXALIASWARN(func) \ 340*aedfa9edSchristos _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) 341*aedfa9edSchristos # define _GL_CXXALIASWARN_1(func,namespace) \ 342*aedfa9edSchristos _GL_CXXALIASWARN_2 (func, namespace) 343*aedfa9edSchristos /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, 344*aedfa9edSchristos we enable the warning only when not optimizing. */ 345*aedfa9edSchristos # if !__OPTIMIZE__ 346*aedfa9edSchristos # define _GL_CXXALIASWARN_2(func,namespace) \ 347*aedfa9edSchristos _GL_WARN_ON_USE (func, \ 348*aedfa9edSchristos "The symbol ::" #func " refers to the system function. " \ 349*aedfa9edSchristos "Use " #namespace "::" #func " instead.") 350*aedfa9edSchristos # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 351*aedfa9edSchristos # define _GL_CXXALIASWARN_2(func,namespace) \ 352*aedfa9edSchristos extern __typeof__ (func) func 353*aedfa9edSchristos # else 354*aedfa9edSchristos # define _GL_CXXALIASWARN_2(func,namespace) \ 355*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 356*aedfa9edSchristos # endif 357*aedfa9edSchristos #else 358*aedfa9edSchristos # define _GL_CXXALIASWARN(func) \ 359*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 360*aedfa9edSchristos #endif 361*aedfa9edSchristos 362*aedfa9edSchristos /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); 363*aedfa9edSchristos causes a warning to be emitted when the given overloaded variant of ::func 364*aedfa9edSchristos is used but not when GNULIB_NAMESPACE::func is used. */ 365*aedfa9edSchristos #if defined __cplusplus && defined GNULIB_NAMESPACE 366*aedfa9edSchristos # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ 367*aedfa9edSchristos _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ 368*aedfa9edSchristos GNULIB_NAMESPACE) 369*aedfa9edSchristos # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ 370*aedfa9edSchristos _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) 371*aedfa9edSchristos /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, 372*aedfa9edSchristos we enable the warning only when not optimizing. */ 373*aedfa9edSchristos # if !__OPTIMIZE__ 374*aedfa9edSchristos # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ 375*aedfa9edSchristos _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ 376*aedfa9edSchristos "The symbol ::" #func " refers to the system function. " \ 377*aedfa9edSchristos "Use " #namespace "::" #func " instead.") 378*aedfa9edSchristos # else 379*aedfa9edSchristos # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ 380*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 381*aedfa9edSchristos # endif 382*aedfa9edSchristos #else 383*aedfa9edSchristos # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ 384*aedfa9edSchristos _GL_EXTERN_C int _gl_cxxalias_dummy 385*aedfa9edSchristos #endif 386*aedfa9edSchristos 387*aedfa9edSchristos #endif /* _GL_CXXDEFS_H */ 388*aedfa9edSchristos 389*aedfa9edSchristos /* The definition of _GL_ARG_NONNULL is copied here. */ 390*aedfa9edSchristos /* A C macro for declaring that specific arguments must not be NULL. 391*aedfa9edSchristos Copyright (C) 2009-2020 Free Software Foundation, Inc. 392*aedfa9edSchristos 393*aedfa9edSchristos This program is free software: you can redistribute it and/or modify it 394*aedfa9edSchristos under the terms of the GNU General Public License as published 395*aedfa9edSchristos by the Free Software Foundation; either version 3 of the License, or 396*aedfa9edSchristos (at your option) any later version. 397*aedfa9edSchristos 398*aedfa9edSchristos This program is distributed in the hope that it will be useful, 399*aedfa9edSchristos but WITHOUT ANY WARRANTY; without even the implied warranty of 400*aedfa9edSchristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 401*aedfa9edSchristos General Public License for more details. 402*aedfa9edSchristos 403*aedfa9edSchristos You should have received a copy of the GNU General Public License 404*aedfa9edSchristos along with this program. If not, see <https://www.gnu.org/licenses/>. */ 405*aedfa9edSchristos 406*aedfa9edSchristos /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools 407*aedfa9edSchristos that the values passed as arguments n, ..., m must be non-NULL pointers. 408*aedfa9edSchristos n = 1 stands for the first argument, n = 2 for the second argument etc. */ 409*aedfa9edSchristos #ifndef _GL_ARG_NONNULL 410*aedfa9edSchristos # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 411*aedfa9edSchristos # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) 412*aedfa9edSchristos # else 413*aedfa9edSchristos # define _GL_ARG_NONNULL(params) 414*aedfa9edSchristos # endif 415*aedfa9edSchristos #endif 416*aedfa9edSchristos 417*aedfa9edSchristos /* The definition of _GL_WARN_ON_USE is copied here. */ 418*aedfa9edSchristos /* A C macro for emitting warnings if a function is used. 419*aedfa9edSchristos Copyright (C) 2010-2020 Free Software Foundation, Inc. 420*aedfa9edSchristos 421*aedfa9edSchristos This program is free software: you can redistribute it and/or modify it 422*aedfa9edSchristos under the terms of the GNU General Public License as published 423*aedfa9edSchristos by the Free Software Foundation; either version 3 of the License, or 424*aedfa9edSchristos (at your option) any later version. 425*aedfa9edSchristos 426*aedfa9edSchristos This program is distributed in the hope that it will be useful, 427*aedfa9edSchristos but WITHOUT ANY WARRANTY; without even the implied warranty of 428*aedfa9edSchristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 429*aedfa9edSchristos General Public License for more details. 430*aedfa9edSchristos 431*aedfa9edSchristos You should have received a copy of the GNU General Public License 432*aedfa9edSchristos along with this program. If not, see <https://www.gnu.org/licenses/>. */ 433*aedfa9edSchristos 434*aedfa9edSchristos /* _GL_WARN_ON_USE (function, "literal string") issues a declaration 435*aedfa9edSchristos for FUNCTION which will then trigger a compiler warning containing 436*aedfa9edSchristos the text of "literal string" anywhere that function is called, if 437*aedfa9edSchristos supported by the compiler. If the compiler does not support this 438*aedfa9edSchristos feature, the macro expands to an unused extern declaration. 439*aedfa9edSchristos 440*aedfa9edSchristos _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the 441*aedfa9edSchristos attribute used in _GL_WARN_ON_USE. If the compiler does not support 442*aedfa9edSchristos this feature, it expands to empty. 443*aedfa9edSchristos 444*aedfa9edSchristos These macros are useful for marking a function as a potential 445*aedfa9edSchristos portability trap, with the intent that "literal string" include 446*aedfa9edSchristos instructions on the replacement function that should be used 447*aedfa9edSchristos instead. 448*aedfa9edSchristos _GL_WARN_ON_USE is for functions with 'extern' linkage. 449*aedfa9edSchristos _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' 450*aedfa9edSchristos linkage. 451*aedfa9edSchristos 452*aedfa9edSchristos However, one of the reasons that a function is a portability trap is 453*aedfa9edSchristos if it has the wrong signature. Declaring FUNCTION with a different 454*aedfa9edSchristos signature in C is a compilation error, so this macro must use the 455*aedfa9edSchristos same type as any existing declaration so that programs that avoid 456*aedfa9edSchristos the problematic FUNCTION do not fail to compile merely because they 457*aedfa9edSchristos included a header that poisoned the function. But this implies that 458*aedfa9edSchristos _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already 459*aedfa9edSchristos have a declaration. Use of this macro implies that there must not 460*aedfa9edSchristos be any other macro hiding the declaration of FUNCTION; but 461*aedfa9edSchristos undefining FUNCTION first is part of the poisoning process anyway 462*aedfa9edSchristos (although for symbols that are provided only via a macro, the result 463*aedfa9edSchristos is a compilation error rather than a warning containing 464*aedfa9edSchristos "literal string"). Also note that in C++, it is only safe to use if 465*aedfa9edSchristos FUNCTION has no overloads. 466*aedfa9edSchristos 467*aedfa9edSchristos For an example, it is possible to poison 'getline' by: 468*aedfa9edSchristos - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], 469*aedfa9edSchristos [getline]) in configure.ac, which potentially defines 470*aedfa9edSchristos HAVE_RAW_DECL_GETLINE 471*aedfa9edSchristos - adding this code to a header that wraps the system <stdio.h>: 472*aedfa9edSchristos #undef getline 473*aedfa9edSchristos #if HAVE_RAW_DECL_GETLINE 474*aedfa9edSchristos _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" 475*aedfa9edSchristos "not universally present; use the gnulib module getline"); 476*aedfa9edSchristos #endif 477*aedfa9edSchristos 478*aedfa9edSchristos It is not possible to directly poison global variables. But it is 479*aedfa9edSchristos possible to write a wrapper accessor function, and poison that 480*aedfa9edSchristos (less common usage, like &environ, will cause a compilation error 481*aedfa9edSchristos rather than issue the nice warning, but the end result of informing 482*aedfa9edSchristos the developer about their portability problem is still achieved): 483*aedfa9edSchristos #if HAVE_RAW_DECL_ENVIRON 484*aedfa9edSchristos static char *** 485*aedfa9edSchristos rpl_environ (void) { return &environ; } 486*aedfa9edSchristos _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); 487*aedfa9edSchristos # undef environ 488*aedfa9edSchristos # define environ (*rpl_environ ()) 489*aedfa9edSchristos #endif 490*aedfa9edSchristos or better (avoiding contradictory use of 'static' and 'extern'): 491*aedfa9edSchristos #if HAVE_RAW_DECL_ENVIRON 492*aedfa9edSchristos static char *** 493*aedfa9edSchristos _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") 494*aedfa9edSchristos rpl_environ (void) { return &environ; } 495*aedfa9edSchristos # undef environ 496*aedfa9edSchristos # define environ (*rpl_environ ()) 497*aedfa9edSchristos #endif 498*aedfa9edSchristos */ 499*aedfa9edSchristos #ifndef _GL_WARN_ON_USE 500*aedfa9edSchristos 501*aedfa9edSchristos # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) 502*aedfa9edSchristos /* A compiler attribute is available in gcc versions 4.3.0 and later. */ 503*aedfa9edSchristos # define _GL_WARN_ON_USE(function, message) \ 504*aedfa9edSchristos extern __typeof__ (function) function __attribute__ ((__warning__ (message))) 505*aedfa9edSchristos # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ 506*aedfa9edSchristos __attribute__ ((__warning__ (message))) 507*aedfa9edSchristos # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 508*aedfa9edSchristos /* Verify the existence of the function. */ 509*aedfa9edSchristos # define _GL_WARN_ON_USE(function, message) \ 510*aedfa9edSchristos extern __typeof__ (function) function 511*aedfa9edSchristos # define _GL_WARN_ON_USE_ATTRIBUTE(message) 512*aedfa9edSchristos # else /* Unsupported. */ 513*aedfa9edSchristos # define _GL_WARN_ON_USE(function, message) \ 514*aedfa9edSchristos _GL_WARN_EXTERN_C int _gl_warn_on_use 515*aedfa9edSchristos # define _GL_WARN_ON_USE_ATTRIBUTE(message) 516*aedfa9edSchristos # endif 517*aedfa9edSchristos #endif 518*aedfa9edSchristos 519*aedfa9edSchristos /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") 520*aedfa9edSchristos is like _GL_WARN_ON_USE (function, "string"), except that in C++ mode the 521*aedfa9edSchristos function is declared with the given prototype, consisting of return type, 522*aedfa9edSchristos parameters, and attributes. 523*aedfa9edSchristos This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does 524*aedfa9edSchristos not work in this case. */ 525*aedfa9edSchristos #ifndef _GL_WARN_ON_USE_CXX 526*aedfa9edSchristos # if !defined __cplusplus 527*aedfa9edSchristos # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ 528*aedfa9edSchristos _GL_WARN_ON_USE (function, msg) 529*aedfa9edSchristos # else 530*aedfa9edSchristos # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) 531*aedfa9edSchristos # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ 532*aedfa9edSchristos extern rettype function parameters_and_attributes \ 533*aedfa9edSchristos __attribute__ ((__warning__ (msg))) 534*aedfa9edSchristos # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 535*aedfa9edSchristos /* Verify the existence of the function. */ 536*aedfa9edSchristos # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ 537*aedfa9edSchristos extern rettype function parameters_and_attributes 538*aedfa9edSchristos # else /* Unsupported. */ 539*aedfa9edSchristos # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ 540*aedfa9edSchristos _GL_WARN_EXTERN_C int _gl_warn_on_use 541*aedfa9edSchristos # endif 542*aedfa9edSchristos # endif 543*aedfa9edSchristos #endif 544*aedfa9edSchristos 545*aedfa9edSchristos /* _GL_WARN_EXTERN_C declaration; 546*aedfa9edSchristos performs the declaration with C linkage. */ 547*aedfa9edSchristos #ifndef _GL_WARN_EXTERN_C 548*aedfa9edSchristos # if defined __cplusplus 549*aedfa9edSchristos # define _GL_WARN_EXTERN_C extern "C" 550*aedfa9edSchristos # else 551*aedfa9edSchristos # define _GL_WARN_EXTERN_C extern 552*aedfa9edSchristos # endif 553*aedfa9edSchristos #endif 554*aedfa9edSchristos 555*aedfa9edSchristos /* On AIX, sig_atomic_t already includes volatile. C99 requires that 556*aedfa9edSchristos 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. 557*aedfa9edSchristos Hence, redefine this to a non-volatile type as needed. */ 558*aedfa9edSchristos #if ! 1 559*aedfa9edSchristos # if !GNULIB_defined_sig_atomic_t 560*aedfa9edSchristos typedef int rpl_sig_atomic_t; 561*aedfa9edSchristos # undef sig_atomic_t 562*aedfa9edSchristos # define sig_atomic_t rpl_sig_atomic_t 563*aedfa9edSchristos # define GNULIB_defined_sig_atomic_t 1 564*aedfa9edSchristos # endif 565*aedfa9edSchristos #endif 566*aedfa9edSchristos 567*aedfa9edSchristos /* A set or mask of signals. */ 568*aedfa9edSchristos #if !1 569*aedfa9edSchristos # if !GNULIB_defined_sigset_t 570*aedfa9edSchristos typedef unsigned int sigset_t; 571*aedfa9edSchristos # define GNULIB_defined_sigset_t 1 572*aedfa9edSchristos # endif 573*aedfa9edSchristos #endif 574*aedfa9edSchristos 575*aedfa9edSchristos /* Define sighandler_t, the type of signal handlers. A GNU extension. */ 576*aedfa9edSchristos #if !0 577*aedfa9edSchristos # ifdef __cplusplus 578*aedfa9edSchristos extern "C" { 579*aedfa9edSchristos # endif 580*aedfa9edSchristos # if !GNULIB_defined_sighandler_t 581*aedfa9edSchristos typedef void (*sighandler_t) (int); 582*aedfa9edSchristos # define GNULIB_defined_sighandler_t 1 583*aedfa9edSchristos # endif 584*aedfa9edSchristos # ifdef __cplusplus 585*aedfa9edSchristos } 586*aedfa9edSchristos # endif 587*aedfa9edSchristos #endif 588*aedfa9edSchristos 589*aedfa9edSchristos 590*aedfa9edSchristos #if 0 591*aedfa9edSchristos # ifndef SIGPIPE 592*aedfa9edSchristos /* Define SIGPIPE to a value that does not overlap with other signals. */ 593*aedfa9edSchristos # define SIGPIPE 13 594*aedfa9edSchristos # define GNULIB_defined_SIGPIPE 1 595*aedfa9edSchristos /* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', 596*aedfa9edSchristos 'write', 'stdio'. */ 597*aedfa9edSchristos # endif 598*aedfa9edSchristos #endif 599*aedfa9edSchristos 600*aedfa9edSchristos 601*aedfa9edSchristos /* Maximum signal number + 1. */ 602*aedfa9edSchristos #ifndef NSIG 603*aedfa9edSchristos # if defined __TANDEM 604*aedfa9edSchristos # define NSIG 32 605*aedfa9edSchristos # endif 606*aedfa9edSchristos #endif 607*aedfa9edSchristos 608*aedfa9edSchristos 609*aedfa9edSchristos #if 0 610*aedfa9edSchristos # if 0 611*aedfa9edSchristos # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 612*aedfa9edSchristos # undef pthread_sigmask 613*aedfa9edSchristos # define pthread_sigmask rpl_pthread_sigmask 614*aedfa9edSchristos # endif 615*aedfa9edSchristos _GL_FUNCDECL_RPL (pthread_sigmask, int, 616*aedfa9edSchristos (int how, 617*aedfa9edSchristos const sigset_t *restrict new_mask, 618*aedfa9edSchristos sigset_t *restrict old_mask)); 619*aedfa9edSchristos _GL_CXXALIAS_RPL (pthread_sigmask, int, 620*aedfa9edSchristos (int how, 621*aedfa9edSchristos const sigset_t *restrict new_mask, 622*aedfa9edSchristos sigset_t *restrict old_mask)); 623*aedfa9edSchristos # else 624*aedfa9edSchristos # if !(1 || defined pthread_sigmask) 625*aedfa9edSchristos _GL_FUNCDECL_SYS (pthread_sigmask, int, 626*aedfa9edSchristos (int how, 627*aedfa9edSchristos const sigset_t *restrict new_mask, 628*aedfa9edSchristos sigset_t *restrict old_mask)); 629*aedfa9edSchristos # endif 630*aedfa9edSchristos _GL_CXXALIAS_SYS (pthread_sigmask, int, 631*aedfa9edSchristos (int how, 632*aedfa9edSchristos const sigset_t *restrict new_mask, 633*aedfa9edSchristos sigset_t *restrict old_mask)); 634*aedfa9edSchristos # endif 635*aedfa9edSchristos # if __GLIBC__ >= 2 636*aedfa9edSchristos _GL_CXXALIASWARN (pthread_sigmask); 637*aedfa9edSchristos # endif 638*aedfa9edSchristos #elif defined GNULIB_POSIXCHECK 639*aedfa9edSchristos # undef pthread_sigmask 640*aedfa9edSchristos # if HAVE_RAW_DECL_PTHREAD_SIGMASK 641*aedfa9edSchristos _GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - " 642*aedfa9edSchristos "use gnulib module pthread_sigmask for portability"); 643*aedfa9edSchristos # endif 644*aedfa9edSchristos #endif 645*aedfa9edSchristos 646*aedfa9edSchristos 647*aedfa9edSchristos #if 0 648*aedfa9edSchristos # if 0 649*aedfa9edSchristos # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 650*aedfa9edSchristos # undef raise 651*aedfa9edSchristos # define raise rpl_raise 652*aedfa9edSchristos # endif 653*aedfa9edSchristos _GL_FUNCDECL_RPL (raise, int, (int sig)); 654*aedfa9edSchristos _GL_CXXALIAS_RPL (raise, int, (int sig)); 655*aedfa9edSchristos # else 656*aedfa9edSchristos # if !1 657*aedfa9edSchristos _GL_FUNCDECL_SYS (raise, int, (int sig)); 658*aedfa9edSchristos # endif 659*aedfa9edSchristos _GL_CXXALIAS_SYS (raise, int, (int sig)); 660*aedfa9edSchristos # endif 661*aedfa9edSchristos # if __GLIBC__ >= 2 662*aedfa9edSchristos _GL_CXXALIASWARN (raise); 663*aedfa9edSchristos # endif 664*aedfa9edSchristos #elif defined GNULIB_POSIXCHECK 665*aedfa9edSchristos # undef raise 666*aedfa9edSchristos /* Assume raise is always declared. */ 667*aedfa9edSchristos _GL_WARN_ON_USE (raise, "raise can crash on native Windows - " 668*aedfa9edSchristos "use gnulib module raise for portability"); 669*aedfa9edSchristos #endif 670*aedfa9edSchristos 671*aedfa9edSchristos 672*aedfa9edSchristos #if 0 673*aedfa9edSchristos # if !1 674*aedfa9edSchristos 675*aedfa9edSchristos # ifndef GNULIB_defined_signal_blocking 676*aedfa9edSchristos # define GNULIB_defined_signal_blocking 1 677*aedfa9edSchristos # endif 678*aedfa9edSchristos 679*aedfa9edSchristos /* Maximum signal number + 1. */ 680*aedfa9edSchristos # ifndef NSIG 681*aedfa9edSchristos # define NSIG 32 682*aedfa9edSchristos # endif 683*aedfa9edSchristos 684*aedfa9edSchristos /* This code supports only 32 signals. */ 685*aedfa9edSchristos # if !GNULIB_defined_verify_NSIG_constraint 686*aedfa9edSchristos typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1]; 687*aedfa9edSchristos # define GNULIB_defined_verify_NSIG_constraint 1 688*aedfa9edSchristos # endif 689*aedfa9edSchristos 690*aedfa9edSchristos # endif 691*aedfa9edSchristos 692*aedfa9edSchristos /* When also using extern inline, suppress the use of static inline in 693*aedfa9edSchristos standard headers of problematic Apple configurations, as Libc at 694*aedfa9edSchristos least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., 695*aedfa9edSchristos <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. 696*aedfa9edSchristos Perhaps Apple will fix this some day. */ 697*aedfa9edSchristos #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ 698*aedfa9edSchristos && (defined __i386__ || defined __x86_64__)) 699*aedfa9edSchristos # undef sigaddset 700*aedfa9edSchristos # undef sigdelset 701*aedfa9edSchristos # undef sigemptyset 702*aedfa9edSchristos # undef sigfillset 703*aedfa9edSchristos # undef sigismember 704*aedfa9edSchristos #endif 705*aedfa9edSchristos 706*aedfa9edSchristos /* Test whether a given signal is contained in a signal set. */ 707*aedfa9edSchristos # if 1 708*aedfa9edSchristos /* This function is defined as a macro on Mac OS X. */ 709*aedfa9edSchristos # if defined __cplusplus && defined GNULIB_NAMESPACE 710*aedfa9edSchristos # undef sigismember 711*aedfa9edSchristos # endif 712*aedfa9edSchristos # else 713*aedfa9edSchristos _GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) 714*aedfa9edSchristos _GL_ARG_NONNULL ((1))); 715*aedfa9edSchristos # endif 716*aedfa9edSchristos _GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig)); 717*aedfa9edSchristos _GL_CXXALIASWARN (sigismember); 718*aedfa9edSchristos 719*aedfa9edSchristos /* Initialize a signal set to the empty set. */ 720*aedfa9edSchristos # if 1 721*aedfa9edSchristos /* This function is defined as a macro on Mac OS X. */ 722*aedfa9edSchristos # if defined __cplusplus && defined GNULIB_NAMESPACE 723*aedfa9edSchristos # undef sigemptyset 724*aedfa9edSchristos # endif 725*aedfa9edSchristos # else 726*aedfa9edSchristos _GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); 727*aedfa9edSchristos # endif 728*aedfa9edSchristos _GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set)); 729*aedfa9edSchristos _GL_CXXALIASWARN (sigemptyset); 730*aedfa9edSchristos 731*aedfa9edSchristos /* Add a signal to a signal set. */ 732*aedfa9edSchristos # if 1 733*aedfa9edSchristos /* This function is defined as a macro on Mac OS X. */ 734*aedfa9edSchristos # if defined __cplusplus && defined GNULIB_NAMESPACE 735*aedfa9edSchristos # undef sigaddset 736*aedfa9edSchristos # endif 737*aedfa9edSchristos # else 738*aedfa9edSchristos _GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig) 739*aedfa9edSchristos _GL_ARG_NONNULL ((1))); 740*aedfa9edSchristos # endif 741*aedfa9edSchristos _GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig)); 742*aedfa9edSchristos _GL_CXXALIASWARN (sigaddset); 743*aedfa9edSchristos 744*aedfa9edSchristos /* Remove a signal from a signal set. */ 745*aedfa9edSchristos # if 1 746*aedfa9edSchristos /* This function is defined as a macro on Mac OS X. */ 747*aedfa9edSchristos # if defined __cplusplus && defined GNULIB_NAMESPACE 748*aedfa9edSchristos # undef sigdelset 749*aedfa9edSchristos # endif 750*aedfa9edSchristos # else 751*aedfa9edSchristos _GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig) 752*aedfa9edSchristos _GL_ARG_NONNULL ((1))); 753*aedfa9edSchristos # endif 754*aedfa9edSchristos _GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig)); 755*aedfa9edSchristos _GL_CXXALIASWARN (sigdelset); 756*aedfa9edSchristos 757*aedfa9edSchristos /* Fill a signal set with all possible signals. */ 758*aedfa9edSchristos # if 1 759*aedfa9edSchristos /* This function is defined as a macro on Mac OS X. */ 760*aedfa9edSchristos # if defined __cplusplus && defined GNULIB_NAMESPACE 761*aedfa9edSchristos # undef sigfillset 762*aedfa9edSchristos # endif 763*aedfa9edSchristos # else 764*aedfa9edSchristos _GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); 765*aedfa9edSchristos # endif 766*aedfa9edSchristos _GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set)); 767*aedfa9edSchristos _GL_CXXALIASWARN (sigfillset); 768*aedfa9edSchristos 769*aedfa9edSchristos /* Return the set of those blocked signals that are pending. */ 770*aedfa9edSchristos # if !1 771*aedfa9edSchristos _GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); 772*aedfa9edSchristos # endif 773*aedfa9edSchristos _GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set)); 774*aedfa9edSchristos _GL_CXXALIASWARN (sigpending); 775*aedfa9edSchristos 776*aedfa9edSchristos /* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. 777*aedfa9edSchristos Then, if SET is not NULL, affect the current set of blocked signals by 778*aedfa9edSchristos combining it with *SET as indicated in OPERATION. 779*aedfa9edSchristos In this implementation, you are not allowed to change a signal handler 780*aedfa9edSchristos while the signal is blocked. */ 781*aedfa9edSchristos # if !1 782*aedfa9edSchristos # define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ 783*aedfa9edSchristos # define SIG_SETMASK 1 /* blocked_set = *set; */ 784*aedfa9edSchristos # define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ 785*aedfa9edSchristos _GL_FUNCDECL_SYS (sigprocmask, int, 786*aedfa9edSchristos (int operation, 787*aedfa9edSchristos const sigset_t *restrict set, 788*aedfa9edSchristos sigset_t *restrict old_set)); 789*aedfa9edSchristos # endif 790*aedfa9edSchristos _GL_CXXALIAS_SYS (sigprocmask, int, 791*aedfa9edSchristos (int operation, 792*aedfa9edSchristos const sigset_t *restrict set, 793*aedfa9edSchristos sigset_t *restrict old_set)); 794*aedfa9edSchristos _GL_CXXALIASWARN (sigprocmask); 795*aedfa9edSchristos 796*aedfa9edSchristos /* Install the handler FUNC for signal SIG, and return the previous 797*aedfa9edSchristos handler. */ 798*aedfa9edSchristos # ifdef __cplusplus 799*aedfa9edSchristos extern "C" { 800*aedfa9edSchristos # endif 801*aedfa9edSchristos # if !GNULIB_defined_function_taking_int_returning_void_t 802*aedfa9edSchristos typedef void (*_gl_function_taking_int_returning_void_t) (int); 803*aedfa9edSchristos # define GNULIB_defined_function_taking_int_returning_void_t 1 804*aedfa9edSchristos # endif 805*aedfa9edSchristos # ifdef __cplusplus 806*aedfa9edSchristos } 807*aedfa9edSchristos # endif 808*aedfa9edSchristos # if !1 809*aedfa9edSchristos # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 810*aedfa9edSchristos # define signal rpl_signal 811*aedfa9edSchristos # endif 812*aedfa9edSchristos _GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t, 813*aedfa9edSchristos (int sig, _gl_function_taking_int_returning_void_t func)); 814*aedfa9edSchristos _GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t, 815*aedfa9edSchristos (int sig, _gl_function_taking_int_returning_void_t func)); 816*aedfa9edSchristos # else 817*aedfa9edSchristos /* On OpenBSD, the declaration of 'signal' may not be present at this point, 818*aedfa9edSchristos because it occurs in <sys/signal.h>, not <signal.h> directly. */ 819*aedfa9edSchristos # if defined __OpenBSD__ 820*aedfa9edSchristos _GL_FUNCDECL_SYS (signal, _gl_function_taking_int_returning_void_t, 821*aedfa9edSchristos (int sig, _gl_function_taking_int_returning_void_t func)); 822*aedfa9edSchristos # endif 823*aedfa9edSchristos _GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t, 824*aedfa9edSchristos (int sig, _gl_function_taking_int_returning_void_t func)); 825*aedfa9edSchristos # endif 826*aedfa9edSchristos # if __GLIBC__ >= 2 827*aedfa9edSchristos _GL_CXXALIASWARN (signal); 828*aedfa9edSchristos # endif 829*aedfa9edSchristos 830*aedfa9edSchristos # if !1 && GNULIB_defined_SIGPIPE 831*aedfa9edSchristos /* Raise signal SIGPIPE. */ 832*aedfa9edSchristos _GL_EXTERN_C int _gl_raise_SIGPIPE (void); 833*aedfa9edSchristos # endif 834*aedfa9edSchristos 835*aedfa9edSchristos #elif defined GNULIB_POSIXCHECK 836*aedfa9edSchristos # undef sigaddset 837*aedfa9edSchristos # if HAVE_RAW_DECL_SIGADDSET 838*aedfa9edSchristos _GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - " 839*aedfa9edSchristos "use the gnulib module sigprocmask for portability"); 840*aedfa9edSchristos # endif 841*aedfa9edSchristos # undef sigdelset 842*aedfa9edSchristos # if HAVE_RAW_DECL_SIGDELSET 843*aedfa9edSchristos _GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - " 844*aedfa9edSchristos "use the gnulib module sigprocmask for portability"); 845*aedfa9edSchristos # endif 846*aedfa9edSchristos # undef sigemptyset 847*aedfa9edSchristos # if HAVE_RAW_DECL_SIGEMPTYSET 848*aedfa9edSchristos _GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - " 849*aedfa9edSchristos "use the gnulib module sigprocmask for portability"); 850*aedfa9edSchristos # endif 851*aedfa9edSchristos # undef sigfillset 852*aedfa9edSchristos # if HAVE_RAW_DECL_SIGFILLSET 853*aedfa9edSchristos _GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - " 854*aedfa9edSchristos "use the gnulib module sigprocmask for portability"); 855*aedfa9edSchristos # endif 856*aedfa9edSchristos # undef sigismember 857*aedfa9edSchristos # if HAVE_RAW_DECL_SIGISMEMBER 858*aedfa9edSchristos _GL_WARN_ON_USE (sigismember, "sigismember is unportable - " 859*aedfa9edSchristos "use the gnulib module sigprocmask for portability"); 860*aedfa9edSchristos # endif 861*aedfa9edSchristos # undef sigpending 862*aedfa9edSchristos # if HAVE_RAW_DECL_SIGPENDING 863*aedfa9edSchristos _GL_WARN_ON_USE (sigpending, "sigpending is unportable - " 864*aedfa9edSchristos "use the gnulib module sigprocmask for portability"); 865*aedfa9edSchristos # endif 866*aedfa9edSchristos # undef sigprocmask 867*aedfa9edSchristos # if HAVE_RAW_DECL_SIGPROCMASK 868*aedfa9edSchristos _GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - " 869*aedfa9edSchristos "use the gnulib module sigprocmask for portability"); 870*aedfa9edSchristos # endif 871*aedfa9edSchristos #endif /* 0 */ 872*aedfa9edSchristos 873*aedfa9edSchristos 874*aedfa9edSchristos #if 0 875*aedfa9edSchristos # if !1 876*aedfa9edSchristos 877*aedfa9edSchristos # if !1 878*aedfa9edSchristos 879*aedfa9edSchristos # if !GNULIB_defined_siginfo_types 880*aedfa9edSchristos 881*aedfa9edSchristos /* Present to allow compilation, but unsupported by gnulib. */ 882*aedfa9edSchristos union sigval 883*aedfa9edSchristos { 884*aedfa9edSchristos int sival_int; 885*aedfa9edSchristos void *sival_ptr; 886*aedfa9edSchristos }; 887*aedfa9edSchristos 888*aedfa9edSchristos /* Present to allow compilation, but unsupported by gnulib. */ 889*aedfa9edSchristos struct siginfo_t 890*aedfa9edSchristos { 891*aedfa9edSchristos int si_signo; 892*aedfa9edSchristos int si_code; 893*aedfa9edSchristos int si_errno; 894*aedfa9edSchristos pid_t si_pid; 895*aedfa9edSchristos uid_t si_uid; 896*aedfa9edSchristos void *si_addr; 897*aedfa9edSchristos int si_status; 898*aedfa9edSchristos long si_band; 899*aedfa9edSchristos union sigval si_value; 900*aedfa9edSchristos }; 901*aedfa9edSchristos typedef struct siginfo_t siginfo_t; 902*aedfa9edSchristos 903*aedfa9edSchristos # define GNULIB_defined_siginfo_types 1 904*aedfa9edSchristos # endif 905*aedfa9edSchristos 906*aedfa9edSchristos # endif /* !1 */ 907*aedfa9edSchristos 908*aedfa9edSchristos /* We assume that platforms which lack the sigaction() function also lack 909*aedfa9edSchristos the 'struct sigaction' type, and vice versa. */ 910*aedfa9edSchristos 911*aedfa9edSchristos # if !GNULIB_defined_struct_sigaction 912*aedfa9edSchristos 913*aedfa9edSchristos struct sigaction 914*aedfa9edSchristos { 915*aedfa9edSchristos union 916*aedfa9edSchristos { 917*aedfa9edSchristos void (*_sa_handler) (int); 918*aedfa9edSchristos /* Present to allow compilation, but unsupported by gnulib. POSIX 919*aedfa9edSchristos says that implementations may, but not must, make sa_sigaction 920*aedfa9edSchristos overlap with sa_handler, but we know of no implementation where 921*aedfa9edSchristos they do not overlap. */ 922*aedfa9edSchristos void (*_sa_sigaction) (int, siginfo_t *, void *); 923*aedfa9edSchristos } _sa_func; 924*aedfa9edSchristos sigset_t sa_mask; 925*aedfa9edSchristos /* Not all POSIX flags are supported. */ 926*aedfa9edSchristos int sa_flags; 927*aedfa9edSchristos }; 928*aedfa9edSchristos # define sa_handler _sa_func._sa_handler 929*aedfa9edSchristos # define sa_sigaction _sa_func._sa_sigaction 930*aedfa9edSchristos /* Unsupported flags are not present. */ 931*aedfa9edSchristos # define SA_RESETHAND 1 932*aedfa9edSchristos # define SA_NODEFER 2 933*aedfa9edSchristos # define SA_RESTART 4 934*aedfa9edSchristos 935*aedfa9edSchristos # define GNULIB_defined_struct_sigaction 1 936*aedfa9edSchristos # endif 937*aedfa9edSchristos 938*aedfa9edSchristos _GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict, 939*aedfa9edSchristos struct sigaction *restrict)); 940*aedfa9edSchristos 941*aedfa9edSchristos # elif !1 942*aedfa9edSchristos 943*aedfa9edSchristos # define sa_sigaction sa_handler 944*aedfa9edSchristos 945*aedfa9edSchristos # endif /* !1, !1 */ 946*aedfa9edSchristos 947*aedfa9edSchristos _GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict, 948*aedfa9edSchristos struct sigaction *restrict)); 949*aedfa9edSchristos _GL_CXXALIASWARN (sigaction); 950*aedfa9edSchristos 951*aedfa9edSchristos #elif defined GNULIB_POSIXCHECK 952*aedfa9edSchristos # undef sigaction 953*aedfa9edSchristos # if HAVE_RAW_DECL_SIGACTION 954*aedfa9edSchristos _GL_WARN_ON_USE (sigaction, "sigaction is unportable - " 955*aedfa9edSchristos "use the gnulib module sigaction for portability"); 956*aedfa9edSchristos # endif 957*aedfa9edSchristos #endif 958*aedfa9edSchristos 959*aedfa9edSchristos /* Some systems don't have SA_NODEFER. */ 960*aedfa9edSchristos #ifndef SA_NODEFER 961*aedfa9edSchristos # define SA_NODEFER 0 962*aedfa9edSchristos #endif 963*aedfa9edSchristos 964*aedfa9edSchristos 965*aedfa9edSchristos #endif /* _GL_SIGNAL_H */ 966*aedfa9edSchristos #endif /* _GL_SIGNAL_H */ 967*aedfa9edSchristos #endif 968