]> git.cworth.org Git - tar/blob - lib/sys_stat.in.h
Imported Upstream version 1.22
[tar] / 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 /* The include_next requires a split double-inclusion guard.  */
44 #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
45
46 #ifndef _GL_SYS_STAT_H
47 #define _GL_SYS_STAT_H
48
49 /* The definition of GL_LINK_WARNING is copied here.  */
50
51 /* Before doing "#define mkdir rpl_mkdir" below, we need to include all
52    headers that may declare mkdir().  */
53 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
54 # include <io.h>
55 #endif
56
57 #ifndef S_IFMT
58 # define S_IFMT 0170000
59 #endif
60
61 #if STAT_MACROS_BROKEN
62 # undef S_ISBLK
63 # undef S_ISCHR
64 # undef S_ISDIR
65 # undef S_ISFIFO
66 # undef S_ISLNK
67 # undef S_ISNAM
68 # undef S_ISMPB
69 # undef S_ISMPC
70 # undef S_ISNWK
71 # undef S_ISREG
72 # undef S_ISSOCK
73 #endif
74
75 #ifndef S_ISBLK
76 # ifdef S_IFBLK
77 #  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
78 # else
79 #  define S_ISBLK(m) 0
80 # endif
81 #endif
82
83 #ifndef S_ISCHR
84 # ifdef S_IFCHR
85 #  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
86 # else
87 #  define S_ISCHR(m) 0
88 # endif
89 #endif
90
91 #ifndef S_ISDIR
92 # ifdef S_IFDIR
93 #  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
94 # else
95 #  define S_ISDIR(m) 0
96 # endif
97 #endif
98
99 #ifndef S_ISDOOR /* Solaris 2.5 and up */
100 # define S_ISDOOR(m) 0
101 #endif
102
103 #ifndef S_ISFIFO
104 # ifdef S_IFIFO
105 #  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
106 # else
107 #  define S_ISFIFO(m) 0
108 # endif
109 #endif
110
111 #ifndef S_ISLNK
112 # ifdef S_IFLNK
113 #  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
114 # else
115 #  define S_ISLNK(m) 0
116 # endif
117 #endif
118
119 #ifndef S_ISMPB /* V7 */
120 # ifdef S_IFMPB
121 #  define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
122 #  define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
123 # else
124 #  define S_ISMPB(m) 0
125 #  define S_ISMPC(m) 0
126 # endif
127 #endif
128
129 #ifndef S_ISNAM /* Xenix */
130 # ifdef S_IFNAM
131 #  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
132 # else
133 #  define S_ISNAM(m) 0
134 # endif
135 #endif
136
137 #ifndef S_ISNWK /* HP/UX */
138 # ifdef S_IFNWK
139 #  define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
140 # else
141 #  define S_ISNWK(m) 0
142 # endif
143 #endif
144
145 #ifndef S_ISPORT /* Solaris 10 and up */
146 # define S_ISPORT(m) 0
147 #endif
148
149 #ifndef S_ISREG
150 # ifdef S_IFREG
151 #  define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
152 # else
153 #  define S_ISREG(m) 0
154 # endif
155 #endif
156
157 #ifndef S_ISSOCK
158 # ifdef S_IFSOCK
159 #  define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
160 # else
161 #  define S_ISSOCK(m) 0
162 # endif
163 #endif
164
165
166 #ifndef S_TYPEISMQ
167 # define S_TYPEISMQ(p) 0
168 #endif
169
170 #ifndef S_TYPEISTMO
171 # define S_TYPEISTMO(p) 0
172 #endif
173
174
175 #ifndef S_TYPEISSEM
176 # ifdef S_INSEM
177 #  define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
178 # else
179 #  define S_TYPEISSEM(p) 0
180 # endif
181 #endif
182
183 #ifndef S_TYPEISSHM
184 # ifdef S_INSHD
185 #  define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
186 # else
187 #  define S_TYPEISSHM(p) 0
188 # endif
189 #endif
190
191 /* high performance ("contiguous data") */
192 #ifndef S_ISCTG
193 # define S_ISCTG(p) 0
194 #endif
195
196 /* Cray DMF (data migration facility): off line, with data  */
197 #ifndef S_ISOFD
198 # define S_ISOFD(p) 0
199 #endif
200
201 /* Cray DMF (data migration facility): off line, with no data  */
202 #ifndef S_ISOFL
203 # define S_ISOFL(p) 0
204 #endif
205
206 /* 4.4BSD whiteout */
207 #ifndef S_ISWHT
208 # define S_ISWHT(m) 0
209 #endif
210
211 /* If any of the following are undefined,
212    define them to their de facto standard values.  */
213 #if !S_ISUID
214 # define S_ISUID 04000
215 #endif
216 #if !S_ISGID
217 # define S_ISGID 02000
218 #endif
219
220 /* S_ISVTX is a common extension to POSIX.  */
221 #ifndef S_ISVTX
222 # define S_ISVTX 01000
223 #endif
224
225 #if !S_IRUSR && S_IREAD
226 # define S_IRUSR S_IREAD
227 #endif
228 #if !S_IRUSR
229 # define S_IRUSR 00400
230 #endif
231 #if !S_IRGRP
232 # define S_IRGRP (S_IRUSR >> 3)
233 #endif
234 #if !S_IROTH
235 # define S_IROTH (S_IRUSR >> 6)
236 #endif
237
238 #if !S_IWUSR && S_IWRITE
239 # define S_IWUSR S_IWRITE
240 #endif
241 #if !S_IWUSR
242 # define S_IWUSR 00200
243 #endif
244 #if !S_IWGRP
245 # define S_IWGRP (S_IWUSR >> 3)
246 #endif
247 #if !S_IWOTH
248 # define S_IWOTH (S_IWUSR >> 6)
249 #endif
250
251 #if !S_IXUSR && S_IEXEC
252 # define S_IXUSR S_IEXEC
253 #endif
254 #if !S_IXUSR
255 # define S_IXUSR 00100
256 #endif
257 #if !S_IXGRP
258 # define S_IXGRP (S_IXUSR >> 3)
259 #endif
260 #if !S_IXOTH
261 # define S_IXOTH (S_IXUSR >> 6)
262 #endif
263
264 #if !S_IRWXU
265 # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
266 #endif
267 #if !S_IRWXG
268 # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
269 #endif
270 #if !S_IRWXO
271 # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
272 #endif
273
274 /* S_IXUGO is a common extension to POSIX.  */
275 #if !S_IXUGO
276 # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
277 #endif
278
279 #ifndef S_IRWXUGO
280 # define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
281 #endif
282
283
284 #ifdef __cplusplus
285 extern "C" {
286 #endif
287
288
289 #if @GNULIB_LSTAT@
290 # if ! @HAVE_LSTAT@
291 /* mingw does not support symlinks, therefore it does not have lstat.  But
292    without links, stat does just fine.  */
293 #  define lstat stat
294 # elif @REPLACE_LSTAT@
295 #  undef lstat
296 #  define lstat rpl_lstat
297 extern int rpl_lstat (const char *name, struct stat *buf);
298 # endif
299 #elif defined GNULIB_POSIXCHECK
300 # undef lstat
301 # define lstat(p,b)                                                     \
302   (GL_LINK_WARNING ("lstat is unportable - "                            \
303                     "use gnulib module lstat for portability"),         \
304    lstat (p, b))
305 #endif
306
307
308 #if @REPLACE_MKDIR@
309 # undef mkdir
310 # define mkdir rpl_mkdir
311 extern int mkdir (char const *name, mode_t mode);
312 #else
313 /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
314    Additionally, it declares _mkdir (and depending on compile flags, an
315    alias mkdir), only in the nonstandard <io.h>, which is included above.  */
316 # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
317
318 static inline int
319 rpl_mkdir (char const *name, mode_t mode)
320 {
321   return _mkdir (name);
322 }
323
324 #  define mkdir rpl_mkdir
325 # endif
326 #endif
327
328
329 /* Declare BSD extensions.  */
330
331 #if @GNULIB_LCHMOD@
332 /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
333    denotes a symbolic link.  */
334 # if !@HAVE_LCHMOD@
335 /* The lchmod replacement follows symbolic links.  Callers should take
336    this into account; lchmod should be applied only to arguments that
337    are known to not be symbolic links.  On hosts that lack lchmod,
338    this can lead to race conditions between the check and the
339    invocation of lchmod, but we know of no workarounds that are
340    reliable in general.  You might try requesting support for lchmod
341    from your operating system supplier.  */
342 #  define lchmod chmod
343 # endif
344 # if 0 /* assume already declared */
345 extern int lchmod (const char *filename, mode_t mode);
346 # endif
347 #elif defined GNULIB_POSIXCHECK
348 # undef lchmod
349 # define lchmod(f,m) \
350     (GL_LINK_WARNING ("lchmod is unportable - " \
351                       "use gnulib module lchmod for portability"), \
352      lchmod (f, m))
353 #endif
354
355
356 #ifdef __cplusplus
357 }
358 #endif
359
360
361 #endif /* _GL_SYS_STAT_H */
362 #endif /* _GL_SYS_STAT_H */
363 #endif