root/nt/inc/sys/stat.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


     1 /* sys/stat.h supplied with MSVCRT uses too narrow data types for
     2    inode and user/group id, so we replace them with our own.
     3 
     4 Copyright (C) 2008-2023 Free Software Foundation, Inc.
     5 
     6 This file is part of GNU Emacs.
     7 
     8 GNU Emacs is free software: you can redistribute it and/or modify
     9 it under the terms of the GNU General Public License as published by
    10 the Free Software Foundation, either version 3 of the License, or (at
    11 your option) any later version.
    12 
    13 GNU Emacs is distributed in the hope that it will be useful,
    14 but WITHOUT ANY WARRANTY; without even the implied warranty of
    15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16 GNU General Public License for more details.
    17 
    18 You should have received a copy of the GNU General Public License
    19 along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
    20 
    21 #ifndef INC_SYS_STAT_H_
    22 #define INC_SYS_STAT_H_
    23 
    24 #ifdef __MINGW32__
    25 # include <_mingw.h>
    26 #endif
    27 
    28 /* Only MinGW 3.13 and later has __MINGW_NOTHROW.  */
    29 #ifndef __MINGW_NOTHROW
    30 # define __MINGW_NOTHROW
    31 #endif
    32 
    33 /* Prevent the MinGW stat.h header from being included, ever.  */
    34 #ifndef _SYS_STAT_H
    35 # define _SYS_STAT_H
    36 #endif
    37 #ifndef _INC_STAT_H
    38 # define _INC_STAT_H
    39 #endif
    40 
    41 #include <sys/types.h>
    42 #include <time.h>
    43 
    44 #define S_IFMT  0xF800
    45 
    46 #define S_IFREG 0x8000
    47 #define S_IFDIR 0x4000
    48 #define S_IFBLK 0x3000
    49 #define S_IFCHR 0x2000
    50 #define S_IFIFO 0x1000
    51 #define S_IFLNK 0x0800
    52 
    53 #define S_IREAD  0x0100
    54 #define S_IWRITE 0x0080
    55 #define S_IEXEC  0x0040
    56 
    57 #define S_IRUSR S_IREAD
    58 #define S_IWUSR S_IWRITE
    59 #define S_IXUSR S_IEXEC
    60 #define S_IRWXU (S_IREAD | S_IWRITE | S_IEXEC)
    61 
    62 #define S_ISREG(m)      (((m) & S_IFMT) == S_IFREG)
    63 #define S_ISDIR(m)      (((m) & S_IFMT) == S_IFDIR)
    64 #define S_ISBLK(m)      (((m) & S_IFMT) == S_IFBLK)
    65 #define S_ISCHR(m)      (((m) & S_IFMT) == S_IFCHR)
    66 #define S_ISFIFO(m)     (((m) & S_IFMT) == S_IFIFO)
    67 #define S_ISLNK(m)      (((m) & S_IFMT) == S_IFLNK)
    68 
    69 /* These don't exist on Windows, but lib/filemode.c wants them.  */
    70 #define S_ISUID 0
    71 #define S_ISGID 0
    72 #define S_ISVTX 0
    73 #define S_IRGRP (S_IRUSR >> 3)
    74 #define S_IROTH (S_IRUSR >> 6)
    75 #define S_IWGRP (S_IWUSR >> 3)
    76 #define S_IWOTH (S_IWUSR >> 6)
    77 #define S_IXGRP (S_IXUSR >> 3)
    78 #define S_IXOTH (S_IXUSR >> 6)
    79 
    80 #define S_ISSOCK(m)    0
    81 #define S_ISCTG(p)     0
    82 #define S_ISDOOR(m)    0
    83 #define S_ISMPB(m)     0
    84 #define S_ISMPC(m)     0
    85 #define S_ISMPX(m)     0
    86 #define S_ISNWK(m)     0
    87 #define S_ISPORT(m)    0
    88 #define S_ISWHT(m)     0
    89 #define S_TYPEISMQ(p)  0
    90 #define S_TYPEISSEM(p) 0
    91 #define S_TYPEISSHM(p) 0
    92 #define S_TYPEISTMO(p) 0
    93 
    94 #define UTIME_NOW  (-1)
    95 #define UTIME_OMIT (-2)
    96 
    97 struct stat {
    98   unsigned __int64 st_ino;      /* ino_t in sys/types.h is too narrow */
    99   dev_t st_dev;
   100   unsigned short   st_mode;
   101   short            st_nlink;
   102   unsigned         st_uid; /* Vista's TrustedInstaller has a very large RID */
   103   unsigned         st_gid;
   104   unsigned __int64 st_size;
   105   dev_t            st_rdev;
   106   time_t           st_atime;
   107   time_t           st_mtime;
   108   time_t           st_ctime;
   109   char             st_uname[260];
   110   char             st_gname[260];
   111 };
   112 
   113 /* These are here to avoid compiler warnings when using wchar.h.  */
   114 struct _stat
   115 {
   116         _dev_t  st_dev;         /* Equivalent to drive number 0=A 1=B ... */
   117         _ino_t  st_ino;         /* Always zero ? */
   118         _mode_t st_mode;        /* See above constants */
   119         short   st_nlink;       /* Number of links. */
   120         short   st_uid;         /* User: Maybe significant on NT ? */
   121         short   st_gid;         /* Group: Ditto */
   122         _dev_t  st_rdev;        /* Seems useless (not even filled in) */
   123         _off_t  st_size;        /* File size in bytes */
   124         time_t  st_atime;       /* Accessed date (always 00:00 hrs local
   125                                  * on FAT) */
   126         time_t  st_mtime;       /* Modified time */
   127         time_t  st_ctime;       /* Creation time */
   128 };
   129 
   130 #if defined (__MSVCRT__)
   131 struct _stati64 {
   132     _dev_t st_dev;
   133     _ino_t st_ino;
   134     _mode_t st_mode;
   135     short st_nlink;
   136     short st_uid;
   137     short st_gid;
   138     _dev_t st_rdev;
   139     __int64 st_size;
   140     time_t st_atime;
   141     time_t st_mtime;
   142     time_t st_ctime;
   143 };
   144 #endif
   145 
   146 /* Internal variable for asking 'stat'/'lstat' to produce accurate
   147    info about owner and group of files. */
   148 extern int w32_stat_get_owner_group;
   149 
   150 /* Prevent redefinition by other headers, e.g. wchar.h.  */
   151 #define _STAT_DEFINED
   152 /* This prevents definition in MinGW's wchar.h of inline functions
   153    that use struct _stat64i32 etc., which we don't define and don't
   154    support in our implementation of 'stat' and 'fstat'.  If we don't
   155    prevent definition of those inline functions, any program (e.g.,
   156    test programs run by configure) that includes both wchar.h and
   157    sys/stat.h will fail to compile.  */
   158 #define _WSTAT_DEFINED
   159 
   160 int __cdecl __MINGW_NOTHROW     fstat (int, struct stat*);
   161 int __cdecl __MINGW_NOTHROW     stat (const char*, struct stat*);
   162 int __cdecl __MINGW_NOTHROW     lstat (const char*, struct stat*);
   163 int __cdecl __MINGW_NOTHROW     fstatat (int, char const *,
   164                                                  struct stat *, int);
   165 int __cdecl __MINGW_NOTHROW     chmod (const char*, int);
   166 
   167 /* Provide prototypes of library functions that are emulated on w32
   168    and whose prototypes are usually found in sys/stat.h on POSIX
   169    platforms.  */
   170 extern int utimensat (int, const char *, struct timespec const[2], int);
   171 
   172 #endif  /* INC_SYS_STAT_H_ */

/* [<][>][^][v][top][bottom][index][help] */