1/* This file is automatically generated. DO NOT EDIT! */ 2/* Generated from: NetBSD: mknative-gdb,v 1.16 2023/07/31 17:09:59 christos Exp */ 3/* Generated from: NetBSD: mknative.common,v 1.16 2018/04/15 15:13:37 christos Exp */ 4 5/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ 6/* A GNU-like <dirent.h>. 7 Copyright (C) 2006-2022 Free Software Foundation, Inc. 8 9 This file is free software: you can redistribute it and/or modify 10 it under the terms of the GNU Lesser General Public License as 11 published by the Free Software Foundation; either version 2.1 of the 12 License, or (at your option) any later version. 13 14 This file is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU Lesser General Public License for more details. 18 19 You should have received a copy of the GNU Lesser General Public License 20 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 21 22#ifndef _GL_DIRENT_H 23 24#if __GNUC__ >= 3 25#pragma GCC system_header 26#endif 27 28 29/* The include_next requires a split double-inclusion guard. */ 30#if 1 31# include_next <dirent.h> 32#endif 33 34#ifndef _GL_DIRENT_H 35#define _GL_DIRENT_H 36 37/* Get ino_t. Needed on some systems, including glibc 2.8. */ 38#include <sys/types.h> 39 40#if !1 41/* Define types DIR and 'struct dirent'. */ 42# if !GNULIB_defined_struct_dirent 43struct dirent 44{ 45 char d_type; 46 char d_name[1]; 47}; 48/* Possible values for 'd_type'. */ 49# define DT_UNKNOWN 0 50# define DT_FIFO 1 /* FIFO */ 51# define DT_CHR 2 /* character device */ 52# define DT_DIR 4 /* directory */ 53# define DT_BLK 6 /* block device */ 54# define DT_REG 8 /* regular file */ 55# define DT_LNK 10 /* symbolic link */ 56# define DT_SOCK 12 /* socket */ 57# define DT_WHT 14 /* whiteout */ 58typedef struct gl_directory DIR; 59# define GNULIB_defined_struct_dirent 1 60# endif 61#endif 62 63/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers 64 that can be freed by passing them as the Ith argument to the 65 function F. */ 66#ifndef _GL_ATTRIBUTE_DEALLOC 67# if __GNUC__ >= 11 68# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) 69# else 70# define _GL_ATTRIBUTE_DEALLOC(f, i) 71# endif 72#endif 73 74/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly 75 allocated memory. */ 76/* Applies to: functions. */ 77#ifndef _GL_ATTRIBUTE_MALLOC 78# if __GNUC__ >= 3 || defined __clang__ 79# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) 80# else 81# define _GL_ATTRIBUTE_MALLOC 82# endif 83#endif 84 85/* The __attribute__ feature is available in gcc versions 2.5 and later. 86 The attribute __pure__ was added in gcc 2.96. */ 87#ifndef _GL_ATTRIBUTE_PURE 88# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ 89# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) 90# else 91# define _GL_ATTRIBUTE_PURE /* empty */ 92# endif 93#endif 94 95/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ 96/* C++ compatible function declaration macros. 97 Copyright (C) 2010-2022 Free Software Foundation, Inc. 98 99 This program is free software: you can redistribute it and/or modify it 100 under the terms of the GNU Lesser General Public License as published 101 by the Free Software Foundation; either version 2 of the License, or 102 (at your option) any later version. 103 104 This program is distributed in the hope that it will be useful, 105 but WITHOUT ANY WARRANTY; without even the implied warranty of 106 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 107 Lesser General Public License for more details. 108 109 You should have received a copy of the GNU Lesser General Public License 110 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 111 112#ifndef _GL_CXXDEFS_H 113#define _GL_CXXDEFS_H 114 115/* Begin/end the GNULIB_NAMESPACE namespace. */ 116#if defined __cplusplus && defined GNULIB_NAMESPACE 117# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { 118# define _GL_END_NAMESPACE } 119#else 120# define _GL_BEGIN_NAMESPACE 121# define _GL_END_NAMESPACE 122#endif 123 124/* The three most frequent use cases of these macros are: 125 126 * For providing a substitute for a function that is missing on some 127 platforms, but is declared and works fine on the platforms on which 128 it exists: 129 130 #if @GNULIB_FOO@ 131 # if !@HAVE_FOO@ 132 _GL_FUNCDECL_SYS (foo, ...); 133 # endif 134 _GL_CXXALIAS_SYS (foo, ...); 135 _GL_CXXALIASWARN (foo); 136 #elif defined GNULIB_POSIXCHECK 137 ... 138 #endif 139 140 * For providing a replacement for a function that exists on all platforms, 141 but is broken/insufficient and needs to be replaced on some platforms: 142 143 #if @GNULIB_FOO@ 144 # if @REPLACE_FOO@ 145 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 146 # undef foo 147 # define foo rpl_foo 148 # endif 149 _GL_FUNCDECL_RPL (foo, ...); 150 _GL_CXXALIAS_RPL (foo, ...); 151 # else 152 _GL_CXXALIAS_SYS (foo, ...); 153 # endif 154 _GL_CXXALIASWARN (foo); 155 #elif defined GNULIB_POSIXCHECK 156 ... 157 #endif 158 159 * For providing a replacement for a function that exists on some platforms 160 but is broken/insufficient and needs to be replaced on some of them and 161 is additionally either missing or undeclared on some other platforms: 162 163 #if @GNULIB_FOO@ 164 # if @REPLACE_FOO@ 165 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 166 # undef foo 167 # define foo rpl_foo 168 # endif 169 _GL_FUNCDECL_RPL (foo, ...); 170 _GL_CXXALIAS_RPL (foo, ...); 171 # else 172 # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ 173 _GL_FUNCDECL_SYS (foo, ...); 174 # endif 175 _GL_CXXALIAS_SYS (foo, ...); 176 # endif 177 _GL_CXXALIASWARN (foo); 178 #elif defined GNULIB_POSIXCHECK 179 ... 180 #endif 181*/ 182 183/* _GL_EXTERN_C declaration; 184 performs the declaration with C linkage. */ 185#if defined __cplusplus 186# define _GL_EXTERN_C extern "C" 187#else 188# define _GL_EXTERN_C extern 189#endif 190 191/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); 192 declares a replacement function, named rpl_func, with the given prototype, 193 consisting of return type, parameters, and attributes. 194 Example: 195 _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) 196 _GL_ARG_NONNULL ((1))); 197 */ 198#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ 199 _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) 200#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ 201 _GL_EXTERN_C rettype rpl_func parameters_and_attributes 202 203/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); 204 declares the system function, named func, with the given prototype, 205 consisting of return type, parameters, and attributes. 206 Example: 207 _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) 208 _GL_ARG_NONNULL ((1))); 209 */ 210#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ 211 _GL_EXTERN_C rettype func parameters_and_attributes 212 213/* _GL_CXXALIAS_RPL (func, rettype, parameters); 214 declares a C++ alias called GNULIB_NAMESPACE::func 215 that redirects to rpl_func, if GNULIB_NAMESPACE is defined. 216 Example: 217 _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); 218 219 Wrapping rpl_func in an object with an inline conversion operator 220 avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is 221 actually used in the program. */ 222#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ 223 _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) 224#if defined __cplusplus && defined GNULIB_NAMESPACE 225# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ 226 namespace GNULIB_NAMESPACE \ 227 { \ 228 static const struct _gl_ ## func ## _wrapper \ 229 { \ 230 typedef rettype (*type) parameters; \ 231 \ 232 inline operator type () const \ 233 { \ 234 return ::rpl_func; \ 235 } \ 236 } func = {}; \ 237 } \ 238 _GL_EXTERN_C int _gl_cxxalias_dummy 239#else 240# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ 241 _GL_EXTERN_C int _gl_cxxalias_dummy 242#endif 243 244/* _GL_CXXALIAS_MDA (func, rettype, parameters); 245 is to be used when func is a Microsoft deprecated alias, on native Windows. 246 It declares a C++ alias called GNULIB_NAMESPACE::func 247 that redirects to _func, if GNULIB_NAMESPACE is defined. 248 Example: 249 _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); 250 */ 251#define _GL_CXXALIAS_MDA(func,rettype,parameters) \ 252 _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) 253 254/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); 255 is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); 256 except that the C function rpl_func may have a slightly different 257 declaration. A cast is used to silence the "invalid conversion" error 258 that would otherwise occur. */ 259#if defined __cplusplus && defined GNULIB_NAMESPACE 260# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ 261 namespace GNULIB_NAMESPACE \ 262 { \ 263 static const struct _gl_ ## func ## _wrapper \ 264 { \ 265 typedef rettype (*type) parameters; \ 266 \ 267 inline operator type () const \ 268 { \ 269 return reinterpret_cast<type>(::rpl_func); \ 270 } \ 271 } func = {}; \ 272 } \ 273 _GL_EXTERN_C int _gl_cxxalias_dummy 274#else 275# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ 276 _GL_EXTERN_C int _gl_cxxalias_dummy 277#endif 278 279/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); 280 is like _GL_CXXALIAS_MDA (func, rettype, parameters); 281 except that the C function func may have a slightly different declaration. 282 A cast is used to silence the "invalid conversion" error that would 283 otherwise occur. */ 284#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ 285 _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) 286 287/* _GL_CXXALIAS_SYS (func, rettype, parameters); 288 declares a C++ alias called GNULIB_NAMESPACE::func 289 that redirects to the system provided function func, if GNULIB_NAMESPACE 290 is defined. 291 Example: 292 _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); 293 294 Wrapping func in an object with an inline conversion operator 295 avoids a reference to func unless GNULIB_NAMESPACE::func is 296 actually used in the program. */ 297#if defined __cplusplus && defined GNULIB_NAMESPACE 298# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ 299 namespace GNULIB_NAMESPACE \ 300 { \ 301 static const struct _gl_ ## func ## _wrapper \ 302 { \ 303 typedef rettype (*type) parameters; \ 304 \ 305 inline operator type () const \ 306 { \ 307 return ::func; \ 308 } \ 309 } func = {}; \ 310 } \ 311 _GL_EXTERN_C int _gl_cxxalias_dummy 312#else 313# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ 314 _GL_EXTERN_C int _gl_cxxalias_dummy 315#endif 316 317/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); 318 is like _GL_CXXALIAS_SYS (func, rettype, parameters); 319 except that the C function func may have a slightly different declaration. 320 A cast is used to silence the "invalid conversion" error that would 321 otherwise occur. */ 322#if defined __cplusplus && defined GNULIB_NAMESPACE 323# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ 324 namespace GNULIB_NAMESPACE \ 325 { \ 326 static const struct _gl_ ## func ## _wrapper \ 327 { \ 328 typedef rettype (*type) parameters; \ 329 \ 330 inline operator type () const \ 331 { \ 332 return reinterpret_cast<type>(::func); \ 333 } \ 334 } func = {}; \ 335 } \ 336 _GL_EXTERN_C int _gl_cxxalias_dummy 337#else 338# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ 339 _GL_EXTERN_C int _gl_cxxalias_dummy 340#endif 341 342/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); 343 is like _GL_CXXALIAS_SYS (func, rettype, parameters); 344 except that the C function is picked among a set of overloaded functions, 345 namely the one with rettype2 and parameters2. Two consecutive casts 346 are used to silence the "cannot find a match" and "invalid conversion" 347 errors that would otherwise occur. */ 348#if defined __cplusplus && defined GNULIB_NAMESPACE 349 /* The outer cast must be a reinterpret_cast. 350 The inner cast: When the function is defined as a set of overloaded 351 functions, it works as a static_cast<>, choosing the designated variant. 352 When the function is defined as a single variant, it works as a 353 reinterpret_cast<>. The parenthesized cast syntax works both ways. */ 354# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ 355 namespace GNULIB_NAMESPACE \ 356 { \ 357 static const struct _gl_ ## func ## _wrapper \ 358 { \ 359 typedef rettype (*type) parameters; \ 360 \ 361 inline operator type () const \ 362 { \ 363 return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ 364 } \ 365 } func = {}; \ 366 } \ 367 _GL_EXTERN_C int _gl_cxxalias_dummy 368#else 369# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ 370 _GL_EXTERN_C int _gl_cxxalias_dummy 371#endif 372 373/* _GL_CXXALIASWARN (func); 374 causes a warning to be emitted when ::func is used but not when 375 GNULIB_NAMESPACE::func is used. func must be defined without overloaded 376 variants. */ 377#if defined __cplusplus && defined GNULIB_NAMESPACE 378# define _GL_CXXALIASWARN(func) \ 379 _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) 380# define _GL_CXXALIASWARN_1(func,namespace) \ 381 _GL_CXXALIASWARN_2 (func, namespace) 382/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, 383 we enable the warning only when not optimizing. */ 384# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) 385# define _GL_CXXALIASWARN_2(func,namespace) \ 386 _GL_WARN_ON_USE (func, \ 387 "The symbol ::" #func " refers to the system function. " \ 388 "Use " #namespace "::" #func " instead.") 389# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 390# define _GL_CXXALIASWARN_2(func,namespace) \ 391 extern __typeof__ (func) func 392# else 393# define _GL_CXXALIASWARN_2(func,namespace) \ 394 _GL_EXTERN_C int _gl_cxxalias_dummy 395# endif 396#else 397# define _GL_CXXALIASWARN(func) \ 398 _GL_EXTERN_C int _gl_cxxalias_dummy 399#endif 400 401/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); 402 causes a warning to be emitted when the given overloaded variant of ::func 403 is used but not when GNULIB_NAMESPACE::func is used. */ 404#if defined __cplusplus && defined GNULIB_NAMESPACE 405# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ 406 _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ 407 GNULIB_NAMESPACE) 408# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ 409 _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) 410/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, 411 we enable the warning only when not optimizing. */ 412# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) 413# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ 414 _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ 415 "The symbol ::" #func " refers to the system function. " \ 416 "Use " #namespace "::" #func " instead.") 417# else 418# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ 419 _GL_EXTERN_C int _gl_cxxalias_dummy 420# endif 421#else 422# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ 423 _GL_EXTERN_C int _gl_cxxalias_dummy 424#endif 425 426#endif /* _GL_CXXDEFS_H */ 427 428/* The definition of _GL_ARG_NONNULL is copied here. */ 429/* A C macro for declaring that specific arguments must not be NULL. 430 Copyright (C) 2009-2022 Free Software Foundation, Inc. 431 432 This program is free software: you can redistribute it and/or modify it 433 under the terms of the GNU Lesser General Public License as published 434 by the Free Software Foundation; either version 2 of the License, or 435 (at your option) any later version. 436 437 This program is distributed in the hope that it will be useful, 438 but WITHOUT ANY WARRANTY; without even the implied warranty of 439 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 440 Lesser General Public License for more details. 441 442 You should have received a copy of the GNU Lesser General Public License 443 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 444 445/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools 446 that the values passed as arguments n, ..., m must be non-NULL pointers. 447 n = 1 stands for the first argument, n = 2 for the second argument etc. */ 448#ifndef _GL_ARG_NONNULL 449# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ 450# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) 451# else 452# define _GL_ARG_NONNULL(params) 453# endif 454#endif 455 456/* The definition of _GL_WARN_ON_USE is copied here. */ 457/* A C macro for emitting warnings if a function is used. 458 Copyright (C) 2010-2022 Free Software Foundation, Inc. 459 460 This program is free software: you can redistribute it and/or modify it 461 under the terms of the GNU Lesser General Public License as published 462 by the Free Software Foundation; either version 2 of the License, or 463 (at your option) any later version. 464 465 This program is distributed in the hope that it will be useful, 466 but WITHOUT ANY WARRANTY; without even the implied warranty of 467 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 468 Lesser General Public License for more details. 469 470 You should have received a copy of the GNU Lesser General Public License 471 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 472 473/* _GL_WARN_ON_USE (function, "literal string") issues a declaration 474 for FUNCTION which will then trigger a compiler warning containing 475 the text of "literal string" anywhere that function is called, if 476 supported by the compiler. If the compiler does not support this 477 feature, the macro expands to an unused extern declaration. 478 479 _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the 480 attribute used in _GL_WARN_ON_USE. If the compiler does not support 481 this feature, it expands to empty. 482 483 These macros are useful for marking a function as a potential 484 portability trap, with the intent that "literal string" include 485 instructions on the replacement function that should be used 486 instead. 487 _GL_WARN_ON_USE is for functions with 'extern' linkage. 488 _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' 489 linkage. 490 491 However, one of the reasons that a function is a portability trap is 492 if it has the wrong signature. Declaring FUNCTION with a different 493 signature in C is a compilation error, so this macro must use the 494 same type as any existing declaration so that programs that avoid 495 the problematic FUNCTION do not fail to compile merely because they 496 included a header that poisoned the function. But this implies that 497 _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already 498 have a declaration. Use of this macro implies that there must not 499 be any other macro hiding the declaration of FUNCTION; but 500 undefining FUNCTION first is part of the poisoning process anyway 501 (although for symbols that are provided only via a macro, the result 502 is a compilation error rather than a warning containing 503 "literal string"). Also note that in C++, it is only safe to use if 504 FUNCTION has no overloads. 505 506 For an example, it is possible to poison 'getline' by: 507 - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], 508 [getline]) in configure.ac, which potentially defines 509 HAVE_RAW_DECL_GETLINE 510 - adding this code to a header that wraps the system <stdio.h>: 511 #undef getline 512 #if HAVE_RAW_DECL_GETLINE 513 _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" 514 "not universally present; use the gnulib module getline"); 515 #endif 516 517 It is not possible to directly poison global variables. But it is 518 possible to write a wrapper accessor function, and poison that 519 (less common usage, like &environ, will cause a compilation error 520 rather than issue the nice warning, but the end result of informing 521 the developer about their portability problem is still achieved): 522 #if HAVE_RAW_DECL_ENVIRON 523 static char *** 524 rpl_environ (void) { return &environ; } 525 _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); 526 # undef environ 527 # define environ (*rpl_environ ()) 528 #endif 529 or better (avoiding contradictory use of 'static' and 'extern'): 530 #if HAVE_RAW_DECL_ENVIRON 531 static char *** 532 _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") 533 rpl_environ (void) { return &environ; } 534 # undef environ 535 # define environ (*rpl_environ ()) 536 #endif 537 */ 538#ifndef _GL_WARN_ON_USE 539 540# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) 541/* A compiler attribute is available in gcc versions 4.3.0 and later. */ 542# define _GL_WARN_ON_USE(function, message) \ 543_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) 544# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ 545 __attribute__ ((__warning__ (message))) 546# elif __clang_major__ >= 4 547/* Another compiler attribute is available in clang. */ 548# define _GL_WARN_ON_USE(function, message) \ 549_GL_WARN_EXTERN_C __typeof__ (function) function \ 550 __attribute__ ((__diagnose_if__ (1, message, "warning"))) 551# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ 552 __attribute__ ((__diagnose_if__ (1, message, "warning"))) 553# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 554/* Verify the existence of the function. */ 555# define _GL_WARN_ON_USE(function, message) \ 556_GL_WARN_EXTERN_C __typeof__ (function) function 557# define _GL_WARN_ON_USE_ATTRIBUTE(message) 558# else /* Unsupported. */ 559# define _GL_WARN_ON_USE(function, message) \ 560_GL_WARN_EXTERN_C int _gl_warn_on_use 561# define _GL_WARN_ON_USE_ATTRIBUTE(message) 562# endif 563#endif 564 565/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") 566 is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the 567 function is declared with the given prototype, consisting of return type, 568 parameters, and attributes. 569 This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does 570 not work in this case. */ 571#ifndef _GL_WARN_ON_USE_CXX 572# if !defined __cplusplus 573# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ 574 _GL_WARN_ON_USE (function, msg) 575# else 576# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) 577/* A compiler attribute is available in gcc versions 4.3.0 and later. */ 578# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ 579extern rettype_gcc function parameters_and_attributes \ 580 __attribute__ ((__warning__ (msg))) 581# elif __clang_major__ >= 4 582/* Another compiler attribute is available in clang. */ 583# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ 584extern rettype_clang function parameters_and_attributes \ 585 __attribute__ ((__diagnose_if__ (1, msg, "warning"))) 586# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING 587/* Verify the existence of the function. */ 588# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ 589extern rettype_gcc function parameters_and_attributes 590# else /* Unsupported. */ 591# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ 592_GL_WARN_EXTERN_C int _gl_warn_on_use 593# endif 594# endif 595#endif 596 597/* _GL_WARN_EXTERN_C declaration; 598 performs the declaration with C linkage. */ 599#ifndef _GL_WARN_EXTERN_C 600# if defined __cplusplus 601# define _GL_WARN_EXTERN_C extern "C" 602# else 603# define _GL_WARN_EXTERN_C extern 604# endif 605#endif 606 607 608/* Declare overridden functions. */ 609 610#if 1 611# if 0 612# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 613# undef closedir 614# define closedir rpl_closedir 615# define GNULIB_defined_closedir 1 616# endif 617_GL_FUNCDECL_RPL (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1))); 618_GL_CXXALIAS_RPL (closedir, int, (DIR *dirp)); 619# else 620# if !1 621_GL_FUNCDECL_SYS (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1))); 622# endif 623_GL_CXXALIAS_SYS (closedir, int, (DIR *dirp)); 624# endif 625_GL_CXXALIASWARN (closedir); 626#elif defined GNULIB_POSIXCHECK 627# undef closedir 628# if HAVE_RAW_DECL_CLOSEDIR 629_GL_WARN_ON_USE (closedir, "closedir is not portable - " 630 "use gnulib module closedir for portability"); 631# endif 632#endif 633 634#if 1 635# if 0 636# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 637# undef opendir 638# define opendir rpl_opendir 639# define GNULIB_defined_opendir 1 640# endif 641_GL_FUNCDECL_RPL (opendir, DIR *, 642 (const char *dir_name) 643 _GL_ARG_NONNULL ((1)) 644 _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); 645_GL_CXXALIAS_RPL (opendir, DIR *, (const char *dir_name)); 646# else 647# if !1 || __GNUC__ >= 11 648_GL_FUNCDECL_SYS (opendir, DIR *, 649 (const char *dir_name) 650 _GL_ARG_NONNULL ((1)) 651 _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); 652# endif 653_GL_CXXALIAS_SYS (opendir, DIR *, (const char *dir_name)); 654# endif 655_GL_CXXALIASWARN (opendir); 656#else 657# if 1 && __GNUC__ >= 11 && !defined opendir 658/* For -Wmismatched-dealloc: Associate opendir with closedir or 659 rpl_closedir. */ 660_GL_FUNCDECL_SYS (opendir, DIR *, 661 (const char *dir_name) 662 _GL_ARG_NONNULL ((1)) 663 _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); 664# endif 665# if defined GNULIB_POSIXCHECK 666# undef opendir 667# if HAVE_RAW_DECL_OPENDIR 668_GL_WARN_ON_USE (opendir, "opendir is not portable - " 669 "use gnulib module opendir for portability"); 670# endif 671# endif 672#endif 673 674#if 1 675# if !1 676_GL_FUNCDECL_SYS (readdir, struct dirent *, (DIR *dirp) _GL_ARG_NONNULL ((1))); 677# endif 678_GL_CXXALIAS_SYS (readdir, struct dirent *, (DIR *dirp)); 679_GL_CXXALIASWARN (readdir); 680#elif defined GNULIB_POSIXCHECK 681# undef readdir 682# if HAVE_RAW_DECL_READDIR 683_GL_WARN_ON_USE (readdir, "readdir is not portable - " 684 "use gnulib module readdir for portability"); 685# endif 686#endif 687 688#if 1 689# if !1 690_GL_FUNCDECL_SYS (rewinddir, void, (DIR *dirp) _GL_ARG_NONNULL ((1))); 691# endif 692_GL_CXXALIAS_SYS (rewinddir, void, (DIR *dirp)); 693_GL_CXXALIASWARN (rewinddir); 694#elif defined GNULIB_POSIXCHECK 695# undef rewinddir 696# if HAVE_RAW_DECL_REWINDDIR 697_GL_WARN_ON_USE (rewinddir, "rewinddir is not portable - " 698 "use gnulib module rewinddir for portability"); 699# endif 700#endif 701 702#if 1 703/* Return the file descriptor associated with the given directory stream, 704 or -1 if none exists. */ 705# if 0 706/* On kLIBC, dirfd() is a macro that does not work. Undefine it. */ 707# if !(defined __cplusplus && defined GNULIB_NAMESPACE) || defined dirfd 708# undef dirfd 709# define dirfd rpl_dirfd 710# endif 711_GL_FUNCDECL_RPL (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1))); 712_GL_CXXALIAS_RPL (dirfd, int, (DIR *)); 713 714# ifdef __KLIBC__ 715/* Gnulib internal hooks needed to maintain the dirfd metadata. */ 716_GL_EXTERN_C int _gl_register_dirp_fd (int fd, DIR *dirp) 717 _GL_ARG_NONNULL ((2)); 718_GL_EXTERN_C void _gl_unregister_dirp_fd (int fd); 719# endif 720# else 721# if defined __cplusplus && defined GNULIB_NAMESPACE && defined dirfd 722 /* dirfd is defined as a macro and not as a function. 723 Turn it into a function and get rid of the macro. */ 724static inline int (dirfd) (DIR *dp) { return dirfd (dp); } 725# undef dirfd 726# endif 727# if !(1 || defined dirfd) 728_GL_FUNCDECL_SYS (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1))); 729# endif 730_GL_CXXALIAS_SYS (dirfd, int, (DIR *)); 731# endif 732_GL_CXXALIASWARN (dirfd); 733#elif defined GNULIB_POSIXCHECK 734# undef dirfd 735# if HAVE_RAW_DECL_DIRFD 736_GL_WARN_ON_USE (dirfd, "dirfd is unportable - " 737 "use gnulib module dirfd for portability"); 738# endif 739#endif 740 741#if 1 742/* Open a directory stream visiting the given directory file 743 descriptor. Return NULL and set errno if fd is not visiting a 744 directory. On success, this function consumes fd (it will be 745 implicitly closed either by this function or by a subsequent 746 closedir). */ 747# if 1 748# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 749# undef fdopendir 750# define fdopendir rpl_fdopendir 751# endif 752_GL_FUNCDECL_RPL (fdopendir, DIR *, 753 (int fd) 754 _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); 755_GL_CXXALIAS_RPL (fdopendir, DIR *, (int fd)); 756# else 757# if !1 || !1 || __GNUC__ >= 11 758_GL_FUNCDECL_SYS (fdopendir, DIR *, 759 (int fd) 760 _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); 761# endif 762_GL_CXXALIAS_SYS (fdopendir, DIR *, (int fd)); 763# endif 764_GL_CXXALIASWARN (fdopendir); 765#else 766# if 1 && __GNUC__ >= 11 && !defined fdopendir 767/* For -Wmismatched-dealloc: Associate fdopendir with closedir or 768 rpl_closedir. */ 769_GL_FUNCDECL_SYS (fdopendir, DIR *, 770 (int fd) 771 _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); 772# endif 773# if defined GNULIB_POSIXCHECK 774# undef fdopendir 775# if HAVE_RAW_DECL_FDOPENDIR 776_GL_WARN_ON_USE (fdopendir, "fdopendir is unportable - " 777 "use gnulib module fdopendir for portability"); 778# endif 779# endif 780#endif 781 782#if 0 783/* Scan the directory DIR, calling FILTER on each directory entry. 784 Entries for which FILTER returns nonzero are individually malloc'd, 785 sorted using qsort with CMP, and collected in a malloc'd array in 786 *NAMELIST. Returns the number of entries selected, or -1 on error. */ 787# if !1 788_GL_FUNCDECL_SYS (scandir, int, 789 (const char *dir, struct dirent ***namelist, 790 int (*filter) (const struct dirent *), 791 int (*cmp) (const struct dirent **, const struct dirent **)) 792 _GL_ARG_NONNULL ((1, 2, 4))); 793# endif 794/* Need to cast, because on glibc systems, the fourth parameter is 795 int (*cmp) (const void *, const void *). */ 796_GL_CXXALIAS_SYS_CAST (scandir, int, 797 (const char *dir, struct dirent ***namelist, 798 int (*filter) (const struct dirent *), 799 int (*cmp) (const struct dirent **, const struct dirent **))); 800_GL_CXXALIASWARN (scandir); 801#elif defined GNULIB_POSIXCHECK 802# undef scandir 803# if HAVE_RAW_DECL_SCANDIR 804_GL_WARN_ON_USE (scandir, "scandir is unportable - " 805 "use gnulib module scandir for portability"); 806# endif 807#endif 808 809#if 0 810/* Compare two 'struct dirent' entries alphabetically. */ 811# if !1 812_GL_FUNCDECL_SYS (alphasort, int, 813 (const struct dirent **, const struct dirent **) 814 _GL_ATTRIBUTE_PURE 815 _GL_ARG_NONNULL ((1, 2))); 816# endif 817/* Need to cast, because on glibc systems, the parameters are 818 (const void *, const void *). */ 819_GL_CXXALIAS_SYS_CAST (alphasort, int, 820 (const struct dirent **, const struct dirent **)); 821_GL_CXXALIASWARN (alphasort); 822#elif defined GNULIB_POSIXCHECK 823# undef alphasort 824# if HAVE_RAW_DECL_ALPHASORT 825_GL_WARN_ON_USE (alphasort, "alphasort is unportable - " 826 "use gnulib module alphasort for portability"); 827# endif 828#endif 829 830 831#endif /* _GL_DIRENT_H */ 832#endif /* _GL_DIRENT_H */ 833