Home | History | Annotate | Download | only in lib
      1 /* -*- buffer-read-only: t -*- vi: set ro: */
      2 /* DO NOT EDIT! GENERATED AUTOMATICALLY! */
      3 /* Provide a more complete sys/stat header file.
      4    Copyright (C) 2005-2009 Free Software Foundation, Inc.
      5 
      6    This program is free software; you can redistribute it and/or modify
      7    it under the terms of the GNU General Public License as published by
      8    the Free Software Foundation; either version 3, or (at your option)
      9    any later version.
     10 
     11    This program is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14    GNU General Public License for more details.
     15 
     16    You should have received a copy of the GNU General Public License
     17    along with this program; if not, write to the Free Software Foundation,
     18    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
     19 
     20 /* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
     21 
     22 /* This file is supposed to be used on platforms where <sys/stat.h> is
     23    incomplete.  It is intended to provide definitions and prototypes
     24    needed by an application.  Start with what the system provides.  */
     25 
     26 #if __GNUC__ >= 3
     27 @PRAGMA_SYSTEM_HEADER@
     28 #endif
     29 
     30 #if defined __need_system_sys_stat_h
     31 /* Special invocation convention.  */
     32 
     33 #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
     34 
     35 #else
     36 /* Normal invocation convention.  */
     37 
     38 #ifndef _GL_SYS_STAT_H
     39 
     40 /* Get nlink_t.  */
     41 #include <sys/types.h>
     42 
     43 /* The include_next requires a split double-inclusion guard.  */
     44 #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
     45 
     46 #ifndef _GL_SYS_STAT_H
     47 #define _GL_SYS_STAT_H
     48 
     49 /* The definition of GL_LINK_WARNING is copied here.  */
     50 
     51 /* Before doing "#define mkdir rpl_mkdir" below, we need to include all
     52    headers that may declare mkdir().  */
     53 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
     54 # include <io.h>
     55 #endif
     56 
     57 #ifndef S_IFMT
     58 # define S_IFMT 0170000
     59 #endif
     60 
     61 #if STAT_MACROS_BROKEN
     62 # undef S_ISBLK
     63 # undef S_ISCHR
     64 # undef S_ISDIR
     65 # undef S_ISFIFO
     66 # undef S_ISLNK
     67 # undef S_ISNAM
     68 # undef S_ISMPB
     69 # undef S_ISMPC
     70 # undef S_ISNWK
     71 # undef S_ISREG
     72 # undef S_ISSOCK
     73 #endif
     74 
     75 #ifndef S_ISBLK
     76 # ifdef S_IFBLK
     77 #  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
     78 # else
     79 #  define S_ISBLK(m) 0
     80 # endif
     81 #endif
     82 
     83 #ifndef S_ISCHR
     84 # ifdef S_IFCHR
     85 #  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
     86 # else
     87 #  define S_ISCHR(m) 0
     88 # endif
     89 #endif
     90 
     91 #ifndef S_ISDIR
     92 # ifdef S_IFDIR
     93 #  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
     94 # else
     95 #  define S_ISDIR(m) 0
     96 # endif
     97 #endif
     98 
     99 #ifndef S_ISDOOR /* Solaris 2.5 and up */
    100 # define S_ISDOOR(m) 0
    101 #endif
    102 
    103 #ifndef S_ISFIFO
    104 # ifdef S_IFIFO
    105 #  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
    106 # else
    107 #  define S_ISFIFO(m) 0
    108 # endif
    109 #endif
    110 
    111 #ifndef S_ISLNK
    112 # ifdef S_IFLNK
    113 #  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
    114 # else
    115 #  define S_ISLNK(m) 0
    116 # endif
    117 #endif
    118 
    119 #ifndef S_ISMPB /* V7 */
    120 # ifdef S_IFMPB
    121 #  define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
    122 #  define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
    123 # else
    124 #  define S_ISMPB(m) 0
    125 #  define S_ISMPC(m) 0
    126 # endif
    127 #endif
    128 
    129 #ifndef S_ISNAM /* Xenix */
    130 # ifdef S_IFNAM
    131 #  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
    132 # else
    133 #  define S_ISNAM(m) 0
    134 # endif
    135 #endif
    136 
    137 #ifndef S_ISNWK /* HP/UX */
    138 # ifdef S_IFNWK
    139 #  define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
    140 # else
    141 #  define S_ISNWK(m) 0
    142 # endif
    143 #endif
    144 
    145 #ifndef S_ISPORT /* Solaris 10 and up */
    146 # define S_ISPORT(m) 0
    147 #endif
    148 
    149 #ifndef S_ISREG
    150 # ifdef S_IFREG
    151 #  define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
    152 # else
    153 #  define S_ISREG(m) 0
    154 # endif
    155 #endif
    156 
    157 #ifndef S_ISSOCK
    158 # ifdef S_IFSOCK
    159 #  define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
    160 # else
    161 #  define S_ISSOCK(m) 0
    162 # endif
    163 #endif
    164 
    165 
    166 #ifndef S_TYPEISMQ
    167 # define S_TYPEISMQ(p) 0
    168 #endif
    169 
    170 #ifndef S_TYPEISTMO
    171 # define S_TYPEISTMO(p) 0
    172 #endif
    173 
    174 
    175 #ifndef S_TYPEISSEM
    176 # ifdef S_INSEM
    177 #  define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
    178 # else
    179 #  define S_TYPEISSEM(p) 0
    180 # endif
    181 #endif
    182 
    183 #ifndef S_TYPEISSHM
    184 # ifdef S_INSHD
    185 #  define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
    186 # else
    187 #  define S_TYPEISSHM(p) 0
    188 # endif
    189 #endif
    190 
    191 /* high performance ("contiguous data") */
    192 #ifndef S_ISCTG
    193 # define S_ISCTG(p) 0
    194 #endif
    195 
    196 /* Cray DMF (data migration facility): off line, with data  */
    197 #ifndef S_ISOFD
    198 # define S_ISOFD(p) 0
    199 #endif
    200 
    201 /* Cray DMF (data migration facility): off line, with no data  */
    202 #ifndef S_ISOFL
    203 # define S_ISOFL(p) 0
    204 #endif
    205 
    206 /* 4.4BSD whiteout */
    207 #ifndef S_ISWHT
    208 # define S_ISWHT(m) 0
    209 #endif
    210 
    211 /* If any of the following are undefined,
    212    define them to their de facto standard values.  */
    213 #if !S_ISUID
    214 # define S_ISUID 04000
    215 #endif
    216 #if !S_ISGID
    217 # define S_ISGID 02000
    218 #endif
    219 
    220 /* S_ISVTX is a common extension to POSIX.  */
    221 #ifndef S_ISVTX
    222 # define S_ISVTX 01000
    223 #endif
    224 
    225 #if !S_IRUSR && S_IREAD
    226 # define S_IRUSR S_IREAD
    227 #endif
    228 #if !S_IRUSR
    229 # define S_IRUSR 00400
    230 #endif
    231 #if !S_IRGRP
    232 # define S_IRGRP (S_IRUSR >> 3)
    233 #endif
    234 #if !S_IROTH
    235 # define S_IROTH (S_IRUSR >> 6)
    236 #endif
    237 
    238 #if !S_IWUSR && S_IWRITE
    239 # define S_IWUSR S_IWRITE
    240 #endif
    241 #if !S_IWUSR
    242 # define S_IWUSR 00200
    243 #endif
    244 #if !S_IWGRP
    245 # define S_IWGRP (S_IWUSR >> 3)
    246 #endif
    247 #if !S_IWOTH
    248 # define S_IWOTH (S_IWUSR >> 6)
    249 #endif
    250 
    251 #if !S_IXUSR && S_IEXEC
    252 # define S_IXUSR S_IEXEC
    253 #endif
    254 #if !S_IXUSR
    255 # define S_IXUSR 00100
    256 #endif
    257 #if !S_IXGRP
    258 # define S_IXGRP (S_IXUSR >> 3)
    259 #endif
    260 #if !S_IXOTH
    261 # define S_IXOTH (S_IXUSR >> 6)
    262 #endif
    263 
    264 #if !S_IRWXU
    265 # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
    266 #endif
    267 #if !S_IRWXG
    268 # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
    269 #endif
    270 #if !S_IRWXO
    271 # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
    272 #endif
    273 
    274 /* S_IXUGO is a common extension to POSIX.  */
    275 #if !S_IXUGO
    276 # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
    277 #endif
    278 
    279 #ifndef S_IRWXUGO
    280 # define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
    281 #endif
    282 
    283 
    284 #ifdef __cplusplus
    285 extern "C" {
    286 #endif
    287 
    288 
    289 #if @GNULIB_LSTAT@
    290 # if ! @HAVE_LSTAT@
    291 /* mingw does not support symlinks, therefore it does not have lstat.  But
    292    without links, stat does just fine.  */
    293 #  define lstat stat
    294 # elif @REPLACE_LSTAT@
    295 #  undef lstat
    296 #  define lstat rpl_lstat
    297 extern int rpl_lstat (const char *name, struct stat *buf);
    298 # endif
    299 #elif defined GNULIB_POSIXCHECK
    300 # undef lstat
    301 # define lstat(p,b)							\
    302   (GL_LINK_WARNING ("lstat is unportable - "				\
    303 		    "use gnulib module lstat for portability"),		\
    304    lstat (p, b))
    305 #endif
    306 
    307 
    308 #if @REPLACE_MKDIR@
    309 # undef mkdir
    310 # define mkdir rpl_mkdir
    311 extern int mkdir (char const *name, mode_t mode);
    312 #else
    313 /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
    314    Additionally, it declares _mkdir (and depending on compile flags, an
    315    alias mkdir), only in the nonstandard <io.h>, which is included above.  */
    316 # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
    317 
    318 static inline int
    319 rpl_mkdir (char const *name, mode_t mode)
    320 {
    321   return _mkdir (name);
    322 }
    323 
    324 #  define mkdir rpl_mkdir
    325 # endif
    326 #endif
    327 
    328 
    329 /* Declare BSD extensions.  */
    330 
    331 #if @GNULIB_LCHMOD@
    332 /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
    333    denotes a symbolic link.  */
    334 # if !@HAVE_LCHMOD@
    335 /* The lchmod replacement follows symbolic links.  Callers should take
    336    this into account; lchmod should be applied only to arguments that
    337    are known to not be symbolic links.  On hosts that lack lchmod,
    338    this can lead to race conditions between the check and the
    339    invocation of lchmod, but we know of no workarounds that are
    340    reliable in general.  You might try requesting support for lchmod
    341    from your operating system supplier.  */
    342 #  define lchmod chmod
    343 # endif
    344 # if 0 /* assume already declared */
    345 extern int lchmod (const char *filename, mode_t mode);
    346 # endif
    347 #elif defined GNULIB_POSIXCHECK
    348 # undef lchmod
    349 # define lchmod(f,m) \
    350     (GL_LINK_WARNING ("lchmod is unportable - " \
    351                       "use gnulib module lchmod for portability"), \
    352      lchmod (f, m))
    353 #endif
    354 
    355 
    356 #ifdef __cplusplus
    357 }
    358 #endif
    359 
    360 
    361 #endif /* _GL_SYS_STAT_H */
    362 #endif /* _GL_SYS_STAT_H */
    363 #endif
    364