modernc.org/cc@v1.0.1/v2/headers/linux_arm/usr/include/arm-linux-gnueabihf/sys/stat.h (about)

     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     <http://www.gnu.org/licenses/>.  */
    17  
    18  /*
    19   *	POSIX Standard: 5.6 File Characteristics	<sys/stat.h>
    20   */
    21  
    22  #ifndef	_SYS_STAT_H
    23  #define	_SYS_STAT_H	1
    24  
    25  #include <features.h>
    26  
    27  #include <bits/types.h>		/* 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 <time.h>		/* 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  #include <bits/stat.h>
   104  #if defined __USE_MISC || defined __USE_XOPEN
   105  #define S_IFMT		__S_IFMT
   106  #define S_IFDIR	__S_IFDIR
   107  #define S_IFCHR	__S_IFCHR
   108  #define S_IFBLK	__S_IFBLK
   109  #define S_IFREG	__S_IFREG
   110  #ifdef __S_IFIFO
   111  #define S_IFIFO	__S_IFIFO
   112  #endif
   113  #ifdef __S_IFLNK
   114  #define S_IFLNK	__S_IFLNK
   115  #endif
   116  #if (defined __USE_MISC || defined __USE_XOPEN_EXTENDED) \
   117       && defined __S_IFSOCK
   118  #define S_IFSOCK	__S_IFSOCK
   119  #endif
   120  #endif
   121  /* Test macros for file types.	*/
   122  #define	__S_ISTYPE(mode, mask)	(((mode) & __S_IFMT) == (mask))
   123  #define	S_ISDIR(mode)	 __S_ISTYPE((mode), __S_IFDIR)
   124  #define	S_ISCHR(mode)	 __S_ISTYPE((mode), __S_IFCHR)
   125  #define	S_ISBLK(mode)	 __S_ISTYPE((mode), __S_IFBLK)
   126  #define	S_ISREG(mode)	 __S_ISTYPE((mode), __S_IFREG)
   127  #ifdef __S_IFIFO
   128  #define S_ISFIFO(mode)	 __S_ISTYPE((mode), __S_IFIFO)
   129  #endif
   130  #ifdef __S_IFLNK
   131  #define S_ISLNK(mode)	 __S_ISTYPE((mode), __S_IFLNK)
   132  #endif
   133  #if defined __USE_MISC && !defined __S_IFLNK
   134  #define S_ISLNK(mode)  0
   135  #endif
   136  #if (defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K) \
   137      && defined __S_IFSOCK
   138  #define S_ISSOCK(mode) __S_ISTYPE((mode), __S_IFSOCK)
   139  #elif defined __USE_XOPEN2K
   140  #define S_ISSOCK(mode) 0
   141  #endif
   142  /* These are from POSIX.1b.  If the objects are not implemented using separate
   143     distinct file types, the macros always will evaluate to zero.  Unlike the
   144     other S_* macros the following three take a pointer to a `struct stat'
   145     object as the argument.  */
   146  #ifdef	__USE_POSIX199309
   147  #define S_TYPEISMQ(buf) __S_TYPEISMQ(buf)
   148  #define S_TYPEISSEM(buf) __S_TYPEISSEM(buf)
   149  #define S_TYPEISSHM(buf) __S_TYPEISSHM(buf)
   150  #endif
   151  /* Protection bits.  */
   152  #define	S_ISUID __S_ISUID	/* Set user ID on execution.  */
   153  #define	S_ISGID	__S_ISGID	/* Set group ID on execution.  */
   154  #if defined __USE_MISC || defined __USE_XOPEN
   155  /* Save swapped text after use (sticky bit).  This is pretty well obsolete.  */
   156  #define S_ISVTX	__S_ISVTX
   157  #endif
   158  #define	S_IRUSR	__S_IREAD	/* Read by owner.  */
   159  #define	S_IWUSR	__S_IWRITE	/* Write by owner.  */
   160  #define	S_IXUSR	__S_IEXEC	/* Execute by owner.  */
   161  /* Read, write, and execute by owner.  */
   162  #define	S_IRWXU	(__S_IREAD|__S_IWRITE|__S_IEXEC)
   163  #ifdef __USE_MISC
   164  #define S_IREAD	S_IRUSR
   165  #define S_IWRITE	S_IWUSR
   166  #define S_IEXEC	S_IXUSR
   167  #endif
   168  #define	S_IRGRP	(S_IRUSR >> 3)	/* Read by group.  */
   169  #define	S_IWGRP	(S_IWUSR >> 3)	/* Write by group.  */
   170  #define	S_IXGRP	(S_IXUSR >> 3)	/* Execute by group.  */
   171  /* Read, write, and execute by group.  */
   172  #define	S_IRWXG	(S_IRWXU >> 3)
   173  #define	S_IROTH	(S_IRGRP >> 3)	/* Read by others.  */
   174  #define	S_IWOTH	(S_IWGRP >> 3)	/* Write by others.  */
   175  #define	S_IXOTH	(S_IXGRP >> 3)	/* Execute by others.  */
   176  /* Read, write, and execute by others.  */
   177  #define	S_IRWXO	(S_IRWXG >> 3)
   178  #ifdef	__USE_MISC
   179  /* Macros for common mode bit masks.  */
   180  #define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO)	/* 0777 */
   181  #define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)	/* 07777 */
   182  #define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)	/* 0666 */
   183  #define S_BLKSIZE	512	/* Block size for `st_blocks'.  */
   184  #endif
   185  #ifndef __USE_FILE_OFFSET64
   186  /* Get file attributes for FILE and put them in BUF.  */
   187  extern int stat(const char *__restrict __file, struct stat *__restrict __buf)
   188  __THROW __nonnull((1, 2));
   189  
   190  /* Get file attributes for the file, device, pipe, or socket
   191     that file descriptor FD is open on and put them in BUF.  */
   192  extern int fstat(int __fd, struct stat *__buf)
   193  __THROW __nonnull((2));
   194  #else
   195  #ifdef __REDIRECT_NTH
   196  extern int __REDIRECT_NTH(stat, (const char *__restrict __file, struct stat * __restrict __buf), stat64) __nonnull((1, 2));
   197  extern int __REDIRECT_NTH(fstat, (int __fd, struct stat * __buf), fstat64) __nonnull((2));
   198  #else
   199  #define stat stat64
   200  #define fstat fstat64
   201  #endif
   202  #endif
   203  #ifdef __USE_LARGEFILE64
   204  extern int stat64(const char *__restrict __file, struct stat64 *__restrict __buf)
   205  __THROW __nonnull((1, 2));
   206  extern int fstat64(int __fd, struct stat64 *__buf)
   207  __THROW __nonnull((2));
   208  #endif
   209  
   210  #ifdef __USE_ATFILE
   211  /* Similar to stat, get the attributes for FILE and put them in BUF.
   212     Relative path names are interpreted relative to FD unless FD is
   213     AT_FDCWD.  */
   214  #ifndef __USE_FILE_OFFSET64
   215  extern int fstatat(int __fd, const char *__restrict __file, struct stat *__restrict __buf, int __flag)
   216  __THROW __nonnull((2, 3));
   217  #else
   218  #ifdef __REDIRECT_NTH
   219  extern int __REDIRECT_NTH(fstatat, (int __fd, const char *__restrict __file, struct stat * __restrict __buf, int __flag), fstatat64) __nonnull((2, 3));
   220  #else
   221  #define fstatat fstatat64
   222  #endif
   223  #endif
   224  
   225  #ifdef __USE_LARGEFILE64
   226  extern int fstatat64(int __fd, const char *__restrict __file, struct stat64 *__restrict __buf, int __flag)
   227  __THROW __nonnull((2, 3));
   228  #endif
   229  #endif
   230  
   231  #if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
   232  #ifndef __USE_FILE_OFFSET64
   233  /* Get file attributes about FILE and put them in BUF.
   234     If FILE is a symbolic link, do not follow it.  */
   235  extern int lstat(const char *__restrict __file, struct stat *__restrict __buf)
   236  __THROW __nonnull((1, 2));
   237  #else
   238  #ifdef __REDIRECT_NTH
   239  extern int __REDIRECT_NTH(lstat, (const char *__restrict __file, struct stat * __restrict __buf), lstat64) __nonnull((1, 2));
   240  #else
   241  #define lstat lstat64
   242  #endif
   243  #endif
   244  #ifdef __USE_LARGEFILE64
   245  extern int lstat64(const char *__restrict __file, struct stat64 *__restrict __buf)
   246  __THROW __nonnull((1, 2));
   247  #endif
   248  #endif
   249  
   250  /* Set file access permissions for FILE to MODE.
   251     If FILE is a symbolic link, this affects its target instead.  */
   252  extern int chmod(const char *__file, __mode_t __mode)
   253  __THROW __nonnull((1));
   254  
   255  #ifdef __USE_MISC
   256  /* Set file access permissions for FILE to MODE.
   257     If FILE is a symbolic link, this affects the link itself
   258     rather than its target.  */
   259  extern int lchmod(const char *__file, __mode_t __mode)
   260  __THROW __nonnull((1));
   261  #endif
   262  
   263  /* Set file access permissions of the file FD is open on to MODE.  */
   264  #if defined __USE_POSIX199309 || defined __USE_XOPEN_EXTENDED
   265  extern int fchmod(int __fd, __mode_t __mode) __THROW;
   266  #endif
   267  
   268  #ifdef __USE_ATFILE
   269  /* Set file access permissions of FILE relative to
   270     the directory FD is open on.  */
   271  extern int fchmodat(int __fd, const char *__file, __mode_t __mode, int __flag)
   272  __THROW __nonnull((2)) __wur;
   273  #endif				/* Use ATFILE.  */
   274  
   275  /* Set the file creation mask of the current process to MASK,
   276     and return the old creation mask.  */
   277  extern __mode_t umask(__mode_t __mask) __THROW;
   278  
   279  #ifdef	__USE_GNU
   280  /* Get the current `umask' value without changing it.
   281     This function is only available under the GNU Hurd.  */
   282  extern __mode_t getumask(void) __THROW;
   283  #endif
   284  
   285  /* Create a new directory named PATH, with permission bits MODE.  */
   286  extern int mkdir(const char *__path, __mode_t __mode)
   287  __THROW __nonnull((1));
   288  
   289  #ifdef __USE_ATFILE
   290  /* Like mkdir, create a new directory with permission bits MODE.  But
   291     interpret relative PATH names relative to the directory associated
   292     with FD.  */
   293  extern int mkdirat(int __fd, const char *__path, __mode_t __mode)
   294  __THROW __nonnull((2));
   295  #endif
   296  
   297  /* Create a device file named PATH, with permission and special bits MODE
   298     and device number DEV (which can be constructed from major and minor
   299     device numbers with the `makedev' macro above).  */
   300  #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
   301  extern int mknod(const char *__path, __mode_t __mode, __dev_t __dev)
   302  __THROW __nonnull((1));
   303  
   304  #ifdef __USE_ATFILE
   305  /* Like mknod, create a new device file with permission bits MODE and
   306     device number DEV.  But interpret relative PATH names relative to
   307     the directory associated with FD.  */
   308  extern int mknodat(int __fd, const char *__path, __mode_t __mode, __dev_t __dev)
   309  __THROW __nonnull((2));
   310  #endif
   311  #endif
   312  
   313  /* Create a new FIFO named PATH, with permission bits MODE.  */
   314  extern int mkfifo(const char *__path, __mode_t __mode)
   315  __THROW __nonnull((1));
   316  
   317  #ifdef __USE_ATFILE
   318  /* Like mkfifo, create a new FIFO with permission bits MODE.  But
   319     interpret relative PATH names relative to the directory associated
   320     with FD.  */
   321  extern int mkfifoat(int __fd, const char *__path, __mode_t __mode)
   322  __THROW __nonnull((2));
   323  #endif
   324  
   325  #ifdef __USE_ATFILE
   326  /* Set file access and modification times relative to directory file
   327     descriptor.  */
   328  extern int utimensat(int __fd, const char *__path, const struct timespec __times[2], int __flags)
   329  __THROW __nonnull((2));
   330  #endif
   331  
   332  #ifdef __USE_XOPEN2K8
   333  /* Set file access and modification times of the file associated with FD.  */
   334  extern int futimens(int __fd, const struct timespec __times[2]) __THROW;
   335  #endif
   336  
   337  /* To allow the `struct stat' structure and the file type `mode_t'
   338     bits to vary without changing shared library major version number,
   339     the `stat' family of functions and `mknod' are in fact inline
   340     wrappers around calls to `xstat', `fxstat', `lxstat', and `xmknod',
   341     which all take a leading version-number argument designating the
   342     data structure and bits used.  <bits/stat.h> defines _STAT_VER with
   343     the version number corresponding to `struct stat' as defined in
   344     that file; and _MKNOD_VER with the version number corresponding to
   345     the S_IF* macros defined therein.  It is arranged that when not
   346     inlined these function are always statically linked; that way a
   347     dynamically-linked executable always encodes the version number
   348     corresponding to the data structures it uses, so the `x' functions
   349     in the shared library can adapt without needing to recompile all
   350     callers.  */
   351  
   352  #ifndef _STAT_VER
   353  #define _STAT_VER	0
   354  #endif
   355  #ifndef _MKNOD_VER
   356  #define _MKNOD_VER	0
   357  #endif
   358  
   359  /* Wrappers for stat and mknod system calls.  */
   360  #ifndef __USE_FILE_OFFSET64
   361  extern int __fxstat(int __ver, int __fildes, struct stat *__stat_buf)
   362  __THROW __nonnull((3));
   363  extern int __xstat(int __ver, const char *__filename, struct stat *__stat_buf)
   364  __THROW __nonnull((2, 3));
   365  extern int __lxstat(int __ver, const char *__filename, struct stat *__stat_buf)
   366  __THROW __nonnull((2, 3));
   367  extern int __fxstatat(int __ver, int __fildes, const char *__filename, struct stat *__stat_buf, int __flag)
   368  __THROW __nonnull((3, 4));
   369  #else
   370  #ifdef __REDIRECT_NTH
   371  extern int __REDIRECT_NTH(__fxstat, (int __ver, int __fildes, struct stat * __stat_buf), __fxstat64) __nonnull((3));
   372  extern int __REDIRECT_NTH(__xstat, (int __ver, const char *__filename, struct stat * __stat_buf), __xstat64) __nonnull((2, 3));
   373  extern int __REDIRECT_NTH(__lxstat, (int __ver, const char *__filename, struct stat * __stat_buf), __lxstat64) __nonnull((2, 3));
   374  extern int __REDIRECT_NTH(__fxstatat, (int __ver, int __fildes, const char *__filename, struct stat * __stat_buf, int __flag), __fxstatat64) __nonnull((3, 4));
   375  
   376  #else
   377  #define __fxstat __fxstat64
   378  #define __xstat __xstat64
   379  #define __lxstat __lxstat64
   380  #endif
   381  #endif
   382  
   383  #ifdef __USE_LARGEFILE64
   384  extern int __fxstat64(int __ver, int __fildes, struct stat64 *__stat_buf)
   385  __THROW __nonnull((3));
   386  extern int __xstat64(int __ver, const char *__filename, struct stat64 *__stat_buf)
   387  __THROW __nonnull((2, 3));
   388  extern int __lxstat64(int __ver, const char *__filename, struct stat64 *__stat_buf)
   389  __THROW __nonnull((2, 3));
   390  extern int __fxstatat64(int __ver, int __fildes, const char *__filename, struct stat64 *__stat_buf, int __flag)
   391  __THROW __nonnull((3, 4));
   392  #endif
   393  extern int __xmknod(int __ver, const char *__path, __mode_t __mode, __dev_t * __dev)
   394  __THROW __nonnull((2, 4));
   395  
   396  extern int __xmknodat(int __ver, int __fd, const char *__path, __mode_t __mode, __dev_t * __dev)
   397  __THROW __nonnull((3, 5));
   398  
   399  #ifdef __USE_EXTERN_INLINES
   400  /* Inlined versions of the real stat and mknod functions.  */
   401  
   402  __extern_inline int __NTH(stat(const char *__path, struct stat *__statbuf))
   403  {
   404  	return __xstat(_STAT_VER, __path, __statbuf);
   405  }
   406  
   407  #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
   408  __extern_inline int __NTH(lstat(const char *__path, struct stat *__statbuf))
   409  {
   410  	return __lxstat(_STAT_VER, __path, __statbuf);
   411  }
   412  #endif
   413  
   414  __extern_inline int __NTH(fstat(int __fd, struct stat *__statbuf))
   415  {
   416  	return __fxstat(_STAT_VER, __fd, __statbuf);
   417  }
   418  
   419  #ifdef __USE_ATFILE
   420  __extern_inline int __NTH(fstatat(int __fd, const char *__filename, struct stat *__statbuf, int __flag))
   421  {
   422  	return __fxstatat(_STAT_VER, __fd, __filename, __statbuf, __flag);
   423  }
   424  #endif
   425  
   426  #ifdef __USE_MISC
   427  __extern_inline int __NTH(mknod(const char *__path, __mode_t __mode, __dev_t __dev))
   428  {
   429  	return __xmknod(_MKNOD_VER, __path, __mode, &__dev);
   430  }
   431  #endif
   432  
   433  #ifdef __USE_ATFILE
   434  __extern_inline int __NTH(mknodat(int __fd, const char *__path, __mode_t __mode, __dev_t __dev))
   435  {
   436  	return __xmknodat(_MKNOD_VER, __fd, __path, __mode, &__dev);
   437  }
   438  #endif
   439  
   440  #if defined __USE_LARGEFILE64 \
   441    && (! defined __USE_FILE_OFFSET64 \
   442        || (defined __REDIRECT_NTH && defined __OPTIMIZE__))
   443  __extern_inline int __NTH(stat64(const char *__path, struct stat64 *__statbuf))
   444  {
   445  	return __xstat64(_STAT_VER, __path, __statbuf);
   446  }
   447  
   448  #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
   449  __extern_inline int __NTH(lstat64(const char *__path, struct stat64 *__statbuf))
   450  {
   451  	return __lxstat64(_STAT_VER, __path, __statbuf);
   452  }
   453  #endif
   454  
   455  __extern_inline int __NTH(fstat64(int __fd, struct stat64 *__statbuf))
   456  {
   457  	return __fxstat64(_STAT_VER, __fd, __statbuf);
   458  }
   459  
   460  #ifdef __USE_ATFILE
   461  __extern_inline int __NTH(fstatat64(int __fd, const char *__filename, struct stat64 *__statbuf, int __flag))
   462  {
   463  	return __fxstatat64(_STAT_VER, __fd, __filename, __statbuf, __flag);
   464  }
   465  #endif
   466  
   467  #endif
   468  
   469  #endif
   470  
   471  __END_DECLS
   472  #endif				/* sys/stat.h  */