modernc.org/cc@v1.0.1/v2/headers/linux_386/usr/include/i386-linux-gnu/sys/stat.h (about)

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