Merge branch 'stable'
[gnulib.git] / tests / test-sys_stat.c
1 /* Test of <sys/stat.h> substitute.
2    Copyright (C) 2007-2012 Free Software Foundation, Inc.
3
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.
8
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.
13
14    You should have received a copy of the GNU General Public License
15    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
16
17 /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
18
19 #include <config.h>
20
21 #include <sys/stat.h>
22
23 #include "verify.h"
24
25 /* Check the existence of some macros.  */
26 int a[] =
27   {
28     S_IFMT,
29 #ifdef S_IFBLK /* missing on MSVC */
30     S_IFBLK,
31 #endif
32     S_IFCHR, S_IFDIR, S_IFIFO, S_IFREG,
33 #ifdef S_IFLNK /* missing on native Windows and DJGPP */
34     S_IFLNK,
35 #endif
36 #ifdef S_IFSOCK /* missing on native Windows and DJGPP */
37     S_IFSOCK,
38 #endif
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,
43     S_ISBLK (S_IFREG),
44     S_ISCHR (S_IFREG),
45     S_ISDIR (S_IFREG),
46     S_ISFIFO (S_IFREG),
47     S_ISREG (S_IFREG),
48     S_ISLNK (S_IFREG),
49     S_ISSOCK (S_IFREG),
50     S_ISDOOR (S_IFREG),
51     S_ISMPB (S_IFREG),
52     S_ISNAM (S_IFREG),
53     S_ISNWK (S_IFREG),
54     S_ISPORT (S_IFREG),
55     S_ISCTG (S_IFREG),
56     S_ISOFD (S_IFREG),
57     S_ISOFL (S_IFREG),
58     S_ISWHT (S_IFREG)
59   };
60
61 /* Sanity checks.  */
62
63 verify (S_IRWXU == (S_IRUSR | S_IWUSR | S_IXUSR));
64 verify (S_IRWXG == (S_IRGRP | S_IWGRP | S_IXGRP));
65 verify (S_IRWXO == (S_IROTH | S_IWOTH | S_IXOTH));
66
67 #ifdef S_IFBLK
68 verify (S_ISBLK (S_IFBLK));
69 #endif
70 verify (!S_ISBLK (S_IFCHR));
71 verify (!S_ISBLK (S_IFDIR));
72 verify (!S_ISBLK (S_IFIFO));
73 verify (!S_ISBLK (S_IFREG));
74 #ifdef S_IFLNK
75 verify (!S_ISBLK (S_IFLNK));
76 #endif
77 #ifdef S_IFSOCK
78 verify (!S_ISBLK (S_IFSOCK));
79 #endif
80
81 #ifdef S_IFBLK
82 verify (!S_ISCHR (S_IFBLK));
83 #endif
84 verify (S_ISCHR (S_IFCHR));
85 verify (!S_ISCHR (S_IFDIR));
86 verify (!S_ISCHR (S_IFIFO));
87 verify (!S_ISCHR (S_IFREG));
88 #ifdef S_IFLNK
89 verify (!S_ISCHR (S_IFLNK));
90 #endif
91 #ifdef S_IFSOCK
92 verify (!S_ISCHR (S_IFSOCK));
93 #endif
94
95 #ifdef S_IFBLK
96 verify (!S_ISDIR (S_IFBLK));
97 #endif
98 verify (!S_ISDIR (S_IFCHR));
99 verify (S_ISDIR (S_IFDIR));
100 verify (!S_ISDIR (S_IFIFO));
101 verify (!S_ISDIR (S_IFREG));
102 #ifdef S_IFLNK
103 verify (!S_ISDIR (S_IFLNK));
104 #endif
105 #ifdef S_IFSOCK
106 verify (!S_ISDIR (S_IFSOCK));
107 #endif
108
109 #ifdef S_IFBLK
110 verify (!S_ISFIFO (S_IFBLK));
111 #endif
112 verify (!S_ISFIFO (S_IFCHR));
113 verify (!S_ISFIFO (S_IFDIR));
114 verify (S_ISFIFO (S_IFIFO));
115 verify (!S_ISFIFO (S_IFREG));
116 #ifdef S_IFLNK
117 verify (!S_ISFIFO (S_IFLNK));
118 #endif
119 #ifdef S_IFSOCK
120 verify (!S_ISFIFO (S_IFSOCK));
121 #endif
122
123 #ifdef S_IFBLK
124 verify (!S_ISREG (S_IFBLK));
125 #endif
126 verify (!S_ISREG (S_IFCHR));
127 verify (!S_ISREG (S_IFDIR));
128 verify (!S_ISREG (S_IFIFO));
129 verify (S_ISREG (S_IFREG));
130 #ifdef S_IFLNK
131 verify (!S_ISREG (S_IFLNK));
132 #endif
133 #ifdef S_IFSOCK
134 verify (!S_ISREG (S_IFSOCK));
135 #endif
136
137 #ifdef S_IFBLK
138 verify (!S_ISLNK (S_IFBLK));
139 #endif
140 verify (!S_ISLNK (S_IFCHR));
141 verify (!S_ISLNK (S_IFDIR));
142 verify (!S_ISLNK (S_IFIFO));
143 verify (!S_ISLNK (S_IFREG));
144 #ifdef S_IFLNK
145 verify (S_ISLNK (S_IFLNK));
146 #endif
147 #ifdef S_IFSOCK
148 verify (!S_ISLNK (S_IFSOCK));
149 #endif
150
151 #ifdef S_IFBLK
152 verify (!S_ISSOCK (S_IFBLK));
153 #endif
154 verify (!S_ISSOCK (S_IFCHR));
155 verify (!S_ISSOCK (S_IFDIR));
156 verify (!S_ISSOCK (S_IFIFO));
157 verify (!S_ISSOCK (S_IFREG));
158 #ifdef S_IFLNK
159 verify (!S_ISSOCK (S_IFLNK));
160 #endif
161 #ifdef S_IFSOCK
162 verify (S_ISSOCK (S_IFSOCK));
163 #endif
164
165 #ifdef S_IFBLK
166 verify (!S_ISDOOR (S_IFBLK));
167 #endif
168 verify (!S_ISDOOR (S_IFCHR));
169 verify (!S_ISDOOR (S_IFDIR));
170 verify (!S_ISDOOR (S_IFIFO));
171 verify (!S_ISDOOR (S_IFREG));
172 #ifdef S_IFLNK
173 verify (!S_ISDOOR (S_IFLNK));
174 #endif
175 #ifdef S_IFSOCK
176 verify (!S_ISDOOR (S_IFSOCK));
177 #endif
178
179 #ifdef S_IFBLK
180 verify (!S_ISMPB (S_IFBLK));
181 #endif
182 verify (!S_ISMPB (S_IFCHR));
183 verify (!S_ISMPB (S_IFDIR));
184 verify (!S_ISMPB (S_IFIFO));
185 verify (!S_ISMPB (S_IFREG));
186 #ifdef S_IFLNK
187 verify (!S_ISMPB (S_IFLNK));
188 #endif
189 #ifdef S_IFSOCK
190 verify (!S_ISMPB (S_IFSOCK));
191 #endif
192
193 #ifdef S_IFBLK
194 verify (!S_ISNAM (S_IFBLK));
195 #endif
196 verify (!S_ISNAM (S_IFCHR));
197 verify (!S_ISNAM (S_IFDIR));
198 verify (!S_ISNAM (S_IFIFO));
199 verify (!S_ISNAM (S_IFREG));
200 #ifdef S_IFLNK
201 verify (!S_ISNAM (S_IFLNK));
202 #endif
203 #ifdef S_IFSOCK
204 verify (!S_ISNAM (S_IFSOCK));
205 #endif
206
207 #ifdef S_IFBLK
208 verify (!S_ISNWK (S_IFBLK));
209 #endif
210 verify (!S_ISNWK (S_IFCHR));
211 verify (!S_ISNWK (S_IFDIR));
212 verify (!S_ISNWK (S_IFIFO));
213 verify (!S_ISNWK (S_IFREG));
214 #ifdef S_IFLNK
215 verify (!S_ISNWK (S_IFLNK));
216 #endif
217 #ifdef S_IFSOCK
218 verify (!S_ISNWK (S_IFSOCK));
219 #endif
220
221 #ifdef S_IFBLK
222 verify (!S_ISPORT (S_IFBLK));
223 #endif
224 verify (!S_ISPORT (S_IFCHR));
225 verify (!S_ISPORT (S_IFDIR));
226 verify (!S_ISPORT (S_IFIFO));
227 verify (!S_ISPORT (S_IFREG));
228 #ifdef S_IFLNK
229 verify (!S_ISPORT (S_IFLNK));
230 #endif
231 #ifdef S_IFSOCK
232 verify (!S_ISPORT (S_IFSOCK));
233 #endif
234
235 #ifdef S_IFBLK
236 verify (!S_ISCTG (S_IFBLK));
237 #endif
238 verify (!S_ISCTG (S_IFCHR));
239 verify (!S_ISCTG (S_IFDIR));
240 verify (!S_ISCTG (S_IFIFO));
241 verify (!S_ISCTG (S_IFREG));
242 #ifdef S_IFLNK
243 verify (!S_ISCTG (S_IFLNK));
244 #endif
245 #ifdef S_IFSOCK
246 verify (!S_ISCTG (S_IFSOCK));
247 #endif
248
249 #ifdef S_IFBLK
250 verify (!S_ISOFD (S_IFBLK));
251 #endif
252 verify (!S_ISOFD (S_IFCHR));
253 verify (!S_ISOFD (S_IFDIR));
254 verify (!S_ISOFD (S_IFIFO));
255 verify (!S_ISOFD (S_IFREG));
256 #ifdef S_IFLNK
257 verify (!S_ISOFD (S_IFLNK));
258 #endif
259 #ifdef S_IFSOCK
260 verify (!S_ISOFD (S_IFSOCK));
261 #endif
262
263 #ifdef S_IFBLK
264 verify (!S_ISOFL (S_IFBLK));
265 #endif
266 verify (!S_ISOFL (S_IFCHR));
267 verify (!S_ISOFL (S_IFDIR));
268 verify (!S_ISOFL (S_IFIFO));
269 verify (!S_ISOFL (S_IFREG));
270 #ifdef S_IFLNK
271 verify (!S_ISOFL (S_IFLNK));
272 #endif
273 #ifdef S_IFSOCK
274 verify (!S_ISOFL (S_IFSOCK));
275 #endif
276
277 #ifdef S_IFBLK
278 verify (!S_ISWHT (S_IFBLK));
279 #endif
280 verify (!S_ISWHT (S_IFCHR));
281 verify (!S_ISWHT (S_IFDIR));
282 verify (!S_ISWHT (S_IFIFO));
283 verify (!S_ISWHT (S_IFREG));
284 #ifdef S_IFLNK
285 verify (!S_ISWHT (S_IFLNK));
286 #endif
287 #ifdef S_IFSOCK
288 verify (!S_ISWHT (S_IFSOCK));
289 #endif
290
291 /* POSIX 2008 requires traditional encoding of permission constants.  */
292 verify (S_IRWXU == 00700);
293 verify (S_IRUSR == 00400);
294 verify (S_IWUSR == 00200);
295 verify (S_IXUSR == 00100);
296 verify (S_IRWXG == 00070);
297 verify (S_IRGRP == 00040);
298 verify (S_IWGRP == 00020);
299 verify (S_IXGRP == 00010);
300 verify (S_IRWXO == 00007);
301 verify (S_IROTH == 00004);
302 verify (S_IWOTH == 00002);
303 verify (S_IXOTH == 00001);
304 verify (S_ISUID == 04000);
305 verify (S_ISGID == 02000);
306 verify (S_ISVTX == 01000);
307
308 #if ((0 <= UTIME_NOW && UTIME_NOW < 1000000000)           \
309      || (0 <= UTIME_OMIT && UTIME_OMIT < 1000000000)      \
310      || UTIME_NOW == UTIME_OMIT)
311 invalid UTIME macros
312 #endif
313
314 /* Check the existence of some types.  */
315 nlink_t t1;
316 off_t t2;
317 mode_t t3;
318
319 struct timespec st;
320
321 int
322 main (void)
323 {
324   return 0;
325 }