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
total 1 1 100.0


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