Mostly minor updates to the source tree for portcls.
[reactos.git] / reactos / lib / mingw / include / sys / stat.h
1 /*
2 * stat.h
3 * This file has no copyright assigned and is placed in the Public Domain.
4 * This file is a part of the mingw-runtime package.
5 * No warranty is given; refer to the file DISCLAIMER within the package.
6 *
7 * Symbolic constants for opening and creating files, also stat, fstat and
8 * chmod functions.
9 *
10 */
11
12 #ifndef _STAT_H_
13 #define _STAT_H_
14
15 /* All the headers include this file. */
16 #include <_mingw.h>
17
18 #define __need_size_t
19 #define __need_wchar_t
20 #ifndef RC_INVOKED
21 #include <stddef.h>
22 #endif /* Not RC_INVOKED */
23
24 #include <sys/types.h>
25
26 /*
27 * Constants for the stat st_mode member.
28 */
29 #define _S_IFIFO 0x1000 /* FIFO */
30 #define _S_IFCHR 0x2000 /* Character */
31 #define _S_IFBLK 0x3000 /* Block: Is this ever set under w32? */
32 #define _S_IFDIR 0x4000 /* Directory */
33 #define _S_IFREG 0x8000 /* Regular */
34
35 #define _S_IFMT 0xF000 /* File type mask */
36
37 #define _S_IEXEC 0x0040
38 #define _S_IWRITE 0x0080
39 #define _S_IREAD 0x0100
40
41 #define _S_IRWXU (_S_IREAD | _S_IWRITE | _S_IEXEC)
42 #define _S_IXUSR _S_IEXEC
43 #define _S_IWUSR _S_IWRITE
44 #define _S_IRUSR _S_IREAD
45
46 #define _S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR)
47 #define _S_ISFIFO(m) (((m) & _S_IFMT) == _S_IFIFO)
48 #define _S_ISCHR(m) (((m) & _S_IFMT) == _S_IFCHR)
49 #define _S_ISBLK(m) (((m) & _S_IFMT) == _S_IFBLK)
50 #define _S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG)
51
52 #ifndef _NO_OLDNAMES
53
54 #define S_IFIFO _S_IFIFO
55 #define S_IFCHR _S_IFCHR
56 #define S_IFBLK _S_IFBLK
57 #define S_IFDIR _S_IFDIR
58 #define S_IFREG _S_IFREG
59 #define S_IFMT _S_IFMT
60 #define S_IEXEC _S_IEXEC
61 #define S_IWRITE _S_IWRITE
62 #define S_IREAD _S_IREAD
63 #define S_IRWXU _S_IRWXU
64 #define S_IXUSR _S_IXUSR
65 #define S_IWUSR _S_IWUSR
66 #define S_IRUSR _S_IRUSR
67
68 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
69 #define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
70 #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
71 #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
72 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
73
74 #endif /* Not _NO_OLDNAMES */
75
76 #ifndef RC_INVOKED
77
78 #ifndef _STAT_DEFINED
79 /*
80 * The structure manipulated and returned by stat and fstat.
81 *
82 * NOTE: If called on a directory the values in the time fields are not only
83 * invalid, they will cause localtime et. al. to return NULL. And calling
84 * asctime with a NULL pointer causes an Invalid Page Fault. So watch it!
85 */
86 struct _stat
87 {
88 _dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */
89 _ino_t st_ino; /* Always zero ? */
90 _mode_t st_mode; /* See above constants */
91 short st_nlink; /* Number of links. */
92 short st_uid; /* User: Maybe significant on NT ? */
93 short st_gid; /* Group: Ditto */
94 _dev_t st_rdev; /* Seems useless (not even filled in) */
95 _off_t st_size; /* File size in bytes */
96 time_t st_atime; /* Accessed date (always 00:00 hrs local
97 * on FAT) */
98 time_t st_mtime; /* Modified time */
99 time_t st_ctime; /* Creation time */
100 };
101
102 #ifndef _NO_OLDNAMES
103 /* NOTE: Must be the same as _stat above. */
104 struct stat
105 {
106 _dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */
107 _ino_t st_ino; /* Always zero ? */
108 _mode_t st_mode; /* See above constants */
109 short st_nlink; /* Number of links. */
110 short st_uid; /* User: Maybe significant on NT ? */
111 short st_gid; /* Group: Ditto */
112 _dev_t st_rdev; /* Seems useless (not even filled in) */
113 _off_t st_size; /* File size in bytes */
114 time_t st_atime; /* Accessed date (always 00:00 hrs local
115 * on FAT) */
116 time_t st_mtime; /* Modified time */
117 time_t st_ctime; /* Creation time */
118 };
119 #endif /* _NO_OLDNAMES */
120
121 #if defined (__MSVCRT__)
122 struct _stati64 {
123 _dev_t st_dev;
124 _ino_t st_ino;
125 unsigned short st_mode;
126 short st_nlink;
127 short st_uid;
128 short st_gid;
129 _dev_t st_rdev;
130 __int64 st_size;
131 time_t st_atime;
132 time_t st_mtime;
133 time_t st_ctime;
134 };
135
136 struct __stat64
137 {
138 _dev_t st_dev;
139 _ino_t st_ino;
140 _mode_t st_mode;
141 short st_nlink;
142 short st_uid;
143 short st_gid;
144 _dev_t st_rdev;
145 __int64 st_size;
146 __time64_t st_atime;
147 __time64_t st_mtime;
148 __time64_t st_ctime;
149 };
150 #endif /* __MSVCRT__ */
151 #define _STAT_DEFINED
152 #endif /* _STAT_DEFINED */
153
154 #ifdef __cplusplus
155 extern "C" {
156 #endif
157
158 _CRTIMP int __cdecl _fstat (int, struct _stat*);
159 _CRTIMP int __cdecl _chmod (const char*, int);
160 _CRTIMP int __cdecl _stat (const char*, struct _stat*);
161
162 #ifndef _NO_OLDNAMES
163
164 /* These functions live in liboldnames.a. */
165 _CRTIMP int __cdecl fstat (int, struct stat*);
166 _CRTIMP int __cdecl chmod (const char*, int);
167 _CRTIMP int __cdecl stat (const char*, struct stat*);
168
169 #endif /* Not _NO_OLDNAMES */
170
171 #if defined (__MSVCRT__)
172 _CRTIMP int __cdecl _fstati64(int, struct _stati64 *);
173 _CRTIMP int __cdecl _stati64(const char *, struct _stati64 *);
174 /* These require newer versions of msvcrt.dll (6.10 or higher). */
175 #if __MSVCRT_VERSION__ >= 0x0601
176 _CRTIMP int __cdecl _fstat64 (int, struct __stat64*);
177 _CRTIMP int __cdecl _stat64 (const char*, struct __stat64*);
178 #endif /* __MSVCRT_VERSION__ >= 0x0601 */
179 #if !defined ( _WSTAT_DEFINED) /* also declared in wchar.h */
180 _CRTIMP int __cdecl _wstat(const wchar_t*, struct _stat*);
181 _CRTIMP int __cdecl _wstati64 (const wchar_t*, struct _stati64*);
182 #if __MSVCRT_VERSION__ >= 0x0601
183 _CRTIMP int __cdecl _wstat64 (const wchar_t*, struct __stat64*);
184 #endif /* __MSVCRT_VERSION__ >= 0x0601 */
185 #define _WSTAT_DEFINED
186 #endif /* _WSTAT_DEFIND */
187 #endif /* __MSVCRT__ */
188
189 #ifdef __cplusplus
190 }
191 #endif
192
193 #endif /* Not RC_INVOKED */
194
195 #endif /* Not _STAT_H_ */