Imported Upstream version 1.3.14
[debian/gzip] / lib / sys_stat.in.h
1 /* -*- buffer-read-only: t -*- vi: set ro: */
2 /* DO NOT EDIT! GENERATED AUTOMATICALLY! */
3 /* Provide a more complete sys/stat header file.
4    Copyright (C) 2005-2009 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, or (at your option)
9    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, write to the Free Software Foundation,
18    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
19
20 /* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
21
22 /* This file is supposed to be used on platforms where <sys/stat.h> is
23    incomplete.  It is intended to provide definitions and prototypes
24    needed by an application.  Start with what the system provides.  */
25
26 #if __GNUC__ >= 3
27 @PRAGMA_SYSTEM_HEADER@
28 #endif
29
30 #if defined __need_system_sys_stat_h
31 /* Special invocation convention.  */
32
33 #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
34
35 #else
36 /* Normal invocation convention.  */
37
38 #ifndef _GL_SYS_STAT_H
39
40 /* Get nlink_t.  */
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@ @NEXT_SYS_STAT_H@
48
49 #ifndef _GL_SYS_STAT_H
50 #define _GL_SYS_STAT_H
51
52 /* The definition of GL_LINK_WARNING is copied here.  */
53
54 /* Before doing "#define mkdir rpl_mkdir" below, we need to include all
55    headers that may declare mkdir().  */
56 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
57 # include <io.h>
58 #endif
59
60 #ifndef S_IFMT
61 # define S_IFMT 0170000
62 #endif
63
64 #if STAT_MACROS_BROKEN
65 # undef S_ISBLK
66 # undef S_ISCHR
67 # undef S_ISDIR
68 # undef S_ISFIFO
69 # undef S_ISLNK
70 # undef S_ISNAM
71 # undef S_ISMPB
72 # undef S_ISMPC
73 # undef S_ISNWK
74 # undef S_ISREG
75 # undef S_ISSOCK
76 #endif
77
78 #ifndef S_ISBLK
79 # ifdef S_IFBLK
80 #  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
81 # else
82 #  define S_ISBLK(m) 0
83 # endif
84 #endif
85
86 #ifndef S_ISCHR
87 # ifdef S_IFCHR
88 #  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
89 # else
90 #  define S_ISCHR(m) 0
91 # endif
92 #endif
93
94 #ifndef S_ISDIR
95 # ifdef S_IFDIR
96 #  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
97 # else
98 #  define S_ISDIR(m) 0
99 # endif
100 #endif
101
102 #ifndef S_ISDOOR /* Solaris 2.5 and up */
103 # define S_ISDOOR(m) 0
104 #endif
105
106 #ifndef S_ISFIFO
107 # ifdef S_IFIFO
108 #  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
109 # else
110 #  define S_ISFIFO(m) 0
111 # endif
112 #endif
113
114 #ifndef S_ISLNK
115 # ifdef S_IFLNK
116 #  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
117 # else
118 #  define S_ISLNK(m) 0
119 # endif
120 #endif
121
122 #ifndef S_ISMPB /* V7 */
123 # ifdef S_IFMPB
124 #  define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
125 #  define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
126 # else
127 #  define S_ISMPB(m) 0
128 #  define S_ISMPC(m) 0
129 # endif
130 #endif
131
132 #ifndef S_ISNAM /* Xenix */
133 # ifdef S_IFNAM
134 #  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
135 # else
136 #  define S_ISNAM(m) 0
137 # endif
138 #endif
139
140 #ifndef S_ISNWK /* HP/UX */
141 # ifdef S_IFNWK
142 #  define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
143 # else
144 #  define S_ISNWK(m) 0
145 # endif
146 #endif
147
148 #ifndef S_ISPORT /* Solaris 10 and up */
149 # define S_ISPORT(m) 0
150 #endif
151
152 #ifndef S_ISREG
153 # ifdef S_IFREG
154 #  define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
155 # else
156 #  define S_ISREG(m) 0
157 # endif
158 #endif
159
160 #ifndef S_ISSOCK
161 # ifdef S_IFSOCK
162 #  define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
163 # else
164 #  define S_ISSOCK(m) 0
165 # endif
166 #endif
167
168
169 #ifndef S_TYPEISMQ
170 # define S_TYPEISMQ(p) 0
171 #endif
172
173 #ifndef S_TYPEISTMO
174 # define S_TYPEISTMO(p) 0
175 #endif
176
177
178 #ifndef S_TYPEISSEM
179 # ifdef S_INSEM
180 #  define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
181 # else
182 #  define S_TYPEISSEM(p) 0
183 # endif
184 #endif
185
186 #ifndef S_TYPEISSHM
187 # ifdef S_INSHD
188 #  define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
189 # else
190 #  define S_TYPEISSHM(p) 0
191 # endif
192 #endif
193
194 /* high performance ("contiguous data") */
195 #ifndef S_ISCTG
196 # define S_ISCTG(p) 0
197 #endif
198
199 /* Cray DMF (data migration facility): off line, with data  */
200 #ifndef S_ISOFD
201 # define S_ISOFD(p) 0
202 #endif
203
204 /* Cray DMF (data migration facility): off line, with no data  */
205 #ifndef S_ISOFL
206 # define S_ISOFL(p) 0
207 #endif
208
209 /* 4.4BSD whiteout */
210 #ifndef S_ISWHT
211 # define S_ISWHT(m) 0
212 #endif
213
214 /* If any of the following are undefined,
215    define them to their de facto standard values.  */
216 #if !S_ISUID
217 # define S_ISUID 04000
218 #endif
219 #if !S_ISGID
220 # define S_ISGID 02000
221 #endif
222
223 /* S_ISVTX is a common extension to POSIX.  */
224 #ifndef S_ISVTX
225 # define S_ISVTX 01000
226 #endif
227
228 #if !S_IRUSR && S_IREAD
229 # define S_IRUSR S_IREAD
230 #endif
231 #if !S_IRUSR
232 # define S_IRUSR 00400
233 #endif
234 #if !S_IRGRP
235 # define S_IRGRP (S_IRUSR >> 3)
236 #endif
237 #if !S_IROTH
238 # define S_IROTH (S_IRUSR >> 6)
239 #endif
240
241 #if !S_IWUSR && S_IWRITE
242 # define S_IWUSR S_IWRITE
243 #endif
244 #if !S_IWUSR
245 # define S_IWUSR 00200
246 #endif
247 #if !S_IWGRP
248 # define S_IWGRP (S_IWUSR >> 3)
249 #endif
250 #if !S_IWOTH
251 # define S_IWOTH (S_IWUSR >> 6)
252 #endif
253
254 #if !S_IXUSR && S_IEXEC
255 # define S_IXUSR S_IEXEC
256 #endif
257 #if !S_IXUSR
258 # define S_IXUSR 00100
259 #endif
260 #if !S_IXGRP
261 # define S_IXGRP (S_IXUSR >> 3)
262 #endif
263 #if !S_IXOTH
264 # define S_IXOTH (S_IXUSR >> 6)
265 #endif
266
267 #if !S_IRWXU
268 # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
269 #endif
270 #if !S_IRWXG
271 # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
272 #endif
273 #if !S_IRWXO
274 # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
275 #endif
276
277 /* S_IXUGO is a common extension to POSIX.  */
278 #if !S_IXUGO
279 # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
280 #endif
281
282 #ifndef S_IRWXUGO
283 # define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
284 #endif
285
286 /* Macros for futimens and utimensat.  */
287 #ifndef UTIME_NOW
288 # define UTIME_NOW (-1)
289 # define UTIME_OMIT (-2)
290 #endif
291
292
293 #ifdef __cplusplus
294 extern "C" {
295 #endif
296
297
298 #if @GNULIB_FCHMODAT@
299 # if !@HAVE_FCHMODAT@
300 extern int fchmodat (int fd, char const *file, mode_t mode, int flag);
301 # endif
302 #elif defined GNULIB_POSIXCHECK
303 # undef fchmodat
304 # define fchmodat(d,n,m,f)                         \
305     (GL_LINK_WARNING ("fchmodat is not portable - " \
306                       "use gnulib module openat for portability"), \
307      fchmodat (d, n, m, f))
308 #endif
309
310
311 #if @REPLACE_FSTAT@
312 # define fstat rpl_fstat
313 extern int fstat (int fd, struct stat *buf);
314 #endif
315
316
317 #if @GNULIB_FSTATAT@
318 # if @REPLACE_FSTATAT@
319 #  undef fstatat
320 #  define fstatat rpl_fstatat
321 # endif
322 # if !@HAVE_FSTATAT@ || @REPLACE_FSTATAT@
323 extern int fstatat (int fd, char const *name, struct stat *st, int flags);
324 # endif
325 #elif defined GNULIB_POSIXCHECK
326 # undef fstatat
327 # define fstatat(d,n,s,f)                         \
328     (GL_LINK_WARNING ("fstatat is not portable - " \
329                       "use gnulib module openat for portability"), \
330      fstatat (d, n, s, f))
331 #endif
332
333
334 #if @GNULIB_FUTIMENS@
335 # if @REPLACE_FUTIMENS@
336 #  undef futimens
337 #  define futimens rpl_futimens
338 # endif
339 # if !@HAVE_FUTIMENS@ || @REPLACE_FUTIMENS@
340 extern int futimens (int fd, struct timespec const times[2]);
341 # endif
342 #elif defined GNULIB_POSIXCHECK
343 # undef futimens
344 # define futimens(f,t)                         \
345     (GL_LINK_WARNING ("futimens is not portable - " \
346                       "use gnulib module futimens for portability"), \
347      futimens (f, t))
348 #endif
349
350
351 #if @GNULIB_LCHMOD@
352 /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
353    denotes a symbolic link.  */
354 # if !@HAVE_LCHMOD@
355 /* The lchmod replacement follows symbolic links.  Callers should take
356    this into account; lchmod should be applied only to arguments that
357    are known to not be symbolic links.  On hosts that lack lchmod,
358    this can lead to race conditions between the check and the
359    invocation of lchmod, but we know of no workarounds that are
360    reliable in general.  You might try requesting support for lchmod
361    from your operating system supplier.  */
362 #  define lchmod chmod
363 # endif
364 # if 0 /* assume already declared */
365 extern int lchmod (const char *filename, mode_t mode);
366 # endif
367 #elif defined GNULIB_POSIXCHECK
368 # undef lchmod
369 # define lchmod(f,m) \
370     (GL_LINK_WARNING ("lchmod is unportable - " \
371                       "use gnulib module lchmod for portability"), \
372      lchmod (f, m))
373 #endif
374
375
376 #if @GNULIB_LSTAT@
377 # if ! @HAVE_LSTAT@
378 /* mingw does not support symlinks, therefore it does not have lstat.  But
379    without links, stat does just fine.  */
380 #  define lstat stat
381 # elif @REPLACE_LSTAT@
382 #  undef lstat
383 #  define lstat rpl_lstat
384 extern int rpl_lstat (const char *name, struct stat *buf);
385 # endif
386 #elif defined GNULIB_POSIXCHECK
387 # undef lstat
388 # define lstat(p,b)                                                     \
389   (GL_LINK_WARNING ("lstat is unportable - "                            \
390                     "use gnulib module lstat for portability"),         \
391    lstat (p, b))
392 #endif
393
394
395 #if @REPLACE_MKDIR@
396 # undef mkdir
397 # define mkdir rpl_mkdir
398 extern int mkdir (char const *name, mode_t mode);
399 #else
400 /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
401    Additionally, it declares _mkdir (and depending on compile flags, an
402    alias mkdir), only in the nonstandard <io.h>, which is included above.  */
403 # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
404
405 static inline int
406 rpl_mkdir (char const *name, mode_t mode)
407 {
408   return _mkdir (name);
409 }
410
411 #  define mkdir rpl_mkdir
412 # endif
413 #endif
414
415
416 #if @GNULIB_MKDIRAT@
417 # if !@HAVE_MKDIRAT@
418 extern int mkdirat (int fd, char const *file, mode_t mode);
419 # endif
420 #elif defined GNULIB_POSIXCHECK
421 # undef mkdirat
422 # define mkdirat(d,n,m)                         \
423     (GL_LINK_WARNING ("mkdirat is not portable - " \
424                       "use gnulib module openat for portability"), \
425      mkdirat (d, n, m))
426 #endif
427
428
429 #if @GNULIB_MKFIFOAT@
430 # if !@HAVE_MKFIFOAT@
431 int mkfifoat (int fd, char const *file, mode_t mode);
432 # endif
433 #elif defined GNULIB_POSIXCHECK
434 # undef mkfifoat
435 # define mkfifoat(d,n,m)                                     \
436     (GL_LINK_WARNING ("mkfifoat is not portable - " \
437                       "use gnulib module mkfifoat for portability"), \
438      mkfifoat (d, n, m))
439 #endif
440
441
442 #if @GNULIB_MKNODAT@
443 # if !@HAVE_MKNODAT@
444 int mknodat (int fd, char const *file, mode_t mode, dev_t dev);
445 # endif
446 #elif defined GNULIB_POSIXCHECK
447 # undef mknodat
448 # define mknodat(f,n,m,d)                            \
449     (GL_LINK_WARNING ("mknodat is not portable - " \
450                       "use gnulib module mkfifoat for portability"), \
451      mknodat (f, n, m, d))
452 #endif
453
454
455 #if @GNULIB_STAT@
456 # if @REPLACE_STAT@
457 /* We can't use the object-like #define stat rpl_stat, because of
458    struct stat.  This means that rpl_stat will not be used if the user
459    does (stat)(a,b).  Oh well.  */
460 #  undef stat
461 #  define stat(name, st) rpl_stat (name, st)
462 extern int stat (const char *name, struct stat *buf);
463 # endif
464 #elif defined GNULIB_POSIXCHECK
465 # undef stat
466 # define stat(p,b)                                                      \
467   (GL_LINK_WARNING ("stat is unportable - "                             \
468                     "use gnulib module stat for portability"),          \
469    stat (p, b))
470 #endif
471
472
473 #if @GNULIB_UTIMENSAT@
474 # if @REPLACE_UTIMENSAT@
475 #  undef utimensat
476 #  define utimensat rpl_utimensat
477 # endif
478 # if !@HAVE_UTIMENSAT@ || @REPLACE_UTIMENSAT@
479    extern int utimensat (int fd, char const *name,
480                          struct timespec const times[2], int flag);
481 # endif
482 #elif defined GNULIB_POSIXCHECK
483 # undef utimensat
484 # define utimensat(d,n,t,f)                          \
485     (GL_LINK_WARNING ("utimensat is not portable - " \
486                       "use gnulib module utimensat for portability"), \
487      utimensat (d, n, t, f))
488 #endif
489
490
491 #ifdef __cplusplus
492 }
493 #endif
494
495
496 #endif /* _GL_SYS_STAT_H */
497 #endif /* _GL_SYS_STAT_H */
498 #endif