summaryrefslogtreecommitdiffstats
path: root/gl/fcntl.in.h
diff options
context:
space:
mode:
Diffstat (limited to 'gl/fcntl.in.h')
-rw-r--r--gl/fcntl.in.h165
1 files changed, 150 insertions, 15 deletions
diff --git a/gl/fcntl.in.h b/gl/fcntl.in.h
index fd7520e8..8fb78522 100644
--- a/gl/fcntl.in.h
+++ b/gl/fcntl.in.h
@@ -1,6 +1,6 @@
1/* Like <fcntl.h>, but with non-working flags defined to 0. 1/* Like <fcntl.h>, but with non-working flags defined to 0.
2 2
3 Copyright (C) 2006-2008 Free Software Foundation, Inc. 3 Copyright (C) 2006-2010 Free Software Foundation, Inc.
4 4
5 This program is free software: you can redistribute it and/or modify 5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
@@ -25,8 +25,9 @@
25/* Special invocation convention. */ 25/* Special invocation convention. */
26 26
27#include <sys/types.h> 27#include <sys/types.h>
28#include <sys/stat.h> 28#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */
29#include <unistd.h> 29# include <sys/stat.h>
30#endif
30#@INCLUDE_NEXT@ @NEXT_FCNTL_H@ 31#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
31 32
32#else 33#else
@@ -35,38 +36,126 @@
35#ifndef _GL_FCNTL_H 36#ifndef _GL_FCNTL_H
36 37
37#include <sys/types.h> 38#include <sys/types.h>
38#include <sys/stat.h> 39#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */
39#include <unistd.h> 40# include <sys/stat.h>
41#endif
40/* The include_next requires a split double-inclusion guard. */ 42/* The include_next requires a split double-inclusion guard. */
41#@INCLUDE_NEXT@ @NEXT_FCNTL_H@ 43#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
42 44
43#ifndef _GL_FCNTL_H 45#ifndef _GL_FCNTL_H
44#define _GL_FCNTL_H 46#define _GL_FCNTL_H
45 47
48#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */
49# include <unistd.h>
50#endif
51
52
53/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
54
55/* The definition of _GL_ARG_NONNULL is copied here. */
56
57/* The definition of _GL_WARN_ON_USE is copied here. */
58
46 59
47/* Declare overridden functions. */ 60/* Declare overridden functions. */
48 61
49#ifdef __cplusplus 62#if @GNULIB_FCNTL@
50extern "C" { 63# if @REPLACE_FCNTL@
64# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
65# undef fcntl
66# define fcntl rpl_fcntl
67# endif
68_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...));
69_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...));
70# else
71# if !@HAVE_FCNTL@
72_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...));
73# endif
74_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...));
75# endif
76_GL_CXXALIASWARN (fcntl);
77#elif defined GNULIB_POSIXCHECK
78# undef fcntl
79# if HAVE_RAW_DECL_FCNTL
80_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - "
81 "use gnulib module fcntl for portability");
82# endif
51#endif 83#endif
52 84
53#if @GNULIB_OPEN@ 85#if @GNULIB_OPEN@
54# if @REPLACE_OPEN@ 86# if @REPLACE_OPEN@
55# undef open 87# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
56# define open rpl_open 88# undef open
57extern int open (const char *filename, int flags, ...); 89# define open rpl_open
90# endif
91_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
92 _GL_ARG_NONNULL ((1)));
93_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
94# else
95_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
58# endif 96# endif
97_GL_CXXALIASWARN (open);
98#elif defined GNULIB_POSIXCHECK
99# undef open
100/* Assume open is always declared. */
101_GL_WARN_ON_USE (open, "open is not always POSIX compliant - "
102 "use gnulib module open for portability");
59#endif 103#endif
60 104
61#ifdef FCHDIR_REPLACEMENT 105#if @GNULIB_OPENAT@
62/* gnulib internal function. */ 106# if @REPLACE_OPENAT@
63extern void _gl_register_fd (int fd, const char *filename); 107# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
108# undef openat
109# define openat rpl_openat
110# endif
111_GL_FUNCDECL_RPL (openat, int,
112 (int fd, char const *file, int flags, /* mode_t mode */ ...)
113 _GL_ARG_NONNULL ((2)));
114_GL_CXXALIAS_RPL (openat, int,
115 (int fd, char const *file, int flags, /* mode_t mode */ ...));
116# else
117# if !@HAVE_OPENAT@
118_GL_FUNCDECL_SYS (openat, int,
119 (int fd, char const *file, int flags, /* mode_t mode */ ...)
120 _GL_ARG_NONNULL ((2)));
121# endif
122_GL_CXXALIAS_SYS (openat, int,
123 (int fd, char const *file, int flags, /* mode_t mode */ ...));
124# endif
125_GL_CXXALIASWARN (openat);
126#elif defined GNULIB_POSIXCHECK
127# undef openat
128# if HAVE_RAW_DECL_OPENAT
129_GL_WARN_ON_USE (openat, "openat is not portable - "
130 "use gnulib module openat for portability");
131# endif
132#endif
133
134
135/* Fix up the FD_* macros, only known to be missing on mingw. */
136
137#ifndef FD_CLOEXEC
138# define FD_CLOEXEC 1
139#endif
140
141/* Fix up the supported F_* macros. Intentionally leave other F_*
142 macros undefined. Only known to be missing on mingw. */
143
144#ifndef F_DUPFD_CLOEXEC
145# define F_DUPFD_CLOEXEC 0x40000000
146/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */
147# define GNULIB_defined_F_DUPFD_CLOEXEC 1
148#else
149# define GNULIB_defined_F_DUPFD_CLOEXEC 0
64#endif 150#endif
65 151
66#ifdef __cplusplus 152#ifndef F_DUPFD
67} 153# define F_DUPFD 1
68#endif 154#endif
69 155
156#ifndef F_GETFD
157# define F_GETFD 2
158#endif
70 159
71/* Fix up the O_* macros. */ 160/* Fix up the O_* macros. */
72 161
@@ -75,6 +164,12 @@ extern void _gl_register_fd (int fd, const char *filename);
75# define O_DIRECT O_DIRECTIO 164# define O_DIRECT O_DIRECTIO
76#endif 165#endif
77 166
167#if !defined O_CLOEXEC && defined O_NOINHERIT
168/* Mingw spells it `O_NOINHERIT'. Intentionally leave it
169 undefined if not available. */
170# define O_CLOEXEC O_NOINHERIT
171#endif
172
78#ifndef O_DIRECT 173#ifndef O_DIRECT
79# define O_DIRECT 0 174# define O_DIRECT 0
80#endif 175#endif
@@ -119,6 +214,10 @@ extern void _gl_register_fd (int fd, const char *filename);
119# define O_SYNC 0 214# define O_SYNC 0
120#endif 215#endif
121 216
217#ifndef O_TTY_INIT
218# define O_TTY_INIT 0
219#endif
220
122/* For systems that distinguish between text and binary I/O. 221/* For systems that distinguish between text and binary I/O.
123 O_BINARY is usually declared in fcntl.h */ 222 O_BINARY is usually declared in fcntl.h */
124#if !defined O_BINARY && defined _O_BINARY 223#if !defined O_BINARY && defined _O_BINARY
@@ -138,6 +237,42 @@ extern void _gl_register_fd (int fd, const char *filename);
138# define O_TEXT 0 237# define O_TEXT 0
139#endif 238#endif
140 239
240/* Fix up the AT_* macros. */
241
242/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its
243 value exceeds INT_MAX, so its use as an int doesn't conform to the
244 C standard, and GCC and Sun C complain in some cases. If the bug
245 is present, undef AT_FDCWD here, so it can be redefined below. */
246#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
247# undef AT_FDCWD
248#endif
249
250/* Use the same bit pattern as Solaris 9, but with the proper
251 signedness. The bit pattern is important, in case this actually is
252 Solaris with the above workaround. */
253#ifndef AT_FDCWD
254# define AT_FDCWD (-3041965)
255#endif
256
257/* Use the same values as Solaris 9. This shouldn't matter, but
258 there's no real reason to differ. */
259#ifndef AT_SYMLINK_NOFOLLOW
260# define AT_SYMLINK_NOFOLLOW 4096
261#endif
262
263#ifndef AT_REMOVEDIR
264# define AT_REMOVEDIR 1
265#endif
266
267/* Solaris 9 lacks these two, so just pick unique values. */
268#ifndef AT_SYMLINK_FOLLOW
269# define AT_SYMLINK_FOLLOW 2
270#endif
271
272#ifndef AT_EACCESS
273# define AT_EACCESS 4
274#endif
275
141 276
142#endif /* _GL_FCNTL_H */ 277#endif /* _GL_FCNTL_H */
143#endif /* _GL_FCNTL_H */ 278#endif /* _GL_FCNTL_H */