1 /* DO NOT EDIT! GENERATED AUTOMATICALLY! */
2 /* Like <fcntl.h>, but with non-working flags defined to 0.
3 
4    Copyright (C) 2006-2018 Free Software Foundation, Inc.
5 
6    This program is free software: you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10 
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
18 
19 /* written by Paul Eggert */
20 
21 #if __GNUC__ >= 3
22 #pragma GCC system_header
23 #endif
24 
25 
26 #if defined __need_system_fcntl_h
27 /* Special invocation convention.  */
28 
29 /* Needed before <sys/stat.h>.
30    May also define off_t to a 64-bit type on native Windows.  */
31 #include <sys/types.h>
32 /* On some systems other than glibc, <sys/stat.h> is a prerequisite of
33    <fcntl.h>.  On glibc systems, we would like to avoid namespace pollution.
34    But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
35    extern "C" { ... } block, which leads to errors in C++ mode with the
36    overridden <sys/stat.h> from gnulib.  These errors are known to be gone
37    with g++ version >= 4.3.  */
38 #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))))
39 # include <sys/stat.h>
40 #endif
41 #include_next <fcntl.h>
42 
43 #else
44 /* Normal invocation convention.  */
45 
46 #ifndef _GL_FCNTL_H
47 
48 /* Needed before <sys/stat.h>.
49    May also define off_t to a 64-bit type on native Windows.  */
50 #include <sys/types.h>
51 /* On some systems other than glibc, <sys/stat.h> is a prerequisite of
52    <fcntl.h>.  On glibc systems, we would like to avoid namespace pollution.
53    But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
54    extern "C" { ... } block, which leads to errors in C++ mode with the
55    overridden <sys/stat.h> from gnulib.  These errors are known to be gone
56    with g++ version >= 4.3.  */
57 #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))))
58 # include <sys/stat.h>
59 #endif
60 /* The include_next requires a split double-inclusion guard.  */
61 #include_next <fcntl.h>
62 
63 #ifndef _GL_FCNTL_H
64 #define _GL_FCNTL_H
65 
66 #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems.  */
67 # include <unistd.h>
68 #endif
69 
70 /* Native Windows platforms declare open(), creat() in <io.h>.  */
71 #if (1 || defined GNULIB_POSIXCHECK) \
72     && (defined _WIN32 && ! defined __CYGWIN__)
73 # include <io.h>
74 #endif
75 
76 
77 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
78 /* C++ compatible function declaration macros.
79    Copyright (C) 2010-2018 Free Software Foundation, Inc.
80 
81    This program is free software: you can redistribute it and/or modify it
82    under the terms of the GNU General Public License as published
83    by the Free Software Foundation; either version 3 of the License, or
84    (at your option) any later version.
85 
86    This program is distributed in the hope that it will be useful,
87    but WITHOUT ANY WARRANTY; without even the implied warranty of
88    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
89    General Public License for more details.
90 
91    You should have received a copy of the GNU General Public License
92    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
93 
94 #ifndef _GL_CXXDEFS_H
95 #define _GL_CXXDEFS_H
96 
97 /* Begin/end the GNULIB_NAMESPACE namespace.  */
98 #if defined __cplusplus && defined GNULIB_NAMESPACE
99 # define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE {
100 # define _GL_END_NAMESPACE }
101 #else
102 # define _GL_BEGIN_NAMESPACE
103 # define _GL_END_NAMESPACE
104 #endif
105 
106 /* The three most frequent use cases of these macros are:
107 
108    * For providing a substitute for a function that is missing on some
109      platforms, but is declared and works fine on the platforms on which
110      it exists:
111 
112        #if @GNULIB_FOO@
113        # if !@HAVE_FOO@
114        _GL_FUNCDECL_SYS (foo, ...);
115        # endif
116        _GL_CXXALIAS_SYS (foo, ...);
117        _GL_CXXALIASWARN (foo);
118        #elif defined GNULIB_POSIXCHECK
119        ...
120        #endif
121 
122    * For providing a replacement for a function that exists on all platforms,
123      but is broken/insufficient and needs to be replaced on some platforms:
124 
125        #if @GNULIB_FOO@
126        # if @REPLACE_FOO@
127        #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
128        #   undef foo
129        #   define foo rpl_foo
130        #  endif
131        _GL_FUNCDECL_RPL (foo, ...);
132        _GL_CXXALIAS_RPL (foo, ...);
133        # else
134        _GL_CXXALIAS_SYS (foo, ...);
135        # endif
136        _GL_CXXALIASWARN (foo);
137        #elif defined GNULIB_POSIXCHECK
138        ...
139        #endif
140 
141    * For providing a replacement for a function that exists on some platforms
142      but is broken/insufficient and needs to be replaced on some of them and
143      is additionally either missing or undeclared on some other platforms:
144 
145        #if @GNULIB_FOO@
146        # if @REPLACE_FOO@
147        #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
148        #   undef foo
149        #   define foo rpl_foo
150        #  endif
151        _GL_FUNCDECL_RPL (foo, ...);
152        _GL_CXXALIAS_RPL (foo, ...);
153        # else
154        #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
155        _GL_FUNCDECL_SYS (foo, ...);
156        #  endif
157        _GL_CXXALIAS_SYS (foo, ...);
158        # endif
159        _GL_CXXALIASWARN (foo);
160        #elif defined GNULIB_POSIXCHECK
161        ...
162        #endif
163 */
164 
165 /* _GL_EXTERN_C declaration;
166    performs the declaration with C linkage.  */
167 #if defined __cplusplus
168 # define _GL_EXTERN_C extern "C"
169 #else
170 # define _GL_EXTERN_C extern
171 #endif
172 
173 /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
174    declares a replacement function, named rpl_func, with the given prototype,
175    consisting of return type, parameters, and attributes.
176    Example:
177      _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
178                                   _GL_ARG_NONNULL ((1)));
179  */
180 #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
181   _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
182 #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
183   _GL_EXTERN_C rettype rpl_func parameters_and_attributes
184 
185 /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
186    declares the system function, named func, with the given prototype,
187    consisting of return type, parameters, and attributes.
188    Example:
189      _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
190                                   _GL_ARG_NONNULL ((1)));
191  */
192 #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
193   _GL_EXTERN_C rettype func parameters_and_attributes
194 
195 /* _GL_CXXALIAS_RPL (func, rettype, parameters);
196    declares a C++ alias called GNULIB_NAMESPACE::func
197    that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
198    Example:
199      _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
200 
201    Wrapping rpl_func in an object with an inline conversion operator
202    avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is
203    actually used in the program.  */
204 #define _GL_CXXALIAS_RPL(func,rettype,parameters) \
205   _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
206 #if defined __cplusplus && defined GNULIB_NAMESPACE
207 # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
208     namespace GNULIB_NAMESPACE                                \
209     {                                                         \
210       static const struct _gl_ ## func ## _wrapper            \
211       {                                                       \
212         typedef rettype (*type) parameters;                   \
213                                                               \
214         inline operator type () const                         \
215         {                                                     \
216           return ::rpl_func;                                  \
217         }                                                     \
218       } func = {};                                            \
219     }                                                         \
220     _GL_EXTERN_C int _gl_cxxalias_dummy
221 #else
222 # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
223     _GL_EXTERN_C int _gl_cxxalias_dummy
224 #endif
225 
226 /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
227    is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
228    except that the C function rpl_func may have a slightly different
229    declaration.  A cast is used to silence the "invalid conversion" error
230    that would otherwise occur.  */
231 #if defined __cplusplus && defined GNULIB_NAMESPACE
232 # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
233     namespace GNULIB_NAMESPACE                                     \
234     {                                                              \
235       static const struct _gl_ ## func ## _wrapper                 \
236       {                                                            \
237         typedef rettype (*type) parameters;                        \
238                                                                    \
239         inline operator type () const                              \
240         {                                                          \
241           return reinterpret_cast<type>(::rpl_func);               \
242         }                                                          \
243       } func = {};                                                 \
244     }                                                              \
245     _GL_EXTERN_C int _gl_cxxalias_dummy
246 #else
247 # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
248     _GL_EXTERN_C int _gl_cxxalias_dummy
249 #endif
250 
251 /* _GL_CXXALIAS_SYS (func, rettype, parameters);
252    declares a C++ alias called GNULIB_NAMESPACE::func
253    that redirects to the system provided function func, if GNULIB_NAMESPACE
254    is defined.
255    Example:
256      _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
257 
258    Wrapping func in an object with an inline conversion operator
259    avoids a reference to func unless GNULIB_NAMESPACE::func is
260    actually used in the program.  */
261 #if defined __cplusplus && defined GNULIB_NAMESPACE
262 # define _GL_CXXALIAS_SYS(func,rettype,parameters)            \
263     namespace GNULIB_NAMESPACE                                \
264     {                                                         \
265       static const struct _gl_ ## func ## _wrapper            \
266       {                                                       \
267         typedef rettype (*type) parameters;                   \
268                                                               \
269         inline operator type () const                         \
270         {                                                     \
271           return ::func;                                      \
272         }                                                     \
273       } func = {};                                            \
274     }                                                         \
275     _GL_EXTERN_C int _gl_cxxalias_dummy
276 #else
277 # define _GL_CXXALIAS_SYS(func,rettype,parameters) \
278     _GL_EXTERN_C int _gl_cxxalias_dummy
279 #endif
280 
281 /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
282    is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
283    except that the C function func may have a slightly different declaration.
284    A cast is used to silence the "invalid conversion" error that would
285    otherwise occur.  */
286 #if defined __cplusplus && defined GNULIB_NAMESPACE
287 # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
288     namespace GNULIB_NAMESPACE                          \
289     {                                                   \
290       static const struct _gl_ ## func ## _wrapper      \
291       {                                                 \
292         typedef rettype (*type) parameters;             \
293                                                         \
294         inline operator type () const                   \
295         {                                               \
296           return reinterpret_cast<type>(::func);        \
297         }                                               \
298       } func = {};                                      \
299     }                                                   \
300     _GL_EXTERN_C int _gl_cxxalias_dummy
301 #else
302 # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
303     _GL_EXTERN_C int _gl_cxxalias_dummy
304 #endif
305 
306 /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
307    is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
308    except that the C function is picked among a set of overloaded functions,
309    namely the one with rettype2 and parameters2.  Two consecutive casts
310    are used to silence the "cannot find a match" and "invalid conversion"
311    errors that would otherwise occur.  */
312 #if defined __cplusplus && defined GNULIB_NAMESPACE
313   /* The outer cast must be a reinterpret_cast.
314      The inner cast: When the function is defined as a set of overloaded
315      functions, it works as a static_cast<>, choosing the designated variant.
316      When the function is defined as a single variant, it works as a
317      reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
318 # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
319     namespace GNULIB_NAMESPACE                                                \
320     {                                                                         \
321       static const struct _gl_ ## func ## _wrapper                            \
322       {                                                                       \
323         typedef rettype (*type) parameters;                                   \
324                                                                               \
325         inline operator type () const                                         \
326         {                                                                     \
327           return reinterpret_cast<type>((rettype2 (*) parameters2)(::func));  \
328         }                                                                     \
329       } func = {};                                                            \
330     }                                                                         \
331     _GL_EXTERN_C int _gl_cxxalias_dummy
332 #else
333 # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
334     _GL_EXTERN_C int _gl_cxxalias_dummy
335 #endif
336 
337 /* _GL_CXXALIASWARN (func);
338    causes a warning to be emitted when ::func is used but not when
339    GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
340    variants.  */
341 #if defined __cplusplus && defined GNULIB_NAMESPACE
342 # define _GL_CXXALIASWARN(func) \
343    _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
344 # define _GL_CXXALIASWARN_1(func,namespace) \
345    _GL_CXXALIASWARN_2 (func, namespace)
346 /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
347    we enable the warning only when not optimizing.  */
348 # if !__OPTIMIZE__
349 #  define _GL_CXXALIASWARN_2(func,namespace) \
350     _GL_WARN_ON_USE (func, \
351                      "The symbol ::" #func " refers to the system function. " \
352                      "Use " #namespace "::" #func " instead.")
353 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
354 #  define _GL_CXXALIASWARN_2(func,namespace) \
355      extern __typeof__ (func) func
356 # else
357 #  define _GL_CXXALIASWARN_2(func,namespace) \
358      _GL_EXTERN_C int _gl_cxxalias_dummy
359 # endif
360 #else
361 # define _GL_CXXALIASWARN(func) \
362     _GL_EXTERN_C int _gl_cxxalias_dummy
363 #endif
364 
365 /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
366    causes a warning to be emitted when the given overloaded variant of ::func
367    is used but not when GNULIB_NAMESPACE::func is used.  */
368 #if defined __cplusplus && defined GNULIB_NAMESPACE
369 # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
370    _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
371                         GNULIB_NAMESPACE)
372 # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
373    _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
374 /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
375    we enable the warning only when not optimizing.  */
376 # if !__OPTIMIZE__
377 #  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
378     _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
379                          "The symbol ::" #func " refers to the system function. " \
380                          "Use " #namespace "::" #func " instead.")
381 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
382 #  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
383      extern __typeof__ (func) func
384 # else
385 #  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
386      _GL_EXTERN_C int _gl_cxxalias_dummy
387 # endif
388 #else
389 # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
390     _GL_EXTERN_C int _gl_cxxalias_dummy
391 #endif
392 
393 #endif /* _GL_CXXDEFS_H */
394 
395 /* The definition of _GL_ARG_NONNULL is copied here.  */
396 /* A C macro for declaring that specific arguments must not be NULL.
397    Copyright (C) 2009-2018 Free Software Foundation, Inc.
398 
399    This program is free software: you can redistribute it and/or modify it
400    under the terms of the GNU General Public License as published
401    by the Free Software Foundation; either version 3 of the License, or
402    (at your option) any later version.
403 
404    This program is distributed in the hope that it will be useful,
405    but WITHOUT ANY WARRANTY; without even the implied warranty of
406    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
407    General Public License for more details.
408 
409    You should have received a copy of the GNU General Public License
410    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
411 
412 /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
413    that the values passed as arguments n, ..., m must be non-NULL pointers.
414    n = 1 stands for the first argument, n = 2 for the second argument etc.  */
415 #ifndef _GL_ARG_NONNULL
416 # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
417 #  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
418 # else
419 #  define _GL_ARG_NONNULL(params)
420 # endif
421 #endif
422 
423 /* The definition of _GL_WARN_ON_USE is copied here.  */
424 /* A C macro for emitting warnings if a function is used.
425    Copyright (C) 2010-2018 Free Software Foundation, Inc.
426 
427    This program is free software: you can redistribute it and/or modify it
428    under the terms of the GNU General Public License as published
429    by the Free Software Foundation; either version 3 of the License, or
430    (at your option) any later version.
431 
432    This program is distributed in the hope that it will be useful,
433    but WITHOUT ANY WARRANTY; without even the implied warranty of
434    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
435    General Public License for more details.
436 
437    You should have received a copy of the GNU General Public License
438    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
439 
440 /* _GL_WARN_ON_USE (function, "literal string") issues a declaration
441    for FUNCTION which will then trigger a compiler warning containing
442    the text of "literal string" anywhere that function is called, if
443    supported by the compiler.  If the compiler does not support this
444    feature, the macro expands to an unused extern declaration.
445 
446    _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the
447    attribute used in _GL_WARN_ON_USE.  If the compiler does not support
448    this feature, it expands to empty.
449 
450    These macros are useful for marking a function as a potential
451    portability trap, with the intent that "literal string" include
452    instructions on the replacement function that should be used
453    instead.
454    _GL_WARN_ON_USE is for functions with 'extern' linkage.
455    _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline'
456    linkage.
457 
458    However, one of the reasons that a function is a portability trap is
459    if it has the wrong signature.  Declaring FUNCTION with a different
460    signature in C is a compilation error, so this macro must use the
461    same type as any existing declaration so that programs that avoid
462    the problematic FUNCTION do not fail to compile merely because they
463    included a header that poisoned the function.  But this implies that
464    _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already
465    have a declaration.  Use of this macro implies that there must not
466    be any other macro hiding the declaration of FUNCTION; but
467    undefining FUNCTION first is part of the poisoning process anyway
468    (although for symbols that are provided only via a macro, the result
469    is a compilation error rather than a warning containing
470    "literal string").  Also note that in C++, it is only safe to use if
471    FUNCTION has no overloads.
472 
473    For an example, it is possible to poison 'getline' by:
474    - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
475      [getline]) in configure.ac, which potentially defines
476      HAVE_RAW_DECL_GETLINE
477    - adding this code to a header that wraps the system <stdio.h>:
478      #undef getline
479      #if HAVE_RAW_DECL_GETLINE
480      _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
481        "not universally present; use the gnulib module getline");
482      #endif
483 
484    It is not possible to directly poison global variables.  But it is
485    possible to write a wrapper accessor function, and poison that
486    (less common usage, like &environ, will cause a compilation error
487    rather than issue the nice warning, but the end result of informing
488    the developer about their portability problem is still achieved):
489      #if HAVE_RAW_DECL_ENVIRON
490      static char ***
491      rpl_environ (void) { return &environ; }
492      _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
493      # undef environ
494      # define environ (*rpl_environ ())
495      #endif
496    or better (avoiding contradictory use of 'static' and 'extern'):
497      #if HAVE_RAW_DECL_ENVIRON
498      static char ***
499      _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared")
500      rpl_environ (void) { return &environ; }
501      # undef environ
502      # define environ (*rpl_environ ())
503      #endif
504    */
505 #ifndef _GL_WARN_ON_USE
506 
507 # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
508 /* A compiler attribute is available in gcc versions 4.3.0 and later.  */
509 #  define _GL_WARN_ON_USE(function, message) \
510 extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
511 #  define _GL_WARN_ON_USE_ATTRIBUTE(message) \
512   __attribute__ ((__warning__ (message)))
513 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
514 /* Verify the existence of the function.  */
515 #  define _GL_WARN_ON_USE(function, message) \
516 extern __typeof__ (function) function
517 #  define _GL_WARN_ON_USE_ATTRIBUTE(message)
518 # else /* Unsupported.  */
519 #  define _GL_WARN_ON_USE(function, message) \
520 _GL_WARN_EXTERN_C int _gl_warn_on_use
521 #  define _GL_WARN_ON_USE_ATTRIBUTE(message)
522 # endif
523 #endif
524 
525 /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
526    is like _GL_WARN_ON_USE (function, "string"), except that the function is
527    declared with the given prototype, consisting of return type, parameters,
528    and attributes.
529    This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
530    not work in this case.  */
531 #ifndef _GL_WARN_ON_USE_CXX
532 # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
533 #  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
534 extern rettype function parameters_and_attributes \
535      __attribute__ ((__warning__ (msg)))
536 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
537 /* Verify the existence of the function.  */
538 #  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
539 extern rettype function parameters_and_attributes
540 # else /* Unsupported.  */
541 #  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
542 _GL_WARN_EXTERN_C int _gl_warn_on_use
543 # endif
544 #endif
545 
546 /* _GL_WARN_EXTERN_C declaration;
547    performs the declaration with C linkage.  */
548 #ifndef _GL_WARN_EXTERN_C
549 # if defined __cplusplus
550 #  define _GL_WARN_EXTERN_C extern "C"
551 # else
552 #  define _GL_WARN_EXTERN_C extern
553 # endif
554 #endif
555 
556 
557 /* Declare overridden functions.  */
558 
559 #if 1
560 # if 1
561 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
562 #   undef fcntl
563 #   define fcntl rpl_fcntl
564 #  endif
565 _GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...));
566 _GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...));
567 # else
568 #  if !1
569 _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...));
570 #  endif
571 _GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...));
572 # endif
573 _GL_CXXALIASWARN (fcntl);
574 #elif defined GNULIB_POSIXCHECK
575 # undef fcntl
576 # if HAVE_RAW_DECL_FCNTL
577 _GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - "
578                  "use gnulib module fcntl for portability");
579 # endif
580 #endif
581 
582 #if 1
583 # if 0
584 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
585 #   undef open
586 #   define open rpl_open
587 #  endif
588 _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
589                              _GL_ARG_NONNULL ((1)));
590 _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
591 # else
592 _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
593 # endif
594 /* On HP-UX 11, in C++ mode, open() is defined as an inline function with a
595    default argument.  _GL_CXXALIASWARN does not work in this case.  */
596 # if !defined __hpux
597 _GL_CXXALIASWARN (open);
598 # endif
599 #elif defined GNULIB_POSIXCHECK
600 # undef open
601 /* Assume open is always declared.  */
602 _GL_WARN_ON_USE (open, "open is not always POSIX compliant - "
603                  "use gnulib module open for portability");
604 #endif
605 
606 #if 0
607 # if 0
608 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
609 #   undef openat
610 #   define openat rpl_openat
611 #  endif
612 _GL_FUNCDECL_RPL (openat, int,
613                   (int fd, char const *file, int flags, /* mode_t mode */ ...)
614                   _GL_ARG_NONNULL ((2)));
615 _GL_CXXALIAS_RPL (openat, int,
616                   (int fd, char const *file, int flags, /* mode_t mode */ ...));
617 # else
618 #  if !1
619 _GL_FUNCDECL_SYS (openat, int,
620                   (int fd, char const *file, int flags, /* mode_t mode */ ...)
621                   _GL_ARG_NONNULL ((2)));
622 #  endif
623 _GL_CXXALIAS_SYS (openat, int,
624                   (int fd, char const *file, int flags, /* mode_t mode */ ...));
625 # endif
626 _GL_CXXALIASWARN (openat);
627 #elif defined GNULIB_POSIXCHECK
628 # undef openat
629 # if HAVE_RAW_DECL_OPENAT
630 _GL_WARN_ON_USE (openat, "openat is not portable - "
631                  "use gnulib module openat for portability");
632 # endif
633 #endif
634 
635 
636 /* Fix up the FD_* macros, only known to be missing on mingw.  */
637 
638 #ifndef FD_CLOEXEC
639 # define FD_CLOEXEC 1
640 #endif
641 
642 /* Fix up the supported F_* macros.  Intentionally leave other F_*
643    macros undefined.  Only known to be missing on mingw.  */
644 
645 #ifndef F_DUPFD_CLOEXEC
646 # define F_DUPFD_CLOEXEC 0x40000000
647 /* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise.  */
648 # define GNULIB_defined_F_DUPFD_CLOEXEC 1
649 #else
650 # define GNULIB_defined_F_DUPFD_CLOEXEC 0
651 #endif
652 
653 #ifndef F_DUPFD
654 # define F_DUPFD 1
655 #endif
656 
657 #ifndef F_GETFD
658 # define F_GETFD 2
659 #endif
660 
661 /* Fix up the O_* macros.  */
662 
663 /* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT
664    to values outside 'int' range, so omit these misdefinitions.
665    But avoid namespace pollution on non-AIX systems.  */
666 #ifdef _AIX
667 # include <limits.h>
668 # if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX)
669 #  undef O_CLOEXEC
670 # endif
671 # if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX)
672 #  undef O_NOFOLLOW
673 # endif
674 # if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX)
675 #  undef O_TTY_INIT
676 # endif
677 #endif
678 
679 #if !defined O_DIRECT && defined O_DIRECTIO
680 /* Tru64 spells it 'O_DIRECTIO'.  */
681 # define O_DIRECT O_DIRECTIO
682 #endif
683 
684 #if !defined O_CLOEXEC && defined O_NOINHERIT
685 /* Mingw spells it 'O_NOINHERIT'.  */
686 # define O_CLOEXEC O_NOINHERIT
687 #endif
688 
689 #ifndef O_CLOEXEC
690 # define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags.  */
691 # define GNULIB_defined_O_CLOEXEC 1
692 #else
693 # define GNULIB_defined_O_CLOEXEC 0
694 #endif
695 
696 #ifndef O_DIRECT
697 # define O_DIRECT 0
698 #endif
699 
700 #ifndef O_DIRECTORY
701 # define O_DIRECTORY 0
702 #endif
703 
704 #ifndef O_DSYNC
705 # define O_DSYNC 0
706 #endif
707 
708 #ifndef O_EXEC
709 # define O_EXEC O_RDONLY /* This is often close enough in older systems.  */
710 #endif
711 
712 #ifndef O_IGNORE_CTTY
713 # define O_IGNORE_CTTY 0
714 #endif
715 
716 #ifndef O_NDELAY
717 # define O_NDELAY 0
718 #endif
719 
720 #ifndef O_NOATIME
721 # define O_NOATIME 0
722 #endif
723 
724 #ifndef O_NONBLOCK
725 # define O_NONBLOCK O_NDELAY
726 #endif
727 
728 /* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero
729    value of O_NONBLOCK.  Otherwise, O_NONBLOCK is defined (above) to O_NDELAY
730    or to 0 as fallback.  */
731 #if 0
732 # if O_NONBLOCK
733 #  define GNULIB_defined_O_NONBLOCK 0
734 # else
735 #  define GNULIB_defined_O_NONBLOCK 1
736 #  undef O_NONBLOCK
737 #  define O_NONBLOCK 0x40000000
738 # endif
739 #endif
740 
741 #ifndef O_NOCTTY
742 # define O_NOCTTY 0
743 #endif
744 
745 #ifndef O_NOFOLLOW
746 # define O_NOFOLLOW 0
747 #endif
748 
749 #ifndef O_NOLINK
750 # define O_NOLINK 0
751 #endif
752 
753 #ifndef O_NOLINKS
754 # define O_NOLINKS 0
755 #endif
756 
757 #ifndef O_NOTRANS
758 # define O_NOTRANS 0
759 #endif
760 
761 #ifndef O_RSYNC
762 # define O_RSYNC 0
763 #endif
764 
765 #ifndef O_SEARCH
766 # define O_SEARCH O_RDONLY /* This is often close enough in older systems.  */
767 #endif
768 
769 #ifndef O_SYNC
770 # define O_SYNC 0
771 #endif
772 
773 #ifndef O_TTY_INIT
774 # define O_TTY_INIT 0
775 #endif
776 
777 #if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
778 # undef O_ACCMODE
779 # define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
780 #endif
781 
782 /* For systems that distinguish between text and binary I/O.
783    O_BINARY is usually declared in fcntl.h  */
784 #if !defined O_BINARY && defined _O_BINARY
785   /* For MSC-compatible compilers.  */
786 # define O_BINARY _O_BINARY
787 # define O_TEXT _O_TEXT
788 #endif
789 
790 #if defined __BEOS__ || defined __HAIKU__
791   /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect.  */
792 # undef O_BINARY
793 # undef O_TEXT
794 #endif
795 
796 #ifndef O_BINARY
797 # define O_BINARY 0
798 # define O_TEXT 0
799 #endif
800 
801 /* Fix up the AT_* macros.  */
802 
803 /* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive.  Its
804    value exceeds INT_MAX, so its use as an int doesn't conform to the
805    C standard, and GCC and Sun C complain in some cases.  If the bug
806    is present, undef AT_FDCWD here, so it can be redefined below.  */
807 #if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
808 # undef AT_FDCWD
809 #endif
810 
811 /* Use the same bit pattern as Solaris 9, but with the proper
812    signedness.  The bit pattern is important, in case this actually is
813    Solaris with the above workaround.  */
814 #ifndef AT_FDCWD
815 # define AT_FDCWD (-3041965)
816 #endif
817 
818 /* Use the same values as Solaris 9.  This shouldn't matter, but
819    there's no real reason to differ.  */
820 #ifndef AT_SYMLINK_NOFOLLOW
821 # define AT_SYMLINK_NOFOLLOW 4096
822 #endif
823 
824 #ifndef AT_REMOVEDIR
825 # define AT_REMOVEDIR 1
826 #endif
827 
828 /* Solaris 9 lacks these two, so just pick unique values.  */
829 #ifndef AT_SYMLINK_FOLLOW
830 # define AT_SYMLINK_FOLLOW 2
831 #endif
832 
833 #ifndef AT_EACCESS
834 # define AT_EACCESS 4
835 #endif
836 
837 
838 #endif /* _GL_FCNTL_H */
839 #endif /* _GL_FCNTL_H */
840 #endif
841