stat.h (5732B) - Raw
1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #ifndef _INC_STAT 7 #define _INC_STAT 8 9 #ifndef _WIN32 10 #error Only Win32 target is supported! 11 #endif 12 13 #include <crtdefs.h> 14 #include <io.h> 15 16 #pragma pack(push,_CRT_PACKING) 17 18 #ifdef __cplusplus 19 extern "C" { 20 #endif 21 22 #ifndef _CRTIMP 23 #define _CRTIMP __declspec(dllimport) 24 #endif 25 26 #include <sys/types.h> 27 28 #ifdef _USE_32BIT_TIME_T 29 #ifdef _WIN64 30 #undef _USE_32BIT_TIME_T 31 #endif 32 #endif 33 34 #ifndef _TIME32_T_DEFINED 35 typedef long __time32_t; 36 #define _TIME32_T_DEFINED 37 #endif 38 39 #ifndef _TIME64_T_DEFINED 40 __MINGW_EXTENSION typedef __int64 __time64_t; 41 #define _TIME64_T_DEFINED 42 #endif 43 44 #ifndef _TIME_T_DEFINED 45 #ifdef _USE_32BIT_TIME_T 46 typedef __time32_t time_t; 47 #else 48 typedef __time64_t time_t; 49 #endif 50 #define _TIME_T_DEFINED 51 #endif 52 53 #ifndef _WCHAR_T_DEFINED 54 typedef unsigned short wchar_t; 55 #define _WCHAR_T_DEFINED 56 #endif 57 58 #include <_mingw_stat64.h> 59 60 #define _S_IFMT 0xF000 61 #define _S_IFDIR 0x4000 62 #define _S_IFCHR 0x2000 63 #define _S_IFIFO 0x1000 64 #define _S_IFREG 0x8000 65 #define _S_IREAD 0x0100 66 #define _S_IWRITE 0x0080 67 #define _S_IEXEC 0x0040 68 69 _CRTIMP int __cdecl _fstat32(int _FileDes,struct _stat32 *_Stat); 70 _CRTIMP int __cdecl _stat32(const char *_Name,struct _stat32 *_Stat); 71 _CRTIMP int __cdecl _fstat64(int _FileDes,struct _stat64 *_Stat); 72 _CRTIMP int __cdecl _fstat32i64(int _FileDes,struct _stat32i64 *_Stat); 73 _CRTIMP int __cdecl _fstat64i32(int _FileDes,struct _stat64i32 *_Stat); 74 _CRTIMP int __cdecl _stat64(const char *_Name,struct _stat64 *_Stat); 75 _CRTIMP int __cdecl _stat32i64(const char *_Name,struct _stat32i64 *_Stat); 76 _CRTIMP int __cdecl _stat64i32(const char *_Name,struct _stat64i32 *_Stat); 77 78 #ifndef _WSTAT_DEFINED 79 #define _WSTAT_DEFINED 80 _CRTIMP int __cdecl _wstat32(const wchar_t *_Name,struct _stat32 *_Stat); 81 _CRTIMP int __cdecl _wstat32i64(const wchar_t *_Name,struct _stat32i64 *_Stat); 82 _CRTIMP int __cdecl _wstat64i32(const wchar_t *_Name,struct _stat64i32 *_Stat); 83 _CRTIMP int __cdecl _wstat64(const wchar_t *_Name,struct _stat64 *_Stat); 84 #endif 85 86 #ifndef NO_OLDNAMES 87 #define _S_IFBLK 0x6000 /* Block: Is this ever set under w32? */ 88 89 #define S_IFMT _S_IFMT 90 #define S_IFDIR _S_IFDIR 91 #define S_IFCHR _S_IFCHR 92 #define S_IFREG _S_IFREG 93 #define S_IREAD _S_IREAD 94 #define S_IWRITE _S_IWRITE 95 #define S_IEXEC _S_IEXEC 96 #define S_IFIFO _S_IFIFO 97 #define S_IFBLK _S_IFBLK 98 99 #define _S_IRWXU (_S_IREAD | _S_IWRITE | _S_IEXEC) 100 #define _S_IXUSR _S_IEXEC 101 #define _S_IWUSR _S_IWRITE 102 103 #define S_IRWXU _S_IRWXU 104 #define S_IXUSR _S_IXUSR 105 #define S_IWUSR _S_IWUSR 106 #define S_IRUSR _S_IRUSR 107 #define _S_IRUSR _S_IREAD 108 109 #define S_IRGRP (S_IRUSR >> 3) 110 #define S_IWGRP (S_IWUSR >> 3) 111 #define S_IXGRP (S_IXUSR >> 3) 112 #define S_IRWXG (S_IRWXU >> 3) 113 114 #define S_IROTH (S_IRGRP >> 3) 115 #define S_IWOTH (S_IWGRP >> 3) 116 #define S_IXOTH (S_IXGRP >> 3) 117 #define S_IRWXO (S_IRWXG >> 3) 118 119 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 120 #define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) 121 #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) 122 #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) 123 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 124 125 #endif 126 127 #if !defined(NO_OLDNAMES) || defined(_POSIX) 128 129 /* 130 * When building mingw-w64 CRT files it is required that the fstat, stat and 131 * wstat functions are not declared with __MINGW_ASM_CALL redirection. 132 * Otherwise the mingw-w64 would provide broken fstat, stat and wstat symbols. 133 * To prevent ABI issues, the mingw-w64 runtime should not call the fstat, 134 * stat and wstat functions, instead it should call the fixed-size variants. 135 */ 136 #ifndef _CRTBLD 137 struct stat { 138 _dev_t st_dev; 139 _ino_t st_ino; 140 unsigned short st_mode; 141 short st_nlink; 142 short st_uid; 143 short st_gid; 144 _dev_t st_rdev; 145 off_t st_size; /* off_t follows _FILE_OFFSET_BITS */ 146 time_t st_atime; /* time_t follows _USE_32BIT_TIME_T */ 147 time_t st_mtime; 148 time_t st_ctime; 149 }; 150 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64) 151 #ifdef _USE_32BIT_TIME_T 152 int __cdecl fstat(int _Desc, struct stat *_Stat) __MINGW_ASM_CALL(_fstat32i64); 153 int __cdecl stat(const char *_Filename, struct stat *_Stat) __MINGW_ASM_CALL(stat32i64); 154 int __cdecl wstat(const wchar_t *_Filename, struct stat *_Stat) __MINGW_ASM_CALL(wstat32i64); 155 #else 156 int __cdecl fstat(int _Desc, struct stat *_Stat) __MINGW_ASM_CALL(_fstat64); 157 int __cdecl stat(const char *_Filename, struct stat *_Stat) __MINGW_ASM_CALL(stat64); 158 int __cdecl wstat(const wchar_t *_Filename, struct stat *_Stat) __MINGW_ASM_CALL(wstat64); 159 #endif 160 #else 161 #ifdef _USE_32BIT_TIME_T 162 int __cdecl fstat(int _Desc, struct stat *_Stat) __MINGW_ASM_CALL(_fstat32); 163 int __cdecl stat(const char *_Filename, struct stat *_Stat) __MINGW_ASM_CALL(stat32); 164 int __cdecl wstat(const wchar_t *_Filename, struct stat *_Stat) __MINGW_ASM_CALL(wstat32); 165 #else 166 int __cdecl fstat(int _Desc, struct stat *_Stat) __MINGW_ASM_CALL(_fstat64i32); 167 int __cdecl stat(const char *_Filename, struct stat *_Stat) __MINGW_ASM_CALL(stat64i32); 168 int __cdecl wstat(const wchar_t *_Filename, struct stat *_Stat) __MINGW_ASM_CALL(wstat64i32); 169 #endif 170 #endif 171 #endif 172 173 struct stat64 { 174 _dev_t st_dev; 175 _ino_t st_ino; 176 unsigned short st_mode; 177 short st_nlink; 178 short st_uid; 179 short st_gid; 180 _dev_t st_rdev; 181 __MINGW_EXTENSION __int64 st_size; 182 __time64_t st_atime; 183 __time64_t st_mtime; 184 __time64_t st_ctime; 185 }; 186 int __cdecl fstat64(int _Desc, struct stat64 *_Stat); 187 int __cdecl stat64(const char *_Filename, struct stat64 *_Stat); 188 int __cdecl wstat64(const wchar_t *_Filename, struct stat64 *_Stat); 189 190 #endif 191 192 #ifdef __cplusplus 193 } 194 #endif 195 196 #pragma pack(pop) 197 198 #endif /* _INC_STAT */ 199