190075Sobrien/* This file is automatically generated. DO NOT EDIT! */ 290075Sobrien/* Generated from: NetBSD: mknative-gdb,v 1.16 2023/07/31 17:09:59 christos Exp */ 390075Sobrien/* Generated from: NetBSD: mknative.common,v 1.16 2018/04/15 15:13:37 christos Exp */ 490075Sobrien 590075Sobrien/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ 690075Sobrien/* A more-standard <time.h>. 790075Sobrien 890075Sobrien Copyright (C) 2007-2022 Free Software Foundation, Inc. 990075Sobrien 1090075Sobrien This file is free software: you can redistribute it and/or modify 1190075Sobrien it under the terms of the GNU Lesser General Public License as 1290075Sobrien published by the Free Software Foundation; either version 2.1 of the 1390075Sobrien License, or (at your option) any later version. 1490075Sobrien 1590075Sobrien This file is distributed in the hope that it will be useful, 1690075Sobrien but WITHOUT ANY WARRANTY; without even the implied warranty of 1790075Sobrien MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1890075Sobrien GNU Lesser General Public License for more details. 1990075Sobrien 2090075Sobrien You should have received a copy of the GNU Lesser General Public License 2190075Sobrien along with this program. If not, see <https://www.gnu.org/licenses/>. */ 2290075Sobrien 2390075Sobrien#if __GNUC__ >= 3 24117395Skan#pragma GCC system_header 25117395Skan#endif 26 27 28/* Don't get in the way of glibc when it includes time.h merely to 29 declare a few standard symbols, rather than to declare all the 30 symbols. (However, skip this for MinGW as it treats __need_time_t 31 incompatibly.) Also, Solaris 8 <time.h> eventually includes itself 32 recursively; if that is happening, just include the system <time.h> 33 without adding our own declarations. */ 34#if (((defined __need_time_t || defined __need_clock_t \ 35 || defined __need_timespec) \ 36 && !defined __MINGW32__) \ 37 || defined _GL_TIME_H) 38 39# include_next <time.h> 40 41#else 42 43# define _GL_TIME_H 44 45/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, 46 localtime_r only if <unistd.h> or <pthread.h> has been included before. */ 47# if defined __MINGW32__ 48# include <unistd.h> 49# endif 50 51# include_next <time.h> 52 53/* NetBSD 5.0 mis-defines NULL. */ 54# include <stddef.h> 55 56/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ 57/* C++ compatible function declaration macros. 58 Copyright (C) 2010-2022 Free Software Foundation, Inc. 59 60 This program is free software: you can redistribute it and/or modify it 61 under the terms of the GNU Lesser General Public License as published 62 by the Free Software Foundation; either version 2 of the License, or 63 (at your option) any later version. 64 65 This program is distributed in the hope that it will be useful, 66 but WITHOUT ANY WARRANTY; without even the implied warranty of 67 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 68 Lesser General Public License for more details. 69 70 You should have received a copy of the GNU Lesser General Public License 71 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 72 73#ifndef _GL_CXXDEFS_H 74#define _GL_CXXDEFS_H 75 76/* Begin/end the GNULIB_NAMESPACE namespace. */ 77#if defined __cplusplus && defined GNULIB_NAMESPACE 78# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { 79# define _GL_END_NAMESPACE } 80#else 81# define _GL_BEGIN_NAMESPACE 82# define _GL_END_NAMESPACE 83#endif 84 85/* The three most frequent use cases of these macros are: 86 87 * For providing a substitute for a function that is missing on some 88 platforms, but is declared and works fine on the platforms on which 89 it exists: 90 91 #if @GNULIB_FOO@ 92 # if !@HAVE_FOO@ 93 _GL_FUNCDECL_SYS (foo, ...); 94 # endif 95 _GL_CXXALIAS_SYS (foo, ...); 96 _GL_CXXALIASWARN (foo); 97 #elif defined GNULIB_POSIXCHECK 98 ... 99 #endif 100 101 * For providing a replacement for a function that exists on all platforms, 102 but is broken/insufficient and needs to be replaced on some platforms: 103 104 #if @GNULIB_FOO@ 105 # if @REPLACE_FOO@ 106 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 107 # undef foo 108 # define foo rpl_foo 109 # endif 110 _GL_FUNCDECL_RPL (foo, ...); 111 _GL_CXXALIAS_RPL (foo, ...); 112 # else 113 _GL_CXXALIAS_SYS (foo, ...); 114 # endif 115 _GL_CXXALIASWARN (foo); 116 #elif defined GNULIB_POSIXCHECK 117 ... 118 #endif 119 120 * For providing a replacement for a function that exists on some platforms 121 but is broken/insufficient and needs to be replaced on some of them and 122 is additionally either missing or undeclared on some other platforms: 123 124 #if @GNULIB_FOO@ 125 # if @REPLACE_FOO@ 126 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 127 # undef foo 128 # define foo rpl_foo 129 # endif 130 _GL_FUNCDECL_RPL (foo, ...); 131 _GL_CXXALIAS_RPL (foo, ...); 132 # else 133 # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ 134 _GL_FUNCDECL_SYS (foo, ...); 135 # endif 136 _GL_CXXALIAS_SYS (foo, ...); 137 # endif 138 _GL_CXXALIASWARN (foo); 139 #elif defined GNULIB_POSIXCHECK 140 ... 141 #endif 142*/ 143 144/* _GL_EXTERN_C declaration; 145 performs the declaration with C linkage. */ 146#if defined __cplusplus 147# define _GL_EXTERN_C extern "C" 148#else 149# define _GL_EXTERN_C extern 150#endif 151 152/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); 153 declares a replacement function, named rpl_func, with the given prototype, 154 consisting of return type, parameters, and attributes. 155 Example: 156 _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) 157 _GL_ARG_NONNULL ((1))); 158 */ 159#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ 160 _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) 161#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ 162 _GL_EXTERN_C rettype rpl_func parameters_and_attributes 163 164/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); 165 declares the system function, named func, with the given prototype, 166 consisting of return type, parameters, and attributes. 167 Example: 168 _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) 169 _GL_ARG_NONNULL ((1))); 170 */ 171#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ 172 _GL_EXTERN_C rettype func parameters_and_attributes 173 174/* _GL_CXXALIAS_RPL (func, rettype, parameters); 175 declares a C++ alias called GNULIB_NAMESPACE::func 176 that redirects to rpl_func, if GNULIB_NAMESPACE is defined. 177 Example: 178 _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); 179 180 Wrapping rpl_func in an object with an inline conversion operator 181 avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is 182 actually used in the program. */ 183#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ 184 _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) 185#if defined __cplusplus && defined GNULIB_NAMESPACE 186# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ 187 namespace GNULIB_NAMESPACE \ 188 { \ 189 static const struct _gl_ ## func ## _wrapper \ 190 { \ 191 typedef rettype (*type) parameters; \ 192 \ 193 inline operator type () const \ 194 { \ 195 return ::rpl_func; \ 196 } \ 197 } func = {}; \ 198 } \ 199 _GL_EXTERN_C int _gl_cxxalias_dummy 200#else 201# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ 202 _GL_EXTERN_C int _gl_cxxalias_dummy 203#endif 204 205/* _GL_CXXALIAS_MDA (func, rettype, parameters); 206 is to be used when func is a Microsoft deprecated alias, on native Windows. 207 It declares a C++ alias called GNULIB_NAMESPACE::func 208 that redirects to _func, if GNULIB_NAMESPACE is defined. 209 Example: 210 _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); 211 */ 212#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ 213 _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) 214 215/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); 216 is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); 217 except that the C function rpl_func may have a slightly different 218 declaration. A cast is used to silence the "invalid conversion" error 219 that would otherwise occur. */ 220#if defined __cplusplus && defined GNULIB_NAMESPACE 221# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ 222 namespace GNULIB_NAMESPACE \ 223 { \ 224 static const struct _gl_ ## func ## _wrapper \ 225 { \ 226 typedef rettype (*type) parameters; \ 227 \ 228 inline operator type () const \ 229 { \ 230 return reinterpret_cast<type>(::rpl_func); \ 231 } \ 232 } func = {}; \ 233 } \ 234 _GL_EXTERN_C int _gl_cxxalias_dummy 235#else 236# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ 237 _GL_EXTERN_C int _gl_cxxalias_dummy 238#endif 239 240/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); 241 is like _GL_CXXALIAS_MDA (func, rettype, parameters); 242 except that the C function func may have a slightly different declaration. 243 A cast is used to silence the "invalid conversion" error that would 244 otherwise occur. */ 245#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ 246 _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) 247 248/* _GL_CXXALIAS_SYS (func, rettype, parameters); 249 declares a C++ alias called GNULIB_NAMESPACE::func 250 that redirects to the system provided function func, if GNULIB_NAMESPACE 251 is defined. 252 Example: 253 _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); 254 255 Wrapping func in an object with an inline conversion operator 256 avoids a reference to func unless GNULIB_NAMESPACE::func is 257 actually used in the program. */ 258#if defined __cplusplus && defined GNULIB_NAMESPACE 259# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ 260 namespace GNULIB_NAMESPACE \ 261 { \ 262 static const struct _gl_ ## func ## _wrapper \ 263 { \ 264 typedef rettype (*type) parameters; \ 265 \ 266 inline operator type () const \ 267 { \ 268 return ::func; \ 269 } \ 270 } func = {}; \ 271 } \ 272 _GL_EXTERN_C int _gl_cxxalias_dummy 273#else 274# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ 275 _GL_EXTERN_C int _gl_cxxalias_dummy 276#endif 277 278/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); 279 is like _GL_CXXALIAS_SYS (func, rettype, parameters); 280 except that the C function func may have a slightly different declaration. 281 A cast is used to silence the "invalid conversion" error that would 282 otherwise occur. */ 283#if defined __cplusplus && defined GNULIB_NAMESPACE 284# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ 285 namespace GNULIB_NAMESPACE \ 286 { \ 287 static const struct _gl_ ## func ## _wrapper \ 288 { \ 289 typedef rettype (*type) parameters; \ 290 \ 291 inline operator type () const \ 292 { \ 293 return reinterpret_cast<type>(::func); \ 294 } \ 295 } func = {}; \ 296 } \ 297 _GL_EXTERN_C int _gl_cxxalias_dummy 298#else 299# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ 300 _GL_EXTERN_C int _gl_cxxalias_dummy 301#endif 302 303/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); 304 is like _GL_CXXALIAS_SYS (func, rettype, parameters); 305 except that the C function is picked among a set of overloaded functions, 306 namely the one with rettype2 and parameters2. Two consecutive casts 307 are used to silence the "cannot find a match" and "invalid conversion" 308 errors that would otherwise occur. */ 309#if defined __cplusplus && defined GNULIB_NAMESPACE 310 /* The outer cast must be a reinterpret_cast. 311 The inner cast: When the function is defined as a set of overloaded 312 functions, it works as a static_cast<>, choosing the designated variant. 313 When the function is defined as a single variant, it works as a 314 reinterpret_cast<>. The parenthesized cast syntax works both ways. */ 315# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ 316 namespace GNULIB_NAMESPACE \ 317 { \ 318 static const struct _gl_ ## func ## _wrapper \ 319 { \ 320 typedef rettype (*type) parameters; \ 321 \ 322 inline operator type () const \ 323 { \ 324 return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ 325 } \ 326 } func = {}; \ 327 } \ 328 _GL_EXTERN_C int _gl_cxxalias_dummy 329#else 330# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ 331 _GL_EXTERN_C int _gl_cxxalias_dummy 332#endif 333 334/* _GL_CXXALIASWARN (func); 335 causes a warning to be emitted when ::func is used but not when 336 GNULIB_NAMESPACE::func is used. func must be defined without overloaded 337 variants. */ 338#if defined __cplusplus && defined GNULIB_NAMESPACE 339# define _GL_CXXALIASWARN(func) \ 340 _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) 341# define _GL_CXXALIASWARN_1(func,namespace) \ 342 _GL_CXXALIASWARN_2 (func, namespace) 343/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, 344 we enable the warning only when not optimizing. */ 345# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) 346# define _GL_CXXALIASWARN_2(func,namespace) \ 347 _GL_WARN_ON_USE (func, \ 348 "The symbol ::" #func " refers to the system function. " \ 349 "Use " #namespace "::" #func " instead.") 350# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 351# define _GL_CXXALIASWARN_2(func,namespace) \ 352 extern __typeof__ (func) func 353# else 354# define _GL_CXXALIASWARN_2(func,namespace) \ 355 _GL_EXTERN_C int _gl_cxxalias_dummy 356# endif 357#else 358# define _GL_CXXALIASWARN(func) \ 359 _GL_EXTERN_C int _gl_cxxalias_dummy 360#endif 361 362/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); 363 causes a warning to be emitted when the given overloaded variant of ::func 364 is used but not when GNULIB_NAMESPACE::func is used. */ 365#if defined __cplusplus && defined GNULIB_NAMESPACE 366# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ 367 _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ 368 GNULIB_NAMESPACE) 369# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ 370 _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) 371/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, 372 we enable the warning only when not optimizing. */ 373# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) 374# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ 375 _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ 376 "The symbol ::" #func " refers to the system function. " \ 377 "Use " #namespace "::" #func " instead.") 378# else 379# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ 380 _GL_EXTERN_C int _gl_cxxalias_dummy 381# endif 382#else 383# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ 384 _GL_EXTERN_C int _gl_cxxalias_dummy 385#endif 386 387#endif /* _GL_CXXDEFS_H */ 388 389/* The definition of _GL_ARG_NONNULL is copied here. */ 390/* A C macro for declaring that specific arguments must not be NULL. 391 Copyright (C) 2009-2022 Free Software Foundation, Inc. 392 393 This program is free software: you can redistribute it and/or modify it 394 under the terms of the GNU Lesser General Public License as published 395 by the Free Software Foundation; either version 2 of the License, or 396 (at your option) any later version. 397 398 This program is distributed in the hope that it will be useful, 399 but WITHOUT ANY WARRANTY; without even the implied warranty of 400 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 401 Lesser General Public License for more details. 402 403 You should have received a copy of the GNU Lesser General Public License 404 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 405 406/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools 407 that the values passed as arguments n, ..., m must be non-NULL pointers. 408 n = 1 stands for the first argument, n = 2 for the second argument etc. */ 409#ifndef _GL_ARG_NONNULL 410# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ 411# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) 412# else 413# define _GL_ARG_NONNULL(params) 414# endif 415#endif 416 417/* The definition of _GL_WARN_ON_USE is copied here. */ 418/* A C macro for emitting warnings if a function is used. 419 Copyright (C) 2010-2022 Free Software Foundation, Inc. 420 421 This program is free software: you can redistribute it and/or modify it 422 under the terms of the GNU Lesser General Public License as published 423 by the Free Software Foundation; either version 2 of the License, or 424 (at your option) any later version. 425 426 This program is distributed in the hope that it will be useful, 427 but WITHOUT ANY WARRANTY; without even the implied warranty of 428 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 429 Lesser General Public License for more details. 430 431 You should have received a copy of the GNU Lesser General Public License 432 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 433 434/* _GL_WARN_ON_USE (function, "literal string") issues a declaration 435 for FUNCTION which will then trigger a compiler warning containing 436 the text of "literal string" anywhere that function is called, if 437 supported by the compiler. If the compiler does not support this 438 feature, the macro expands to an unused extern declaration. 439 440 _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the 441 attribute used in _GL_WARN_ON_USE. If the compiler does not support 442 this feature, it expands to empty. 443 444 These macros are useful for marking a function as a potential 445 portability trap, with the intent that "literal string" include 446 instructions on the replacement function that should be used 447 instead. 448 _GL_WARN_ON_USE is for functions with 'extern' linkage. 449 _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' 450 linkage. 451 452 However, one of the reasons that a function is a portability trap is 453 if it has the wrong signature. Declaring FUNCTION with a different 454 signature in C is a compilation error, so this macro must use the 455 same type as any existing declaration so that programs that avoid 456 the problematic FUNCTION do not fail to compile merely because they 457 included a header that poisoned the function. But this implies that 458 _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already 459 have a declaration. Use of this macro implies that there must not 460 be any other macro hiding the declaration of FUNCTION; but 461 undefining FUNCTION first is part of the poisoning process anyway 462 (although for symbols that are provided only via a macro, the result 463 is a compilation error rather than a warning containing 464 "literal string"). Also note that in C++, it is only safe to use if 465 FUNCTION has no overloads. 466 467 For an example, it is possible to poison 'getline' by: 468 - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], 469 [getline]) in configure.ac, which potentially defines 470 HAVE_RAW_DECL_GETLINE 471 - adding this code to a header that wraps the system <stdio.h>: 472 #undef getline 473 #if HAVE_RAW_DECL_GETLINE 474 _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" 475 "not universally present; use the gnulib module getline"); 476 #endif 477 478 It is not possible to directly poison global variables. But it is 479 possible to write a wrapper accessor function, and poison that 480 (less common usage, like &environ, will cause a compilation error 481 rather than issue the nice warning, but the end result of informing 482 the developer about their portability problem is still achieved): 483 #if HAVE_RAW_DECL_ENVIRON 484 static char *** 485 rpl_environ (void) { return &environ; } 486 _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); 487 # undef environ 488 # define environ (*rpl_environ ()) 489 #endif 490 or better (avoiding contradictory use of 'static' and 'extern'): 491 #if HAVE_RAW_DECL_ENVIRON 492 static char *** 493 _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") 494 rpl_environ (void) { return &environ; } 495 # undef environ 496 # define environ (*rpl_environ ()) 497 #endif 498 */ 499#ifndef _GL_WARN_ON_USE 500 501# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) 502/* A compiler attribute is available in gcc versions 4.3.0 and later. */ 503# define _GL_WARN_ON_USE(function, message) \ 504_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) 505# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ 506 __attribute__ ((__warning__ (message))) 507# elif __clang_major__ >= 4 508/* Another compiler attribute is available in clang. */ 509# define _GL_WARN_ON_USE(function, message) \ 510_GL_WARN_EXTERN_C __typeof__ (function) function \ 511 __attribute__ ((__diagnose_if__ (1, message, "warning"))) 512# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ 513 __attribute__ ((__diagnose_if__ (1, message, "warning"))) 514# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 515/* Verify the existence of the function. */ 516# define _GL_WARN_ON_USE(function, message) \ 517_GL_WARN_EXTERN_C __typeof__ (function) function 518# define _GL_WARN_ON_USE_ATTRIBUTE(message) 519# else /* Unsupported. */ 520# define _GL_WARN_ON_USE(function, message) \ 521_GL_WARN_EXTERN_C int _gl_warn_on_use 522# define _GL_WARN_ON_USE_ATTRIBUTE(message) 523# endif 524#endif 525 526/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") 527 is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the 528 function is declared with the given prototype, consisting of return type, 529 parameters, and attributes. 530 This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does 531 not work in this case. */ 532#ifndef _GL_WARN_ON_USE_CXX 533# if !defined __cplusplus 534# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ 535 _GL_WARN_ON_USE (function, msg) 536# else 537# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) 538/* A compiler attribute is available in gcc versions 4.3.0 and later. */ 539# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ 540extern rettype_gcc function parameters_and_attributes \ 541 __attribute__ ((__warning__ (msg))) 542# elif __clang_major__ >= 4 543/* Another compiler attribute is available in clang. */ 544# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ 545extern rettype_clang function parameters_and_attributes \ 546 __attribute__ ((__diagnose_if__ (1, msg, "warning"))) 547# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 548/* Verify the existence of the function. */ 549# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ 550extern rettype_gcc function parameters_and_attributes 551# else /* Unsupported. */ 552# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ 553_GL_WARN_EXTERN_C int _gl_warn_on_use 554# endif 555# endif 556#endif 557 558/* _GL_WARN_EXTERN_C declaration; 559 performs the declaration with C linkage. */ 560#ifndef _GL_WARN_EXTERN_C 561# if defined __cplusplus 562# define _GL_WARN_EXTERN_C extern "C" 563# else 564# define _GL_WARN_EXTERN_C extern 565# endif 566#endif 567 568/* Some systems don't define struct timespec (e.g., AIX 4.1). 569 Or they define it with the wrong member names or define it in <sys/time.h> 570 (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, 571 but the pthreads-win32 library defines it in <pthread.h>. */ 572# if ! 1 573# if 0 574# include <sys/time.h> 575# elif 0 576# include <pthread.h> 577# elif 0 578# include <unistd.h> 579# else 580 581# ifdef __cplusplus 582extern "C" { 583# endif 584 585# if !GNULIB_defined_struct_timespec 586# undef timespec 587# define timespec rpl_timespec 588struct timespec 589{ 590 time_t tv_sec; 591 long int tv_nsec; 592}; 593# define GNULIB_defined_struct_timespec 1 594# endif 595 596# ifdef __cplusplus 597} 598# endif 599 600# endif 601# endif 602 603# if !GNULIB_defined_struct_time_t_must_be_integral 604/* https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html 605 requires time_t to be an integer type, even though C99 permits floating 606 point. We don't know of any implementation that uses floating 607 point, and it is much easier to write code that doesn't have to 608 worry about that corner case, so we force the issue. */ 609struct __time_t_must_be_integral { 610 unsigned int __floating_time_t_unsupported : (time_t) 1; 611}; 612# define GNULIB_defined_struct_time_t_must_be_integral 1 613# endif 614 615/* Define TIME_UTC, a positive integer constant used for timespec_get(). */ 616# if ! 1 617# if !GNULIB_defined_TIME_UTC 618# define TIME_UTC 1 619# define GNULIB_defined_TIME_UTC 1 620# endif 621# endif 622 623/* Set *TS to the current time, and return BASE. 624 Upon failure, return 0. */ 625# if 0 626# if ! 1 627_GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base) 628 _GL_ARG_NONNULL ((1))); 629# endif 630_GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base)); 631_GL_CXXALIASWARN (timespec_get); 632# endif 633 634/* Set *TS to the current time resolution, and return BASE. 635 Upon failure, return 0. */ 636# if 0 637# if ! 1 638_GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base) 639 _GL_ARG_NONNULL ((1))); 640# endif 641_GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base)); 642_GL_CXXALIASWARN (timespec_getres); 643# endif 644 645/* Sleep for at least RQTP seconds unless interrupted, If interrupted, 646 return -1 and store the remaining time into RMTP. See 647 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html>. */ 648# if 0 649# if GNULIB_PORTCHECK 650# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 651# define nanosleep rpl_nanosleep 652# endif 653_GL_FUNCDECL_RPL (nanosleep, int, 654 (struct timespec const *__rqtp, struct timespec *__rmtp) 655 _GL_ARG_NONNULL ((1))); 656_GL_CXXALIAS_RPL (nanosleep, int, 657 (struct timespec const *__rqtp, struct timespec *__rmtp)); 658# else 659# if ! 1 660_GL_FUNCDECL_SYS (nanosleep, int, 661 (struct timespec const *__rqtp, struct timespec *__rmtp) 662 _GL_ARG_NONNULL ((1))); 663# endif 664_GL_CXXALIAS_SYS (nanosleep, int, 665 (struct timespec const *__rqtp, struct timespec *__rmtp)); 666# endif 667_GL_CXXALIASWARN (nanosleep); 668# endif 669 670/* Initialize time conversion information. */ 671# if 0 672# if GNULIB_PORTCHECK 673# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 674# undef tzset 675# define tzset rpl_tzset 676# endif 677_GL_FUNCDECL_RPL (tzset, void, (void)); 678_GL_CXXALIAS_RPL (tzset, void, (void)); 679# elif defined _WIN32 && !defined __CYGWIN__ 680# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 681# undef tzset 682# define tzset _tzset 683# endif 684_GL_CXXALIAS_MDA (tzset, void, (void)); 685# else 686_GL_CXXALIAS_SYS (tzset, void, (void)); 687# endif 688_GL_CXXALIASWARN (tzset); 689# elif 1 690/* On native Windows, map 'tzset' to '_tzset', so that -loldnames is not 691 required. In C++ with GNULIB_NAMESPACE, avoid differences between 692 platforms by defining GNULIB_NAMESPACE::tzset always. */ 693# if defined _WIN32 && !defined __CYGWIN__ 694# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 695# undef tzset 696# define tzset _tzset 697# endif 698_GL_CXXALIAS_MDA (tzset, void, (void)); 699# else 700_GL_CXXALIAS_SYS (tzset, void, (void)); 701# endif 702_GL_CXXALIASWARN (tzset); 703# endif 704 705/* Return the 'time_t' representation of TP and normalize TP. */ 706# if 0 707# if GNULIB_PORTCHECK 708# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 709# define mktime rpl_mktime 710# endif 711_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); 712_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); 713# else 714_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); 715# endif 716# if __GLIBC__ >= 2 717_GL_CXXALIASWARN (mktime); 718# endif 719# endif 720 721/* Convert TIMER to RESULT, assuming local time and UTC respectively. See 722 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime_r.html> and 723 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime_r.html>. */ 724# if 1 725# if 0 726# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 727# undef localtime_r 728# define localtime_r rpl_localtime_r 729# endif 730_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, 731 struct tm *restrict __result) 732 _GL_ARG_NONNULL ((1, 2))); 733_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, 734 struct tm *restrict __result)); 735# else 736# if ! 1 737_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, 738 struct tm *restrict __result) 739 _GL_ARG_NONNULL ((1, 2))); 740# endif 741_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, 742 struct tm *restrict __result)); 743# endif 744# if 1 745_GL_CXXALIASWARN (localtime_r); 746# endif 747# if 0 748# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 749# undef gmtime_r 750# define gmtime_r rpl_gmtime_r 751# endif 752_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, 753 struct tm *restrict __result) 754 _GL_ARG_NONNULL ((1, 2))); 755_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, 756 struct tm *restrict __result)); 757# else 758# if ! 1 759_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, 760 struct tm *restrict __result) 761 _GL_ARG_NONNULL ((1, 2))); 762# endif 763_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, 764 struct tm *restrict __result)); 765# endif 766# if 1 767_GL_CXXALIASWARN (gmtime_r); 768# endif 769# endif 770 771/* Convert TIMER to RESULT, assuming local time and UTC respectively. See 772 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html> and 773 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html>. */ 774# if 0 || 0 775# if 0 776# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 777# undef localtime 778# define localtime rpl_localtime 779# endif 780_GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) 781 _GL_ARG_NONNULL ((1))); 782_GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); 783# else 784_GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); 785# endif 786# if __GLIBC__ >= 2 787_GL_CXXALIASWARN (localtime); 788# endif 789# endif 790 791# if 0 || 0 792# if 0 793# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 794# undef gmtime 795# define gmtime rpl_gmtime 796# endif 797_GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) 798 _GL_ARG_NONNULL ((1))); 799_GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); 800# else 801_GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); 802# endif 803_GL_CXXALIASWARN (gmtime); 804# endif 805 806/* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store 807 the resulting broken-down time into TM. See 808 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html>. */ 809# if 0 810# if ! 1 811_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, 812 char const *restrict __format, 813 struct tm *restrict __tm) 814 _GL_ARG_NONNULL ((1, 2, 3))); 815# endif 816_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, 817 char const *restrict __format, 818 struct tm *restrict __tm)); 819_GL_CXXALIASWARN (strptime); 820# endif 821 822/* Convert *TP to a date and time string. See 823 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html>. */ 824# if 0 825# if GNULIB_PORTCHECK 826# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 827# define ctime rpl_ctime 828# endif 829_GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp) 830 _GL_ARG_NONNULL ((1))); 831_GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); 832# else 833_GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp)); 834# endif 835# if __GLIBC__ >= 2 836_GL_CXXALIASWARN (ctime); 837# endif 838# endif 839 840/* Convert *TP to a date and time string. See 841 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html>. */ 842# if 0 843# if GNULIB_PORTCHECK 844# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 845# define strftime rpl_strftime 846# endif 847_GL_FUNCDECL_RPL (strftime, size_t, 848 (char *restrict __buf, size_t __bufsize, 849 const char *restrict __fmt, const struct tm *restrict __tp) 850 _GL_ARG_NONNULL ((1, 3, 4))); 851_GL_CXXALIAS_RPL (strftime, size_t, 852 (char *restrict __buf, size_t __bufsize, 853 const char *restrict __fmt, const struct tm *restrict __tp)); 854# else 855_GL_CXXALIAS_SYS (strftime, size_t, 856 (char *restrict __buf, size_t __bufsize, 857 const char *restrict __fmt, const struct tm *restrict __tp)); 858# endif 859# if __GLIBC__ >= 2 860_GL_CXXALIASWARN (strftime); 861# endif 862# endif 863 864# if defined _GNU_SOURCE && 0 && ! 0 865/* Functions that use a first-class time zone data type, instead of 866 relying on an implicit global time zone. 867 Inspired by NetBSD. */ 868 869/* Represents a time zone. 870 (timezone_t) NULL stands for UTC. */ 871typedef struct tm_zone *timezone_t; 872 873/* tzalloc (name) 874 Returns a time zone object for the given time zone NAME. This object 875 represents the time zone that other functions would use it the TZ 876 environment variable was set to NAME. 877 If NAME is NULL, the result represents the time zone that other functions 878 would use it the TZ environment variable was unset. 879 May return NULL if NAME is invalid (this is platform dependent) or 880 upon memory allocation failure. */ 881_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); 882_GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); 883 884/* tzfree (tz) 885 Frees a time zone object. 886 The argument must have been returned by tzalloc(). */ 887_GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz)); 888_GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); 889 890/* localtime_rz (tz, &t, &result) 891 Converts an absolute time T to a broken-down time RESULT, assuming the 892 time zone TZ. 893 This function is like 'localtime_r', but relies on the argument TZ instead 894 of an implicit global time zone. */ 895_GL_FUNCDECL_SYS (localtime_rz, struct tm *, 896 (timezone_t __tz, time_t const *restrict __timer, 897 struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3))); 898_GL_CXXALIAS_SYS (localtime_rz, struct tm *, 899 (timezone_t __tz, time_t const *restrict __timer, 900 struct tm *restrict __result)); 901 902/* mktime_z (tz, &tm) 903 Normalizes the broken-down time TM and converts it to an absolute time, 904 assuming the time zone TZ. Returns the absolute time. 905 This function is like 'mktime', but relies on the argument TZ instead 906 of an implicit global time zone. */ 907_GL_FUNCDECL_SYS (mktime_z, time_t, 908 (timezone_t __tz, struct tm *restrict __tm) 909 _GL_ARG_NONNULL ((2))); 910_GL_CXXALIAS_SYS (mktime_z, time_t, 911 (timezone_t __tz, struct tm *restrict __tm)); 912 913/* Time zone abbreviation strings (returned by 'localtime_rz' or 'mktime_z' 914 in the 'tm_zone' member of 'struct tm') are valid as long as 915 - the 'struct tm' argument is not destroyed or overwritten, 916 and 917 - the 'timezone_t' argument is not freed through tzfree(). */ 918 919# endif 920 921/* Convert TM to a time_t value, assuming UTC. */ 922# if 0 923# if GNULIB_PORTCHECK 924# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 925# undef timegm 926# define timegm rpl_timegm 927# endif 928_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); 929_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); 930# else 931# if ! 1 932_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); 933# endif 934_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); 935# endif 936_GL_CXXALIASWARN (timegm); 937# endif 938 939/* Encourage applications to avoid unsafe functions that can overrun 940 buffers when given outlandish struct tm values. Portable 941 applications should use strftime (or even sprintf) instead. */ 942# if defined GNULIB_POSIXCHECK 943# undef asctime 944_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " 945 "better use strftime (or even sprintf) instead"); 946# endif 947# if defined GNULIB_POSIXCHECK 948# undef asctime_r 949_GL_WARN_ON_USE (asctime_r, "asctime_r can overrun buffers in some cases - " 950 "better use strftime (or even sprintf) instead"); 951# endif 952# if defined GNULIB_POSIXCHECK 953# undef ctime 954_GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - " 955 "better use strftime (or even sprintf) instead"); 956# endif 957# if defined GNULIB_POSIXCHECK 958# undef ctime_r 959_GL_WARN_ON_USE (ctime_r, "ctime_r can overrun buffers in some cases - " 960 "better use strftime (or even sprintf) instead"); 961# endif 962 963#endif 964