1 /* DO NOT EDIT! GENERATED AUTOMATICALLY! */
2 /* Provide a more complete sys/stat header file.
3 Copyright (C) 2005-2012 Free Software Foundation, Inc.
4
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
7 the Free Software Foundation; either version 3, or (at your option)
8 any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, see <http://www.gnu.org/licenses/>. */
17
18 /* Written by Eric Blake, Paul Eggert, and Jim Meyering. */
19
20 /* This file is supposed to be used on platforms where <sys/stat.h> is
21 incomplete. It is intended to provide definitions and prototypes
22 needed by an application. Start with what the system provides. */
23
24 #if __GNUC__ >= 3
25 #pragma GCC system_header
26 #endif
27
28
29 #if defined __need_system_sys_stat_h
30 /* Special invocation convention. */
31
32 #include_next <sys/stat.h>
33
34 #else
35 /* Normal invocation convention. */
36
37 #ifndef _GL_SYS_STAT_H
38
39 /* Get nlink_t.
40 May also define off_t to a 64-bit type on native Windows. */
41 #include <sys/types.h>
42
43 /* Get struct timespec. */
44 #include <time.h>
45
46 /* The include_next requires a split double-inclusion guard. */
47 #include_next <sys/stat.h>
48
49 #ifndef _GL_SYS_STAT_H
50 #define _GL_SYS_STAT_H
51
52 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
53 #ifndef _GL_CXXDEFS_H
54 #define _GL_CXXDEFS_H
55
56 /* The three most frequent use cases of these macros are:
57
58 * For providing a substitute for a function that is missing on some
59 platforms, but is declared and works fine on the platforms on which
60 it exists:
61
62 #if @GNULIB_FOO@
63 # if !@HAVE_FOO@
64 _GL_FUNCDECL_SYS (foo, ...);
65 # endif
66 _GL_CXXALIAS_SYS (foo, ...);
67 _GL_CXXALIASWARN (foo);
68 #elif defined GNULIB_POSIXCHECK
69 ...
70 #endif
71
72 * For providing a replacement for a function that exists on all platforms,
73 but is broken/insufficient and needs to be replaced on some platforms:
74
75 #if @GNULIB_FOO@
76 # if @REPLACE_FOO@
77 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
78 # undef foo
79 # define foo rpl_foo
80 # endif
81 _GL_FUNCDECL_RPL (foo, ...);
82 _GL_CXXALIAS_RPL (foo, ...);
83 # else
84 _GL_CXXALIAS_SYS (foo, ...);
85 # endif
86 _GL_CXXALIASWARN (foo);
87 #elif defined GNULIB_POSIXCHECK
88 ...
89 #endif
90
91 * For providing a replacement for a function that exists on some platforms
92 but is broken/insufficient and needs to be replaced on some of them and
93 is additionally either missing or undeclared on some other platforms:
94
95 #if @GNULIB_FOO@
96 # if @REPLACE_FOO@
97 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
98 # undef foo
99 # define foo rpl_foo
100 # endif
101 _GL_FUNCDECL_RPL (foo, ...);
102 _GL_CXXALIAS_RPL (foo, ...);
103 # else
104 # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@
105 _GL_FUNCDECL_SYS (foo, ...);
106 # endif
107 _GL_CXXALIAS_SYS (foo, ...);
108 # endif
109 _GL_CXXALIASWARN (foo);
110 #elif defined GNULIB_POSIXCHECK
111 ...
112 #endif
113 */
114
115 /* _GL_EXTERN_C declaration;
116 performs the declaration with C linkage. */
117 #if defined __cplusplus
118 # define _GL_EXTERN_C extern "C"
119 #else
120 # define _GL_EXTERN_C extern
121 #endif
122
123 /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
124 declares a replacement function, named rpl_func, with the given prototype,
125 consisting of return type, parameters, and attributes.
126 Example:
127 _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
128 _GL_ARG_NONNULL ((1)));
129 */
130 #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
131 _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
132 #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
133 _GL_EXTERN_C rettype rpl_func parameters_and_attributes
134
135 /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
136 declares the system function, named func, with the given prototype,
137 consisting of return type, parameters, and attributes.
138 Example:
139 _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
140 _GL_ARG_NONNULL ((1)));
141 */
142 #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
143 _GL_EXTERN_C rettype func parameters_and_attributes
144
145 /* _GL_CXXALIAS_RPL (func, rettype, parameters);
146 declares a C++ alias called GNULIB_NAMESPACE::func
147 that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
148 Example:
149 _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
150 */
151 #define _GL_CXXALIAS_RPL(func,rettype,parameters) \
152 _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
153 #if defined __cplusplus && defined GNULIB_NAMESPACE
154 # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
155 namespace GNULIB_NAMESPACE \
156 { \
157 rettype (*const func) parameters = ::rpl_func; \
158 } \
159 _GL_EXTERN_C int _gl_cxxalias_dummy
160 #else
161 # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
162 _GL_EXTERN_C int _gl_cxxalias_dummy
163 #endif
164
165 /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
166 is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
167 except that the C function rpl_func may have a slightly different
168 declaration. A cast is used to silence the "invalid conversion" error
169 that would otherwise occur. */
170 #if defined __cplusplus && defined GNULIB_NAMESPACE
171 # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
172 namespace GNULIB_NAMESPACE \
173 { \
174 rettype (*const func) parameters = \
175 reinterpret_cast<rettype(*)parameters>(::rpl_func); \
176 } \
177 _GL_EXTERN_C int _gl_cxxalias_dummy
178 #else
179 # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
180 _GL_EXTERN_C int _gl_cxxalias_dummy
181 #endif
182
183 /* _GL_CXXALIAS_SYS (func, rettype, parameters);
184 declares a C++ alias called GNULIB_NAMESPACE::func
185 that redirects to the system provided function func, if GNULIB_NAMESPACE
186 is defined.
187 Example:
188 _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
189 */
190 #if defined __cplusplus && defined GNULIB_NAMESPACE
191 /* If we were to write
192 rettype (*const func) parameters = ::func;
193 like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
194 better (remove an indirection through a 'static' pointer variable),
195 but then the _GL_CXXALIASWARN macro below would cause a warning not only
196 for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */
197 # define _GL_CXXALIAS_SYS(func,rettype,parameters) \
198 namespace GNULIB_NAMESPACE \
199 { \
200 static rettype (*func) parameters = ::func; \
201 } \
202 _GL_EXTERN_C int _gl_cxxalias_dummy
203 #else
204 # define _GL_CXXALIAS_SYS(func,rettype,parameters) \
205 _GL_EXTERN_C int _gl_cxxalias_dummy
206 #endif
207
208 /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
209 is like _GL_CXXALIAS_SYS (func, rettype, parameters);
210 except that the C function func may have a slightly different declaration.
211 A cast is used to silence the "invalid conversion" error that would
212 otherwise occur. */
213 #if defined __cplusplus && defined GNULIB_NAMESPACE
214 # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
215 namespace GNULIB_NAMESPACE \
216 { \
217 static rettype (*func) parameters = \
218 reinterpret_cast<rettype(*)parameters>(::func); \
219 } \
220 _GL_EXTERN_C int _gl_cxxalias_dummy
221 #else
222 # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
223 _GL_EXTERN_C int _gl_cxxalias_dummy
224 #endif
225
226 /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
227 is like _GL_CXXALIAS_SYS (func, rettype, parameters);
228 except that the C function is picked among a set of overloaded functions,
229 namely the one with rettype2 and parameters2. Two consecutive casts
230 are used to silence the "cannot find a match" and "invalid conversion"
231 errors that would otherwise occur. */
232 #if defined __cplusplus && defined GNULIB_NAMESPACE
233 /* The outer cast must be a reinterpret_cast.
234 The inner cast: When the function is defined as a set of overloaded
235 functions, it works as a static_cast<>, choosing the designated variant.
236 When the function is defined as a single variant, it works as a
237 reinterpret_cast<>. The parenthesized cast syntax works both ways. */
238 # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
239 namespace GNULIB_NAMESPACE \
240 { \
241 static rettype (*func) parameters = \
242 reinterpret_cast<rettype(*)parameters>( \
243 (rettype2(*)parameters2)(::func)); \
244 } \
245 _GL_EXTERN_C int _gl_cxxalias_dummy
246 #else
247 # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
248 _GL_EXTERN_C int _gl_cxxalias_dummy
249 #endif
250
251 /* _GL_CXXALIASWARN (func);
252 causes a warning to be emitted when ::func is used but not when
253 GNULIB_NAMESPACE::func is used. func must be defined without overloaded
254 variants. */
255 #if defined __cplusplus && defined GNULIB_NAMESPACE
256 # define _GL_CXXALIASWARN(func) \
257 _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
258 # define _GL_CXXALIASWARN_1(func,namespace) \
259 _GL_CXXALIASWARN_2 (func, namespace)
260 /* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
261 we enable the warning only when not optimizing. */
262 # if !__OPTIMIZE__
263 # define _GL_CXXALIASWARN_2(func,namespace) \
264 _GL_WARN_ON_USE (func, \
265 "The symbol ::" #func " refers to the system function. " \
266 "Use " #namespace "::" #func " instead.")
267 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
268 # define _GL_CXXALIASWARN_2(func,namespace) \
269 extern __typeof__ (func) func
270 # else
271 # define _GL_CXXALIASWARN_2(func,namespace) \
272 _GL_EXTERN_C int _gl_cxxalias_dummy
273 # endif
274 #else
275 # define _GL_CXXALIASWARN(func) \
276 _GL_EXTERN_C int _gl_cxxalias_dummy
277 #endif
278
279 /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
280 causes a warning to be emitted when the given overloaded variant of ::func
281 is used but not when GNULIB_NAMESPACE::func is used. */
282 #if defined __cplusplus && defined GNULIB_NAMESPACE
283 # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
284 _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
285 GNULIB_NAMESPACE)
286 # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
287 _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
288 /* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
289 we enable the warning only when not optimizing. */
290 # if !__OPTIMIZE__
291 # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
292 _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
293 "The symbol ::" #func " refers to the system function. " \
294 "Use " #namespace "::" #func " instead.")
295 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
296 # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
297 extern __typeof__ (func) func
298 # else
299 # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
300 _GL_EXTERN_C int _gl_cxxalias_dummy
301 # endif
302 #else
303 # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
304 _GL_EXTERN_C int _gl_cxxalias_dummy
305 #endif
306
307 #endif /* _GL_CXXDEFS_H */
308
309 /* The definition of _GL_ARG_NONNULL is copied here. */
310 /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
311 that the values passed as arguments n, ..., m must be non-NULL pointers.
312 n = 1 stands for the first argument, n = 2 for the second argument etc. */
313 #ifndef _GL_ARG_NONNULL
314 # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
315 # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
316 # else
317 # define _GL_ARG_NONNULL(params)
318 # endif
319 #endif
320
321 /* The definition of _GL_WARN_ON_USE is copied here. */
322 #ifndef _GL_WARN_ON_USE
323
324 # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
325 /* A compiler attribute is available in gcc versions 4.3.0 and later. */
326 # define _GL_WARN_ON_USE(function, message) \
327 extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
328 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
329 /* Verify the existence of the function. */
330 # define _GL_WARN_ON_USE(function, message) \
331 extern __typeof__ (function) function
332 # else /* Unsupported. */
333 # define _GL_WARN_ON_USE(function, message) \
334 _GL_WARN_EXTERN_C int _gl_warn_on_use
335 # endif
336 #endif
337
338 /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
339 is like _GL_WARN_ON_USE (function, "string"), except that the function is
340 declared with the given prototype, consisting of return type, parameters,
341 and attributes.
342 This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
343 not work in this case. */
344 #ifndef _GL_WARN_ON_USE_CXX
345 # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
346 # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
347 extern rettype function parameters_and_attributes \
348 __attribute__ ((__warning__ (msg)))
349 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
350 /* Verify the existence of the function. */
351 # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
352 extern rettype function parameters_and_attributes
353 # else /* Unsupported. */
354 # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
355 _GL_WARN_EXTERN_C int _gl_warn_on_use
356 # endif
357 #endif
358
359 /* _GL_WARN_EXTERN_C declaration;
360 performs the declaration with C linkage. */
361 #ifndef _GL_WARN_EXTERN_C
362 # if defined __cplusplus
363 # define _GL_WARN_EXTERN_C extern "C"
364 # else
365 # define _GL_WARN_EXTERN_C extern
366 # endif
367 #endif
368
369 /* Before doing "#define mkdir rpl_mkdir" below, we need to include all
370 headers that may declare mkdir(). Native Windows platforms declare mkdir
371 in <io.h> and/or <direct.h>, not in <unistd.h>. */
372 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
373 # include <io.h> /* mingw32, mingw64 */
374 # include <direct.h> /* mingw64, MSVC 9 */
375 #endif
376
377 /* Native Windows platforms declare umask() in <io.h>. */
378 #if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
379 # include <io.h>
380 #endif
381
382 /* Large File Support on native Windows. */
383 #if 0
384 # define stat _stati64
385 #endif
386
387 #ifndef S_IFIFO
388 # ifdef _S_IFIFO
389 # define S_IFIFO _S_IFIFO
390 # endif
391 #endif
392
393 #ifndef S_IFMT
394 # define S_IFMT 0170000
395 #endif
396
397 #if STAT_MACROS_BROKEN
398 # undef S_ISBLK
399 # undef S_ISCHR
400 # undef S_ISDIR
401 # undef S_ISFIFO
402 # undef S_ISLNK
403 # undef S_ISNAM
404 # undef S_ISMPB
405 # undef S_ISMPC
406 # undef S_ISNWK
407 # undef S_ISREG
408 # undef S_ISSOCK
409 #endif
410
411 #ifndef S_ISBLK
412 # ifdef S_IFBLK
413 # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
414 # else
415 # define S_ISBLK(m) 0
416 # endif
417 #endif
418
419 #ifndef S_ISCHR
420 # ifdef S_IFCHR
421 # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
422 # else
423 # define S_ISCHR(m) 0
424 # endif
425 #endif
426
427 #ifndef S_ISDIR
428 # ifdef S_IFDIR
429 # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
430 # else
431 # define S_ISDIR(m) 0
432 # endif
433 #endif
434
435 #ifndef S_ISDOOR /* Solaris 2.5 and up */
436 # define S_ISDOOR(m) 0
437 #endif
438
439 #ifndef S_ISFIFO
440 # ifdef S_IFIFO
441 # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
442 # else
443 # define S_ISFIFO(m) 0
444 # endif
445 #endif
446
447 #ifndef S_ISLNK
448 # ifdef S_IFLNK
449 # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
450 # else
451 # define S_ISLNK(m) 0
452 # endif
453 #endif
454
455 #ifndef S_ISMPB /* V7 */
456 # ifdef S_IFMPB
457 # define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
458 # define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
459 # else
460 # define S_ISMPB(m) 0
461 # define S_ISMPC(m) 0
462 # endif
463 #endif
464
465 #ifndef S_ISNAM /* Xenix */
466 # ifdef S_IFNAM
467 # define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
468 # else
469 # define S_ISNAM(m) 0
470 # endif
471 #endif
472
473 #ifndef S_ISNWK /* HP/UX */
474 # ifdef S_IFNWK
475 # define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
476 # else
477 # define S_ISNWK(m) 0
478 # endif
479 #endif
480
481 #ifndef S_ISPORT /* Solaris 10 and up */
482 # define S_ISPORT(m) 0
483 #endif
484
485 #ifndef S_ISREG
486 # ifdef S_IFREG
487 # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
488 # else
489 # define S_ISREG(m) 0
490 # endif
491 #endif
492
493 #ifndef S_ISSOCK
494 # ifdef S_IFSOCK
495 # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
496 # else
497 # define S_ISSOCK(m) 0
498 # endif
499 #endif
500
501
502 #ifndef S_TYPEISMQ
503 # define S_TYPEISMQ(p) 0
504 #endif
505
506 #ifndef S_TYPEISTMO
507 # define S_TYPEISTMO(p) 0
508 #endif
509
510
511 #ifndef S_TYPEISSEM
512 # ifdef S_INSEM
513 # define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
514 # else
515 # define S_TYPEISSEM(p) 0
516 # endif
517 #endif
518
519 #ifndef S_TYPEISSHM
520 # ifdef S_INSHD
521 # define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
522 # else
523 # define S_TYPEISSHM(p) 0
524 # endif
525 #endif
526
527 /* high performance ("contiguous data") */
528 #ifndef S_ISCTG
529 # define S_ISCTG(p) 0
530 #endif
531
532 /* Cray DMF (data migration facility): off line, with data */
533 #ifndef S_ISOFD
534 # define S_ISOFD(p) 0
535 #endif
536
537 /* Cray DMF (data migration facility): off line, with no data */
538 #ifndef S_ISOFL
539 # define S_ISOFL(p) 0
540 #endif
541
542 /* 4.4BSD whiteout */
543 #ifndef S_ISWHT
544 # define S_ISWHT(m) 0
545 #endif
546
547 /* If any of the following are undefined,
548 define them to their de facto standard values. */
549 #if !S_ISUID
550 # define S_ISUID 04000
551 #endif
552 #if !S_ISGID
553 # define S_ISGID 02000
554 #endif
555
556 /* S_ISVTX is a common extension to POSIX. */
557 #ifndef S_ISVTX
558 # define S_ISVTX 01000
559 #endif
560
561 #if !S_IRUSR && S_IREAD
562 # define S_IRUSR S_IREAD
563 #endif
564 #if !S_IRUSR
565 # define S_IRUSR 00400
566 #endif
567 #if !S_IRGRP
568 # define S_IRGRP (S_IRUSR >> 3)
569 #endif
570 #if !S_IROTH
571 # define S_IROTH (S_IRUSR >> 6)
572 #endif
573
574 #if !S_IWUSR && S_IWRITE
575 # define S_IWUSR S_IWRITE
576 #endif
577 #if !S_IWUSR
578 # define S_IWUSR 00200
579 #endif
580 #if !S_IWGRP
581 # define S_IWGRP (S_IWUSR >> 3)
582 #endif
583 #if !S_IWOTH
584 # define S_IWOTH (S_IWUSR >> 6)
585 #endif
586
587 #if !S_IXUSR && S_IEXEC
588 # define S_IXUSR S_IEXEC
589 #endif
590 #if !S_IXUSR
591 # define S_IXUSR 00100
592 #endif
593 #if !S_IXGRP
594 # define S_IXGRP (S_IXUSR >> 3)
595 #endif
596 #if !S_IXOTH
597 # define S_IXOTH (S_IXUSR >> 6)
598 #endif
599
600 #if !S_IRWXU
601 # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
602 #endif
603 #if !S_IRWXG
604 # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
605 #endif
606 #if !S_IRWXO
607 # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
608 #endif
609
610 /* S_IXUGO is a common extension to POSIX. */
611 #if !S_IXUGO
612 # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
613 #endif
614
615 #ifndef S_IRWXUGO
616 # define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
617 #endif
618
619 /* Macros for futimens and utimensat. */
620 #ifndef UTIME_NOW
621 # define UTIME_NOW (-1)
622 # define UTIME_OMIT (-2)
623 #endif
624
625
626 #if 0
627 # if !1
628 _GL_FUNCDECL_SYS (fchmodat, int,
629 (int fd, char const *file, mode_t mode, int flag)
630 _GL_ARG_NONNULL ((2)));
631 # endif
632 _GL_CXXALIAS_SYS (fchmodat, int,
633 (int fd, char const *file, mode_t mode, int flag));
634 _GL_CXXALIASWARN (fchmodat);
635 #elif defined GNULIB_POSIXCHECK
636 # undef fchmodat
637 # if HAVE_RAW_DECL_FCHMODAT
638 _GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - "
639 "use gnulib module openat for portability");
640 # endif
641 #endif
642
643
644 #if 1
645 # if 0
646 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
647 # undef fstat
648 # define fstat rpl_fstat
649 # endif
650 _GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2)));
651 _GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf));
652 # else
653 _GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
654 # endif
655 _GL_CXXALIASWARN (fstat);
656 #elif 0
657 /* Above, we define stat to _stati64. */
658 # define fstat _fstati64
659 #elif defined GNULIB_POSIXCHECK
660 # undef fstat
661 # if HAVE_RAW_DECL_FSTAT
662 _GL_WARN_ON_USE (fstat, "fstat has portability problems - "
663 "use gnulib module fstat for portability");
664 # endif
665 #endif
666
667
668 #if 0
669 # if 0
670 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
671 # undef fstatat
672 # define fstatat rpl_fstatat
673 # endif
674 _GL_FUNCDECL_RPL (fstatat, int,
675 (int fd, char const *name, struct stat *st, int flags)
676 _GL_ARG_NONNULL ((2, 3)));
677 _GL_CXXALIAS_RPL (fstatat, int,
678 (int fd, char const *name, struct stat *st, int flags));
679 # else
680 # if !1
681 _GL_FUNCDECL_SYS (fstatat, int,
682 (int fd, char const *name, struct stat *st, int flags)
683 _GL_ARG_NONNULL ((2, 3)));
684 # endif
685 _GL_CXXALIAS_SYS (fstatat, int,
686 (int fd, char const *name, struct stat *st, int flags));
687 # endif
688 _GL_CXXALIASWARN (fstatat);
689 #elif defined GNULIB_POSIXCHECK
690 # undef fstatat
691 # if HAVE_RAW_DECL_FSTATAT
692 _GL_WARN_ON_USE (fstatat, "fstatat is not portable - "
693 "use gnulib module openat for portability");
694 # endif
695 #endif
696
697
698 #if 0
699 /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens
700 implementation relies on futimesat, which on Solaris 10 makes an invocation
701 to futimens that is meant to invoke the libc's futimens(), not gnulib's
702 futimens(). */
703 # if 0 || (!1 && defined __sun)
704 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
705 # undef futimens
706 # define futimens rpl_futimens
707 # endif
708 _GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2]));
709 _GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2]));
710 # else
711 # if !1
712 _GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2]));
713 # endif
714 _GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2]));
715 # endif
716 # if 1
717 _GL_CXXALIASWARN (futimens);
718 # endif
719 #elif defined GNULIB_POSIXCHECK
720 # undef futimens
721 # if HAVE_RAW_DECL_FUTIMENS
722 _GL_WARN_ON_USE (futimens, "futimens is not portable - "
723 "use gnulib module futimens for portability");
724 # endif
725 #endif
726
727
728 #if 0
729 /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
730 denotes a symbolic link. */
731 # if !1
732 /* The lchmod replacement follows symbolic links. Callers should take
733 this into account; lchmod should be applied only to arguments that
734 are known to not be symbolic links. On hosts that lack lchmod,
735 this can lead to race conditions between the check and the
736 invocation of lchmod, but we know of no workarounds that are
737 reliable in general. You might try requesting support for lchmod
738 from your operating system supplier. */
739 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
740 # define lchmod chmod
741 # endif
742 /* Need to cast, because on mingw, the second parameter of chmod is
743 int mode. */
744 _GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int,
745 (const char *filename, mode_t mode));
746 # else
747 # if 0 /* assume already declared */
748 _GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode)
749 _GL_ARG_NONNULL ((1)));
750 # endif
751 _GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode));
752 # endif
753 # if 1
754 _GL_CXXALIASWARN (lchmod);
755 # endif
756 #elif defined GNULIB_POSIXCHECK
757 # undef lchmod
758 # if HAVE_RAW_DECL_LCHMOD
759 _GL_WARN_ON_USE (lchmod, "lchmod is unportable - "
760 "use gnulib module lchmod for portability");
761 # endif
762 #endif
763
764
765 #if 0
766 # if ! 1
767 /* mingw does not support symlinks, therefore it does not have lstat. But
768 without links, stat does just fine. */
769 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
770 # define lstat stat
771 # endif
772 _GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf));
773 # elif 0
774 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
775 # undef lstat
776 # define lstat rpl_lstat
777 # endif
778 _GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf)
779 _GL_ARG_NONNULL ((1, 2)));
780 _GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf));
781 # else
782 _GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf));
783 # endif
784 # if 1
785 _GL_CXXALIASWARN (lstat);
786 # endif
787 #elif defined GNULIB_POSIXCHECK
788 # undef lstat
789 # if HAVE_RAW_DECL_LSTAT
790 _GL_WARN_ON_USE (lstat, "lstat is unportable - "
791 "use gnulib module lstat for portability");
792 # endif
793 #endif
794
795
796 #if 0
797 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
798 # undef mkdir
799 # define mkdir rpl_mkdir
800 # endif
801 _GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode)
802 _GL_ARG_NONNULL ((1)));
803 _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
804 #else
805 /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
806 Additionally, it declares _mkdir (and depending on compile flags, an
807 alias mkdir), only in the nonstandard includes <direct.h> and <io.h>,
808 which are included above. */
809 # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
810
811 # if !GNULIB_defined_rpl_mkdir
812 static int
rpl_mkdir(char const * name,mode_t mode)813 rpl_mkdir (char const *name, mode_t mode)
814 {
815 return _mkdir (name);
816 }
817 # define GNULIB_defined_rpl_mkdir 1
818 # endif
819
820 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
821 # define mkdir rpl_mkdir
822 # endif
823 _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
824 # else
825 _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode));
826 # endif
827 #endif
828 _GL_CXXALIASWARN (mkdir);
829
830
831 #if 0
832 # if !1
833 _GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)
834 _GL_ARG_NONNULL ((2)));
835 # endif
836 _GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode));
837 _GL_CXXALIASWARN (mkdirat);
838 #elif defined GNULIB_POSIXCHECK
839 # undef mkdirat
840 # if HAVE_RAW_DECL_MKDIRAT
841 _GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - "
842 "use gnulib module openat for portability");
843 # endif
844 #endif
845
846
847 #if 0
848 # if 0
849 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
850 # undef mkfifo
851 # define mkfifo rpl_mkfifo
852 # endif
853 _GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode)
854 _GL_ARG_NONNULL ((1)));
855 _GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode));
856 # else
857 # if !1
858 _GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode)
859 _GL_ARG_NONNULL ((1)));
860 # endif
861 _GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode));
862 # endif
863 _GL_CXXALIASWARN (mkfifo);
864 #elif defined GNULIB_POSIXCHECK
865 # undef mkfifo
866 # if HAVE_RAW_DECL_MKFIFO
867 _GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - "
868 "use gnulib module mkfifo for portability");
869 # endif
870 #endif
871
872
873 #if 0
874 # if !1
875 _GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)
876 _GL_ARG_NONNULL ((2)));
877 # endif
878 _GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode));
879 _GL_CXXALIASWARN (mkfifoat);
880 #elif defined GNULIB_POSIXCHECK
881 # undef mkfifoat
882 # if HAVE_RAW_DECL_MKFIFOAT
883 _GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - "
884 "use gnulib module mkfifoat for portability");
885 # endif
886 #endif
887
888
889 #if 0
890 # if 0
891 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
892 # undef mknod
893 # define mknod rpl_mknod
894 # endif
895 _GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)
896 _GL_ARG_NONNULL ((1)));
897 _GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev));
898 # else
899 # if !1
900 _GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev)
901 _GL_ARG_NONNULL ((1)));
902 # endif
903 /* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */
904 _GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev));
905 # endif
906 _GL_CXXALIASWARN (mknod);
907 #elif defined GNULIB_POSIXCHECK
908 # undef mknod
909 # if HAVE_RAW_DECL_MKNOD
910 _GL_WARN_ON_USE (mknod, "mknod is not portable - "
911 "use gnulib module mknod for portability");
912 # endif
913 #endif
914
915
916 #if 0
917 # if !1
918 _GL_FUNCDECL_SYS (mknodat, int,
919 (int fd, char const *file, mode_t mode, dev_t dev)
920 _GL_ARG_NONNULL ((2)));
921 # endif
922 _GL_CXXALIAS_SYS (mknodat, int,
923 (int fd, char const *file, mode_t mode, dev_t dev));
924 _GL_CXXALIASWARN (mknodat);
925 #elif defined GNULIB_POSIXCHECK
926 # undef mknodat
927 # if HAVE_RAW_DECL_MKNODAT
928 _GL_WARN_ON_USE (mknodat, "mknodat is not portable - "
929 "use gnulib module mkfifoat for portability");
930 # endif
931 #endif
932
933
934 #if 1
935 # if 1
936 /* We can't use the object-like #define stat rpl_stat, because of
937 struct stat. This means that rpl_stat will not be used if the user
938 does (stat)(a,b). Oh well. */
939 # if defined _AIX && defined stat && defined _LARGE_FILES
940 /* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
941 so we have to replace stat64() instead of stat(). */
942 # undef stat64
943 # define stat64(name, st) rpl_stat (name, st)
944 # elif 0
945 /* Above, we define stat to _stati64. */
946 # if defined __MINGW32__ && defined _stati64
947 # ifndef _USE_32BIT_TIME_T
948 /* The system headers define _stati64 to _stat64. */
949 # undef _stat64
950 # define _stat64(name, st) rpl_stat (name, st)
951 # endif
952 # elif defined _MSC_VER && defined _stati64
953 # ifdef _USE_32BIT_TIME_T
954 /* The system headers define _stati64 to _stat32i64. */
955 # undef _stat32i64
956 # define _stat32i64(name, st) rpl_stat (name, st)
957 # else
958 /* The system headers define _stati64 to _stat64. */
959 # undef _stat64
960 # define _stat64(name, st) rpl_stat (name, st)
961 # endif
962 # else
963 # undef _stati64
964 # define _stati64(name, st) rpl_stat (name, st)
965 # endif
966 # elif defined __MINGW32__ && defined stat
967 # ifdef _USE_32BIT_TIME_T
968 /* The system headers define stat to _stat32i64. */
969 # undef _stat32i64
970 # define _stat32i64(name, st) rpl_stat (name, st)
971 # else
972 /* The system headers define stat to _stat64. */
973 # undef _stat64
974 # define _stat64(name, st) rpl_stat (name, st)
975 # endif
976 # elif defined _MSC_VER && defined stat
977 # ifdef _USE_32BIT_TIME_T
978 /* The system headers define stat to _stat32. */
979 # undef _stat32
980 # define _stat32(name, st) rpl_stat (name, st)
981 # else
982 /* The system headers define stat to _stat64i32. */
983 # undef _stat64i32
984 # define _stat64i32(name, st) rpl_stat (name, st)
985 # endif
986 # else /* !(_AIX ||__MINGW32__ || _MSC_VER) */
987 # undef stat
988 # define stat(name, st) rpl_stat (name, st)
989 # endif /* !_LARGE_FILES */
990 _GL_EXTERN_C int stat (const char *name, struct stat *buf)
991 _GL_ARG_NONNULL ((1, 2));
992 # endif
993 #elif defined GNULIB_POSIXCHECK
994 # undef stat
995 # if HAVE_RAW_DECL_STAT
996 _GL_WARN_ON_USE (stat, "stat is unportable - "
997 "use gnulib module stat for portability");
998 # endif
999 #endif
1000
1001
1002 #if 0
1003 /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat
1004 implementation relies on futimesat, which on Solaris 10 makes an invocation
1005 to utimensat that is meant to invoke the libc's utimensat(), not gnulib's
1006 utimensat(). */
1007 # if 0 || (!1 && defined __sun)
1008 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1009 # undef utimensat
1010 # define utimensat rpl_utimensat
1011 # endif
1012 _GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name,
1013 struct timespec const times[2], int flag)
1014 _GL_ARG_NONNULL ((2)));
1015 _GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name,
1016 struct timespec const times[2], int flag));
1017 # else
1018 # if !1
1019 _GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name,
1020 struct timespec const times[2], int flag)
1021 _GL_ARG_NONNULL ((2)));
1022 # endif
1023 _GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name,
1024 struct timespec const times[2], int flag));
1025 # endif
1026 # if 1
1027 _GL_CXXALIASWARN (utimensat);
1028 # endif
1029 #elif defined GNULIB_POSIXCHECK
1030 # undef utimensat
1031 # if HAVE_RAW_DECL_UTIMENSAT
1032 _GL_WARN_ON_USE (utimensat, "utimensat is not portable - "
1033 "use gnulib module utimensat for portability");
1034 # endif
1035 #endif
1036
1037
1038 #endif /* _GL_SYS_STAT_H */
1039 #endif /* _GL_SYS_STAT_H */
1040 #endif
1041