1 /* Test of <sys/stat.h> substitute.
2 Copyright (C) 2007-2020 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <https://www.gnu.org/licenses/>. */
17 /* Written by Bruno Haible <bruno@clisp.org>, 2007. */
25 /* Check the existence of some macros. */
29 #ifdef S_IFBLK /* missing on MSVC */
32 S_IFCHR
, S_IFDIR
, S_IFIFO
, S_IFREG
,
33 #ifdef S_IFLNK /* missing on native Windows and DJGPP */
36 #ifdef S_IFSOCK /* missing on native Windows and DJGPP */
39 S_IRWXU
, S_IRUSR
, S_IWUSR
, S_IXUSR
,
40 S_IRWXG
, S_IRGRP
, S_IWGRP
, S_IXGRP
,
41 S_IRWXO
, S_IROTH
, S_IWOTH
, S_IXOTH
,
42 S_ISUID
, S_ISGID
, S_ISVTX
,
64 verify (S_IRWXU
== (S_IRUSR
| S_IWUSR
| S_IXUSR
));
65 verify (S_IRWXG
== (S_IRGRP
| S_IWGRP
| S_IXGRP
));
66 verify (S_IRWXO
== (S_IROTH
| S_IWOTH
| S_IXOTH
));
69 verify (S_ISBLK (S_IFBLK
));
71 verify (!S_ISBLK (S_IFCHR
));
72 verify (!S_ISBLK (S_IFDIR
));
73 verify (!S_ISBLK (S_IFIFO
));
74 verify (!S_ISBLK (S_IFREG
));
76 verify (!S_ISBLK (S_IFLNK
));
79 verify (!S_ISBLK (S_IFSOCK
));
83 verify (!S_ISCHR (S_IFBLK
));
85 verify (S_ISCHR (S_IFCHR
));
86 verify (!S_ISCHR (S_IFDIR
));
87 verify (!S_ISCHR (S_IFIFO
));
88 verify (!S_ISCHR (S_IFREG
));
90 verify (!S_ISCHR (S_IFLNK
));
93 verify (!S_ISCHR (S_IFSOCK
));
97 verify (!S_ISDIR (S_IFBLK
));
99 verify (!S_ISDIR (S_IFCHR
));
100 verify (S_ISDIR (S_IFDIR
));
101 verify (!S_ISDIR (S_IFIFO
));
102 verify (!S_ISDIR (S_IFREG
));
104 verify (!S_ISDIR (S_IFLNK
));
107 verify (!S_ISDIR (S_IFSOCK
));
111 verify (!S_ISFIFO (S_IFBLK
));
113 verify (!S_ISFIFO (S_IFCHR
));
114 verify (!S_ISFIFO (S_IFDIR
));
115 verify (S_ISFIFO (S_IFIFO
));
116 verify (!S_ISFIFO (S_IFREG
));
118 verify (!S_ISFIFO (S_IFLNK
));
121 verify (!S_ISFIFO (S_IFSOCK
));
125 verify (!S_ISREG (S_IFBLK
));
127 verify (!S_ISREG (S_IFCHR
));
128 verify (!S_ISREG (S_IFDIR
));
129 verify (!S_ISREG (S_IFIFO
));
130 verify (S_ISREG (S_IFREG
));
132 verify (!S_ISREG (S_IFLNK
));
135 verify (!S_ISREG (S_IFSOCK
));
139 verify (!S_ISLNK (S_IFBLK
));
141 verify (!S_ISLNK (S_IFCHR
));
142 verify (!S_ISLNK (S_IFDIR
));
143 verify (!S_ISLNK (S_IFIFO
));
144 verify (!S_ISLNK (S_IFREG
));
146 verify (S_ISLNK (S_IFLNK
));
149 verify (!S_ISLNK (S_IFSOCK
));
153 verify (!S_ISSOCK (S_IFBLK
));
155 verify (!S_ISSOCK (S_IFCHR
));
156 verify (!S_ISSOCK (S_IFDIR
));
157 verify (!S_ISSOCK (S_IFIFO
));
158 verify (!S_ISSOCK (S_IFREG
));
160 verify (!S_ISSOCK (S_IFLNK
));
163 verify (S_ISSOCK (S_IFSOCK
));
167 verify (!S_ISDOOR (S_IFBLK
));
169 verify (!S_ISDOOR (S_IFCHR
));
170 verify (!S_ISDOOR (S_IFDIR
));
171 verify (!S_ISDOOR (S_IFIFO
));
172 verify (!S_ISDOOR (S_IFREG
));
174 verify (!S_ISDOOR (S_IFLNK
));
177 verify (!S_ISDOOR (S_IFSOCK
));
181 verify (!S_ISMPB (S_IFBLK
));
183 verify (!S_ISMPB (S_IFCHR
));
184 verify (!S_ISMPB (S_IFDIR
));
185 verify (!S_ISMPB (S_IFIFO
));
186 verify (!S_ISMPB (S_IFREG
));
188 verify (!S_ISMPB (S_IFLNK
));
191 verify (!S_ISMPB (S_IFSOCK
));
195 verify (!S_ISMPX (S_IFBLK
));
197 verify (!S_ISMPX (S_IFCHR
));
198 verify (!S_ISMPX (S_IFDIR
));
199 verify (!S_ISMPX (S_IFIFO
));
200 verify (!S_ISMPX (S_IFREG
));
202 verify (!S_ISMPX (S_IFLNK
));
205 verify (!S_ISMPX (S_IFSOCK
));
209 verify (!S_ISNAM (S_IFBLK
));
211 verify (!S_ISNAM (S_IFCHR
));
212 verify (!S_ISNAM (S_IFDIR
));
213 verify (!S_ISNAM (S_IFIFO
));
214 verify (!S_ISNAM (S_IFREG
));
216 verify (!S_ISNAM (S_IFLNK
));
219 verify (!S_ISNAM (S_IFSOCK
));
223 verify (!S_ISNWK (S_IFBLK
));
225 verify (!S_ISNWK (S_IFCHR
));
226 verify (!S_ISNWK (S_IFDIR
));
227 verify (!S_ISNWK (S_IFIFO
));
228 verify (!S_ISNWK (S_IFREG
));
230 verify (!S_ISNWK (S_IFLNK
));
233 verify (!S_ISNWK (S_IFSOCK
));
237 verify (!S_ISPORT (S_IFBLK
));
239 verify (!S_ISPORT (S_IFCHR
));
240 verify (!S_ISPORT (S_IFDIR
));
241 verify (!S_ISPORT (S_IFIFO
));
242 verify (!S_ISPORT (S_IFREG
));
244 verify (!S_ISPORT (S_IFLNK
));
247 verify (!S_ISPORT (S_IFSOCK
));
251 verify (!S_ISCTG (S_IFBLK
));
253 verify (!S_ISCTG (S_IFCHR
));
254 verify (!S_ISCTG (S_IFDIR
));
255 verify (!S_ISCTG (S_IFIFO
));
256 verify (!S_ISCTG (S_IFREG
));
258 verify (!S_ISCTG (S_IFLNK
));
261 verify (!S_ISCTG (S_IFSOCK
));
265 verify (!S_ISOFD (S_IFBLK
));
267 verify (!S_ISOFD (S_IFCHR
));
268 verify (!S_ISOFD (S_IFDIR
));
269 verify (!S_ISOFD (S_IFIFO
));
270 verify (!S_ISOFD (S_IFREG
));
272 verify (!S_ISOFD (S_IFLNK
));
275 verify (!S_ISOFD (S_IFSOCK
));
279 verify (!S_ISOFL (S_IFBLK
));
281 verify (!S_ISOFL (S_IFCHR
));
282 verify (!S_ISOFL (S_IFDIR
));
283 verify (!S_ISOFL (S_IFIFO
));
284 verify (!S_ISOFL (S_IFREG
));
286 verify (!S_ISOFL (S_IFLNK
));
289 verify (!S_ISOFL (S_IFSOCK
));
293 verify (!S_ISWHT (S_IFBLK
));
295 verify (!S_ISWHT (S_IFCHR
));
296 verify (!S_ISWHT (S_IFDIR
));
297 verify (!S_ISWHT (S_IFIFO
));
298 verify (!S_ISWHT (S_IFREG
));
300 verify (!S_ISWHT (S_IFLNK
));
303 verify (!S_ISWHT (S_IFSOCK
));
306 /* POSIX 2008 requires traditional encoding of permission constants. */
307 verify (S_IRWXU
== 00700);
308 verify (S_IRUSR
== 00400);
309 verify (S_IWUSR
== 00200);
310 verify (S_IXUSR
== 00100);
311 verify (S_IRWXG
== 00070);
312 verify (S_IRGRP
== 00040);
313 verify (S_IWGRP
== 00020);
314 verify (S_IXGRP
== 00010);
315 verify (S_IRWXO
== 00007);
316 verify (S_IROTH
== 00004);
317 verify (S_IWOTH
== 00002);
318 verify (S_IXOTH
== 00001);
319 verify (S_ISUID
== 04000);
320 verify (S_ISGID
== 02000);
321 verify (S_ISVTX
== 01000);
323 #if ((0 <= UTIME_NOW && UTIME_NOW < 1000000000) \
324 || (0 <= UTIME_OMIT && UTIME_OMIT < 1000000000) \
325 || UTIME_NOW == UTIME_OMIT)
329 /* Check the existence of some types. */