File Coverage

/usr/include/x86_64-linux-gnu/sys/stat.h
Criterion Covered Total %
statement 1 1 100.0
branch n/a
condition n/a
subroutine n/a
pod n/a
total 1 1 100.0


line stmt bran cond sub pod time code
1             /* Copyright (C) 1991-2016 Free Software Foundation, Inc.
2             This file is part of the GNU C Library.
3              
4             The GNU C Library is free software; you can redistribute it and/or
5             modify it under the terms of the GNU Lesser General Public
6             License as published by the Free Software Foundation; either
7             version 2.1 of the License, or (at your option) any later version.
8              
9             The GNU C Library 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 GNU
12             Lesser General Public License for more details.
13              
14             You should have received a copy of the GNU Lesser General Public
15             License along with the GNU C Library; if not, see
16             . */
17              
18             /*
19             * POSIX Standard: 5.6 File Characteristics
20             */
21              
22             #ifndef _SYS_STAT_H
23             #define _SYS_STAT_H 1
24              
25             #include
26              
27             #include /* For __mode_t and __dev_t. */
28              
29             #if defined __USE_XOPEN || defined __USE_XOPEN2K || defined __USE_ATFILE
30             # if defined __USE_XOPEN || defined __USE_XOPEN2K
31             # define __need_time_t
32             # endif
33             # ifdef __USE_ATFILE
34             # define __need_timespec
35             # endif
36             # include /* For time_t resp. timespec. */
37             #endif
38              
39             #if defined __USE_XOPEN || defined __USE_XOPEN2K
40             /* The Single Unix specification says that some more types are
41             available here. */
42             # ifndef __dev_t_defined
43             typedef __dev_t dev_t;
44             # define __dev_t_defined
45             # endif
46              
47             # ifndef __gid_t_defined
48             typedef __gid_t gid_t;
49             # define __gid_t_defined
50             # endif
51              
52             # ifndef __ino_t_defined
53             # ifndef __USE_FILE_OFFSET64
54             typedef __ino_t ino_t;
55             # else
56             typedef __ino64_t ino_t;
57             # endif
58             # define __ino_t_defined
59             # endif
60              
61             # ifndef __mode_t_defined
62             typedef __mode_t mode_t;
63             # define __mode_t_defined
64             # endif
65              
66             # ifndef __nlink_t_defined
67             typedef __nlink_t nlink_t;
68             # define __nlink_t_defined
69             # endif
70              
71             # ifndef __off_t_defined
72             # ifndef __USE_FILE_OFFSET64
73             typedef __off_t off_t;
74             # else
75             typedef __off64_t off_t;
76             # endif
77             # define __off_t_defined
78             # endif
79              
80             # ifndef __uid_t_defined
81             typedef __uid_t uid_t;
82             # define __uid_t_defined
83             # endif
84             #endif /* X/Open */
85              
86             #ifdef __USE_UNIX98
87             # ifndef __blkcnt_t_defined
88             # ifndef __USE_FILE_OFFSET64
89             typedef __blkcnt_t blkcnt_t;
90             # else
91             typedef __blkcnt64_t blkcnt_t;
92             # endif
93             # define __blkcnt_t_defined
94             # endif
95              
96             # ifndef __blksize_t_defined
97             typedef __blksize_t blksize_t;
98             # define __blksize_t_defined
99             # endif
100             #endif /* Unix98 */
101              
102             __BEGIN_DECLS
103              
104             #include
105              
106             #if defined __USE_MISC || defined __USE_XOPEN
107             # define S_IFMT __S_IFMT
108             # define S_IFDIR __S_IFDIR
109             # define S_IFCHR __S_IFCHR
110             # define S_IFBLK __S_IFBLK
111             # define S_IFREG __S_IFREG
112             # ifdef __S_IFIFO
113             # define S_IFIFO __S_IFIFO
114             # endif
115             # ifdef __S_IFLNK
116             # define S_IFLNK __S_IFLNK
117             # endif
118             # if (defined __USE_MISC || defined __USE_UNIX98) \
119             && defined __S_IFSOCK
120             # define S_IFSOCK __S_IFSOCK
121             # endif
122             #endif
123              
124             /* Test macros for file types. */
125              
126             #define __S_ISTYPE(mode, mask) (((mode) & __S_IFMT) == (mask))
127              
128             #define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR)
129             #define S_ISCHR(mode) __S_ISTYPE((mode), __S_IFCHR)
130             #define S_ISBLK(mode) __S_ISTYPE((mode), __S_IFBLK)
131             #define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG)
132             #ifdef __S_IFIFO
133             # define S_ISFIFO(mode) __S_ISTYPE((mode), __S_IFIFO)
134             #endif
135             #ifdef __S_IFLNK
136             # define S_ISLNK(mode) __S_ISTYPE((mode), __S_IFLNK)
137             #endif
138              
139             #if defined __USE_MISC && !defined __S_IFLNK
140             # define S_ISLNK(mode) 0
141             #endif
142              
143             #if (defined __USE_UNIX98 || defined __USE_XOPEN2K) \
144             && defined __S_IFSOCK
145             # define S_ISSOCK(mode) __S_ISTYPE((mode), __S_IFSOCK)
146             #elif defined __USE_XOPEN2K
147             # define S_ISSOCK(mode) 0
148             #endif
149              
150             /* These are from POSIX.1b. If the objects are not implemented using separate
151             distinct file types, the macros always will evaluate to zero. Unlike the
152             other S_* macros the following three take a pointer to a `struct stat'
153             object as the argument. */
154             #ifdef __USE_POSIX199309
155             # define S_TYPEISMQ(buf) __S_TYPEISMQ(buf)
156             # define S_TYPEISSEM(buf) __S_TYPEISSEM(buf)
157             # define S_TYPEISSHM(buf) __S_TYPEISSHM(buf)
158             #endif
159              
160              
161             /* Protection bits. */
162              
163             #define S_ISUID __S_ISUID /* Set user ID on execution. */
164             #define S_ISGID __S_ISGID /* Set group ID on execution. */
165              
166             #if defined __USE_MISC || defined __USE_XOPEN
167             /* Save swapped text after use (sticky bit). This is pretty well obsolete. */
168             # define S_ISVTX __S_ISVTX
169             #endif
170              
171             #define S_IRUSR __S_IREAD /* Read by owner. */
172             #define S_IWUSR __S_IWRITE /* Write by owner. */
173             #define S_IXUSR __S_IEXEC /* Execute by owner. */
174             /* Read, write, and execute by owner. */
175             #define S_IRWXU (__S_IREAD|__S_IWRITE|__S_IEXEC)
176              
177             #ifdef __USE_MISC
178             # define S_IREAD S_IRUSR
179             # define S_IWRITE S_IWUSR
180             # define S_IEXEC S_IXUSR
181             #endif
182              
183             #define S_IRGRP (S_IRUSR >> 3) /* Read by group. */
184             #define S_IWGRP (S_IWUSR >> 3) /* Write by group. */
185             #define S_IXGRP (S_IXUSR >> 3) /* Execute by group. */
186             /* Read, write, and execute by group. */
187             #define S_IRWXG (S_IRWXU >> 3)
188              
189             #define S_IROTH (S_IRGRP >> 3) /* Read by others. */
190             #define S_IWOTH (S_IWGRP >> 3) /* Write by others. */
191             #define S_IXOTH (S_IXGRP >> 3) /* Execute by others. */
192             /* Read, write, and execute by others. */
193             #define S_IRWXO (S_IRWXG >> 3)
194              
195              
196             #ifdef __USE_MISC
197             /* Macros for common mode bit masks. */
198             # define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
199             # define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)/* 07777 */
200             # define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/
201              
202             # define S_BLKSIZE 512 /* Block size for `st_blocks'. */
203             #endif
204              
205              
206             #ifndef __USE_FILE_OFFSET64
207             /* Get file attributes for FILE and put them in BUF. */
208             extern int stat (const char *__restrict __file,
209             struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
210              
211             /* Get file attributes for the file, device, pipe, or socket
212             that file descriptor FD is open on and put them in BUF. */
213             extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2));
214             #else
215             # ifdef __REDIRECT_NTH
216             extern int __REDIRECT_NTH (stat, (const char *__restrict __file,
217             struct stat *__restrict __buf), stat64)
218             __nonnull ((1, 2));
219             extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
220             __nonnull ((2));
221             # else
222             # define stat stat64
223             # define fstat fstat64
224             # endif
225             #endif
226             #ifdef __USE_LARGEFILE64
227             extern int stat64 (const char *__restrict __file,
228             struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
229             extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
230             #endif
231              
232             #ifdef __USE_ATFILE
233             /* Similar to stat, get the attributes for FILE and put them in BUF.
234             Relative path names are interpreted relative to FD unless FD is
235             AT_FDCWD. */
236             # ifndef __USE_FILE_OFFSET64
237             extern int fstatat (int __fd, const char *__restrict __file,
238             struct stat *__restrict __buf, int __flag)
239             __THROW __nonnull ((2, 3));
240             # else
241             # ifdef __REDIRECT_NTH
242             extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
243             struct stat *__restrict __buf,
244             int __flag),
245             fstatat64) __nonnull ((2, 3));
246             # else
247             # define fstatat fstatat64
248             # endif
249             # endif
250              
251             # ifdef __USE_LARGEFILE64
252             extern int fstatat64 (int __fd, const char *__restrict __file,
253             struct stat64 *__restrict __buf, int __flag)
254             __THROW __nonnull ((2, 3));
255             # endif
256             #endif
257              
258             #if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
259             # ifndef __USE_FILE_OFFSET64
260             /* Get file attributes about FILE and put them in BUF.
261             If FILE is a symbolic link, do not follow it. */
262             extern int lstat (const char *__restrict __file,
263             struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
264             # else
265             # ifdef __REDIRECT_NTH
266             extern int __REDIRECT_NTH (lstat,
267             (const char *__restrict __file,
268             struct stat *__restrict __buf), lstat64)
269             __nonnull ((1, 2));
270             # else
271             # define lstat lstat64
272             # endif
273             # endif
274             # ifdef __USE_LARGEFILE64
275             extern int lstat64 (const char *__restrict __file,
276             struct stat64 *__restrict __buf)
277             __THROW __nonnull ((1, 2));
278             # endif
279             #endif
280              
281             /* Set file access permissions for FILE to MODE.
282             If FILE is a symbolic link, this affects its target instead. */
283             extern int chmod (const char *__file, __mode_t __mode)
284             __THROW __nonnull ((1));
285              
286             #ifdef __USE_MISC
287             /* Set file access permissions for FILE to MODE.
288             If FILE is a symbolic link, this affects the link itself
289             rather than its target. */
290             extern int lchmod (const char *__file, __mode_t __mode)
291             __THROW __nonnull ((1));
292             #endif
293              
294             /* Set file access permissions of the file FD is open on to MODE. */
295             #ifdef __USE_POSIX
296             extern int fchmod (int __fd, __mode_t __mode) __THROW;
297             #endif
298              
299             #ifdef __USE_ATFILE
300             /* Set file access permissions of FILE relative to
301             the directory FD is open on. */
302             extern int fchmodat (int __fd, const char *__file, __mode_t __mode,
303             int __flag)
304             __THROW __nonnull ((2)) __wur;
305             #endif /* Use ATFILE. */
306              
307              
308              
309             /* Set the file creation mask of the current process to MASK,
310             and return the old creation mask. */
311             extern __mode_t umask (__mode_t __mask) __THROW;
312              
313             #ifdef __USE_GNU
314             /* Get the current `umask' value without changing it.
315             This function is only available under the GNU Hurd. */
316             extern __mode_t getumask (void) __THROW;
317             #endif
318              
319             /* Create a new directory named PATH, with permission bits MODE. */
320             extern int mkdir (const char *__path, __mode_t __mode)
321             __THROW __nonnull ((1));
322              
323             #ifdef __USE_ATFILE
324             /* Like mkdir, create a new directory with permission bits MODE. But
325             interpret relative PATH names relative to the directory associated
326             with FD. */
327             extern int mkdirat (int __fd, const char *__path, __mode_t __mode)
328             __THROW __nonnull ((2));
329             #endif
330              
331             /* Create a device file named PATH, with permission and special bits MODE
332             and device number DEV (which can be constructed from major and minor
333             device numbers with the `makedev' macro above). */
334             #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
335             extern int mknod (const char *__path, __mode_t __mode, __dev_t __dev)
336             __THROW __nonnull ((1));
337              
338             # ifdef __USE_ATFILE
339             /* Like mknod, create a new device file with permission bits MODE and
340             device number DEV. But interpret relative PATH names relative to
341             the directory associated with FD. */
342             extern int mknodat (int __fd, const char *__path, __mode_t __mode,
343             __dev_t __dev) __THROW __nonnull ((2));
344             # endif
345             #endif
346              
347              
348             /* Create a new FIFO named PATH, with permission bits MODE. */
349             extern int mkfifo (const char *__path, __mode_t __mode)
350             __THROW __nonnull ((1));
351              
352             #ifdef __USE_ATFILE
353             /* Like mkfifo, create a new FIFO with permission bits MODE. But
354             interpret relative PATH names relative to the directory associated
355             with FD. */
356             extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
357             __THROW __nonnull ((2));
358             #endif
359            
360             #ifdef __USE_ATFILE
361             /* Set file access and modification times relative to directory file
362             descriptor. */
363             extern int utimensat (int __fd, const char *__path,
364             const struct timespec __times[2],
365             int __flags)
366             __THROW __nonnull ((2));
367             #endif
368              
369             #ifdef __USE_XOPEN2K8
370             /* Set file access and modification times of the file associated with FD. */
371             extern int futimens (int __fd, const struct timespec __times[2]) __THROW;
372             #endif
373            
374             /* To allow the `struct stat' structure and the file type `mode_t'
375             bits to vary without changing shared library major version number,
376             the `stat' family of functions and `mknod' are in fact inline
377             wrappers around calls to `xstat', `fxstat', `lxstat', and `xmknod',
378             which all take a leading version-number argument designating the
379             data structure and bits used. defines _STAT_VER with
380             the version number corresponding to `struct stat' as defined in
381             that file; and _MKNOD_VER with the version number corresponding to
382             the S_IF* macros defined therein. It is arranged that when not
383             inlined these function are always statically linked; that way a
384             dynamically-linked executable always encodes the version number
385             corresponding to the data structures it uses, so the `x' functions
386             in the shared library can adapt without needing to recompile all
387             callers. */
388              
389             #ifndef _STAT_VER
390             # define _STAT_VER 0
391             #endif
392             #ifndef _MKNOD_VER
393             # define _MKNOD_VER 0
394             #endif
395              
396             /* Wrappers for stat and mknod system calls. */
397             #ifndef __USE_FILE_OFFSET64
398             extern int __fxstat (int __ver, int __fildes, struct stat *__stat_buf)
399             __THROW __nonnull ((3));
400             extern int __xstat (int __ver, const char *__filename,
401             struct stat *__stat_buf) __THROW __nonnull ((2, 3));
402             extern int __lxstat (int __ver, const char *__filename,
403             struct stat *__stat_buf) __THROW __nonnull ((2, 3));
404             extern int __fxstatat (int __ver, int __fildes, const char *__filename,
405             struct stat *__stat_buf, int __flag)
406             __THROW __nonnull ((3, 4));
407             #else
408             # ifdef __REDIRECT_NTH
409             extern int __REDIRECT_NTH (__fxstat, (int __ver, int __fildes,
410             struct stat *__stat_buf), __fxstat64)
411             __nonnull ((3));
412             extern int __REDIRECT_NTH (__xstat, (int __ver, const char *__filename,
413             struct stat *__stat_buf), __xstat64)
414             __nonnull ((2, 3));
415             extern int __REDIRECT_NTH (__lxstat, (int __ver, const char *__filename,
416             struct stat *__stat_buf), __lxstat64)
417             __nonnull ((2, 3));
418             extern int __REDIRECT_NTH (__fxstatat, (int __ver, int __fildes,
419             const char *__filename,
420             struct stat *__stat_buf, int __flag),
421             __fxstatat64) __nonnull ((3, 4));
422              
423             # else
424             # define __fxstat __fxstat64
425             # define __xstat __xstat64
426             # define __lxstat __lxstat64
427             # endif
428             #endif
429              
430             #ifdef __USE_LARGEFILE64
431             extern int __fxstat64 (int __ver, int __fildes, struct stat64 *__stat_buf)
432             __THROW __nonnull ((3));
433             extern int __xstat64 (int __ver, const char *__filename,
434             struct stat64 *__stat_buf) __THROW __nonnull ((2, 3));
435             extern int __lxstat64 (int __ver, const char *__filename,
436             struct stat64 *__stat_buf) __THROW __nonnull ((2, 3));
437             extern int __fxstatat64 (int __ver, int __fildes, const char *__filename,
438             struct stat64 *__stat_buf, int __flag)
439             __THROW __nonnull ((3, 4));
440             #endif
441             extern int __xmknod (int __ver, const char *__path, __mode_t __mode,
442             __dev_t *__dev) __THROW __nonnull ((2, 4));
443              
444             extern int __xmknodat (int __ver, int __fd, const char *__path,
445             __mode_t __mode, __dev_t *__dev)
446             __THROW __nonnull ((3, 5));
447              
448             #ifdef __USE_EXTERN_INLINES
449             /* Inlined versions of the real stat and mknod functions. */
450              
451             __extern_inline int
452             __NTH (stat (const char *__path, struct stat *__statbuf))
453             {
454             return __xstat (_STAT_VER, __path, __statbuf);
455             }
456              
457             # if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
458             __extern_inline int
459             __NTH (lstat (const char *__path, struct stat *__statbuf))
460             {
461             return __lxstat (_STAT_VER, __path, __statbuf);
462             }
463             # endif
464              
465             __extern_inline int
466             __NTH (fstat (int __fd, struct stat *__statbuf))
467             {
468 19           return __fxstat (_STAT_VER, __fd, __statbuf);
469             }
470              
471             # ifdef __USE_ATFILE
472             __extern_inline int
473             __NTH (fstatat (int __fd, const char *__filename, struct stat *__statbuf,
474             int __flag))
475             {
476             return __fxstatat (_STAT_VER, __fd, __filename, __statbuf, __flag);
477             }
478             # endif
479              
480             # ifdef __USE_MISC
481             __extern_inline int
482             __NTH (mknod (const char *__path, __mode_t __mode, __dev_t __dev))
483             {
484             return __xmknod (_MKNOD_VER, __path, __mode, &__dev);
485             }
486             # endif
487              
488             # ifdef __USE_ATFILE
489             __extern_inline int
490             __NTH (mknodat (int __fd, const char *__path, __mode_t __mode,
491             __dev_t __dev))
492             {
493             return __xmknodat (_MKNOD_VER, __fd, __path, __mode, &__dev);
494             }
495             # endif
496              
497             # if defined __USE_LARGEFILE64 \
498             && (! defined __USE_FILE_OFFSET64 \
499             || (defined __REDIRECT_NTH && defined __OPTIMIZE__))
500             __extern_inline int
501             __NTH (stat64 (const char *__path, struct stat64 *__statbuf))
502             {
503             return __xstat64 (_STAT_VER, __path, __statbuf);
504             }
505              
506             # if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
507             __extern_inline int
508             __NTH (lstat64 (const char *__path, struct stat64 *__statbuf))
509             {
510             return __lxstat64 (_STAT_VER, __path, __statbuf);
511             }
512             # endif
513              
514             __extern_inline int
515             __NTH (fstat64 (int __fd, struct stat64 *__statbuf))
516             {
517             return __fxstat64 (_STAT_VER, __fd, __statbuf);
518             }
519              
520             # ifdef __USE_ATFILE
521             __extern_inline int
522             __NTH (fstatat64 (int __fd, const char *__filename, struct stat64 *__statbuf,
523             int __flag))
524             {
525             return __fxstatat64 (_STAT_VER, __fd, __filename, __statbuf, __flag);
526             }
527             # endif
528              
529             # endif
530              
531             #endif
532              
533             __END_DECLS
534              
535              
536             #endif /* sys/stat.h */