Reactos
1//
2// sys/stat.h
3//
4// Copyright (c) Microsoft Corporation. All rights reserved.
5//
6// The _stat() and _fstat() families of functions.
7//
8#pragma once
9
10#include <corecrt.h>
11#include <sys/types.h>
12
13#pragma warning(push)
14#pragma warning(disable: _UCRT_DISABLED_WARNINGS)
15_UCRT_DISABLE_CLANG_WARNINGS
16
17_CRT_BEGIN_C_HEADER
18
19//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
20//
21// Types
22//
23//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
24struct _stat32
25{
26 _dev_t st_dev;
27 _ino_t st_ino;
28 unsigned short st_mode;
29 short st_nlink;
30 short st_uid;
31 short st_gid;
32 _dev_t st_rdev;
33 _off_t st_size;
34 __time32_t st_atime;
35 __time32_t st_mtime;
36 __time32_t st_ctime;
37};
38
39struct _stat32i64
40{
41 _dev_t st_dev;
42 _ino_t st_ino;
43 unsigned short st_mode;
44 short st_nlink;
45 short st_uid;
46 short st_gid;
47 _dev_t st_rdev;
48 __int64 st_size;
49 __time32_t st_atime;
50 __time32_t st_mtime;
51 __time32_t st_ctime;
52};
53
54struct _stat64i32
55{
56 _dev_t st_dev;
57 _ino_t st_ino;
58 unsigned short st_mode;
59 short st_nlink;
60 short st_uid;
61 short st_gid;
62 _dev_t st_rdev;
63 _off_t st_size;
64 __time64_t st_atime;
65 __time64_t st_mtime;
66 __time64_t st_ctime;
67};
68
69struct _stat64
70{
71 _dev_t st_dev;
72 _ino_t st_ino;
73 unsigned short st_mode;
74 short st_nlink;
75 short st_uid;
76 short st_gid;
77 _dev_t st_rdev;
78 __int64 st_size;
79 __time64_t st_atime;
80 __time64_t st_mtime;
81 __time64_t st_ctime;
82};
83
84#define __stat64 _stat64 // For legacy compatibility
85
86#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES && !defined _CRT_NO_TIME_T
87 struct stat
88 {
89 _dev_t st_dev;
90 _ino_t st_ino;
91 unsigned short st_mode;
92 short st_nlink;
93 short st_uid;
94 short st_gid;
95 _dev_t st_rdev;
96 _off_t st_size;
97 time_t st_atime;
98 time_t st_mtime;
99 time_t st_ctime;
100 };
101#endif
102
103
104
105//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
106//
107// Flags
108//
109//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
110#define _S_IFMT 0xF000 // File type mask
111#define _S_IFDIR 0x4000 // Directory
112#define _S_IFCHR 0x2000 // Character special
113#define _S_IFIFO 0x1000 // Pipe
114#define _S_IFREG 0x8000 // Regular
115#define _S_IREAD 0x0100 // Read permission, owner
116#define _S_IWRITE 0x0080 // Write permission, owner
117#define _S_IEXEC 0x0040 // Execute/search permission, owner
118
119#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES
120 #define S_IFMT _S_IFMT
121 #define S_IFDIR _S_IFDIR
122 #define S_IFCHR _S_IFCHR
123 #define S_IFREG _S_IFREG
124 #define S_IREAD _S_IREAD
125 #define S_IWRITE _S_IWRITE
126 #define S_IEXEC _S_IEXEC
127#endif
128
129
130
131//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
132//
133// Functions
134//
135//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
136#ifdef _USE_32BIT_TIME_T
137 #define _fstat _fstat32
138 #define _fstati64 _fstat32i64
139 #define _stat _stat32
140 #define _stati64 _stat32i64
141 #define _wstat _wstat32
142 #define _wstati64 _wstat32i64
143#else
144 #define _fstat _fstat64i32
145 #define _fstati64 _fstat64
146 #define _stat _stat64i32
147 #define _stati64 _stat64
148 #define _wstat _wstat64i32
149 #define _wstati64 _wstat64
150#endif
151
152
153
154_ACRTIMP int __cdecl _fstat32(
155 _In_ int _FileHandle,
156 _Out_ struct _stat32* _Stat
157 );
158
159_ACRTIMP int __cdecl _fstat32i64(
160 _In_ int _FileHandle,
161 _Out_ struct _stat32i64* _Stat
162 );
163
164_ACRTIMP int __cdecl _fstat64i32(
165 _In_ int _FileHandle,
166 _Out_ struct _stat64i32* _Stat
167 );
168
169_ACRTIMP int __cdecl _fstat64(
170 _In_ int _FileHandle,
171 _Out_ struct _stat64* _Stat
172 );
173
174_ACRTIMP int __cdecl _stat32(
175 _In_z_ char const* _FileName,
176 _Out_ struct _stat32* _Stat
177 );
178
179_ACRTIMP int __cdecl _stat32i64(
180 _In_z_ char const* _FileName,
181 _Out_ struct _stat32i64* _Stat
182 );
183
184_ACRTIMP int __cdecl _stat64i32(
185 _In_z_ char const* _FileName,
186 _Out_ struct _stat64i32* _Stat
187 );
188
189_ACRTIMP int __cdecl _stat64(
190 _In_z_ char const* _FileName,
191 _Out_ struct _stat64* _Stat
192 );
193
194_ACRTIMP int __cdecl _wstat32(
195 _In_z_ wchar_t const* _FileName,
196 _Out_ struct _stat32* _Stat
197 );
198
199_ACRTIMP int __cdecl _wstat32i64(
200 _In_z_ wchar_t const* _FileName,
201 _Out_ struct _stat32i64* _Stat
202 );
203
204_ACRTIMP int __cdecl _wstat64i32(
205 _In_z_ wchar_t const* _FileName,
206 _Out_ struct _stat64i32* _Stat
207 );
208
209_ACRTIMP int __cdecl _wstat64(
210 _In_z_ wchar_t const* _FileName,
211 _Out_ struct _stat64* _Stat
212 );
213
214
215
216#if !defined RC_INVOKED && !defined __midl && defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES && !defined _CRT_NO_TIME_T
217 #ifdef _USE_32BIT_TIME_T
218
219 static __inline int __CRTDECL fstat(int const _FileHandle, struct stat* const _Stat)
220 {
221 _STATIC_ASSERT(sizeof(struct stat) == sizeof(struct _stat32));
222 return _fstat32(_FileHandle, (struct _stat32*)_Stat);
223 }
224
225 static __inline int __CRTDECL stat(char const* const _FileName, struct stat* const _Stat)
226 {
227 _STATIC_ASSERT(sizeof(struct stat) == sizeof(struct _stat32));
228 return _stat32(_FileName, (struct _stat32*)_Stat);
229 }
230
231 #else
232
233 static __inline int __CRTDECL fstat(int const _FileHandle, struct stat* const _Stat)
234 {
235 _STATIC_ASSERT(sizeof(struct stat) == sizeof(struct _stat64i32));
236 return _fstat64i32(_FileHandle, (struct _stat64i32*)_Stat);
237 }
238 static __inline int __CRTDECL stat(char const* const _FileName, struct stat* const _Stat)
239 {
240 _STATIC_ASSERT(sizeof(struct stat) == sizeof(struct _stat64i32));
241 return _stat64i32(_FileName, (struct _stat64i32*)_Stat);
242 }
243
244 #endif
245#endif
246
247_CRT_END_C_HEADER
248_UCRT_RESTORE_CLANG_WARNINGS
249#pragma warning(pop) // _UCRT_DISABLED_WARNINGS