ReactOS
0.4.16-dev-1946-g52006dd
stat.h
Go to the documentation of this file.
1
/*
2
* PROJECT: FreeLoader
3
* LICENSE: Dual-licensed:
4
* LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
5
* MIT (https://spdx.org/licenses/MIT)
6
* PURPOSE: sys/stat.h S_IF* flags used for stat/inode.st_mode, and S_IS*
7
* convenience macros, used by *nix-based file-systems (EXTn, Btrfs, ...)
8
* COPYRIGHT: Copyright 2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
9
*
10
* REFERENCE: Based on definitions from MinGW-w64, (u)CRT, schily/stat.h, etc.
11
*/
12
13
#pragma once
14
15
16
/*
17
* Device/File types (st_mode)
18
*/
19
#define _S_IFMT 0xF000
// File type mask
20
#define _S_IFIFO 0x1000
// FIFO buffer (Named pipe)
21
#define _S_IFCHR 0x2000
// Character special
22
// #define _S_IFMPC 0x3000 // Multiplexed Character special
23
#define _S_IFDIR 0x4000
// Directory
24
// #define _S_IFNAM 0x5000 // XENIX Named special
25
#define _S_IFBLK 0x6000
// Block special
26
// #define _S_IFMPB 0x7000 // Multiplexed Block special
27
#define _S_IFREG 0x8000
// Regular file
28
29
#define _S_IFCTG 0x9000
// Contiguous file
30
#define _S_IFCMP 0x9000
// Compressed VxFS
31
#define _S_IFNWK 0x9000
// Network Special (HP-UX)
32
33
#define _S_IFLNK 0xA000
// Symbolic link
34
#define _S_IFSHAD 0xB000
// Solaris shadow inode
35
#define _S_IFSOCK 0xC000
// UNIX domain socket
36
#define _S_IFDOOR 0xD000
// Solaris DOOR
37
#define _S_IFPORT 0xE000
// Solaris event port
38
#define _S_IFWHT 0xE000
// BSD whiteout
39
#define _S_IFEVC 0xF000
// UNOS eventcount
40
41
#define _S_ISTYPE(mode, mask) (((mode) & _S_IFMT) == (mask))
42
43
#define _S_ISFIFO(m) _S_ISTYPE(m, _S_IFIFO)
// (((m) & _S_IFMT) == _S_IFIFO)
44
#define _S_ISCHR(m) _S_ISTYPE(m, _S_IFCHR)
// (((m) & _S_IFMT) == _S_IFCHR)
45
// #define _S_ISMPC(m) _S_ISTYPE(m, _S_IFMPC) // (((m) & _S_IFMT) == _S_IFMPC)
46
#define _S_ISDIR(m) _S_ISTYPE(m, _S_IFDIR)
// (((m) & _S_IFMT) == _S_IFDIR)
47
// #define _S_ISNAM(m) _S_ISTYPE(m, _S_IFNAM) // (((m) & _S_IFMT) == _S_IFNAM)
48
#define _S_ISBLK(m) _S_ISTYPE(m, _S_IFBLK)
// (((m) & _S_IFMT) == _S_IFBLK)
49
// #define _S_ISMPB(m) _S_ISTYPE(m, _S_IFMPB) // (((m) & _S_IFMT) == _S_IFMPB)
50
#define _S_ISREG(m) _S_ISTYPE(m, _S_IFREG)
// (((m) & _S_IFMT) == _S_IFREG)
51
52
#define _S_ISCTG(m) _S_ISTYPE(m, _S_IFCTG)
// (((m) & _S_IFMT) == _S_IFCTG)
53
#define _S_ISCMP(m) _S_ISTYPE(m, _S_IFCMP)
// (((m) & _S_IFMT) == _S_IFCMP)
54
#define _S_ISNWK(m) _S_ISTYPE(m, _S_IFNWK)
// (((m) & _S_IFMT) == _S_IFNWK)
55
56
#define _S_ISLNK(m) _S_ISTYPE(m, _S_IFLNK )
// (((m) & _S_IFMT) == _S_IFLNK )
57
#define _S_ISSHAD(m) _S_ISTYPE(m, _S_IFSHAD)
// (((m) & _S_IFMT) == _S_IFSHAD)
58
#define _S_ISSOCK(m) _S_ISTYPE(m, _S_IFSOCK)
// (((m) & _S_IFMT) == _S_IFSOCK)
59
#define _S_ISDOOR(m) _S_ISTYPE(m, _S_IFDOOR)
// (((m) & _S_IFMT) == _S_IFDOOR)
60
#define _S_ISPORT(m) _S_ISTYPE(m, _S_IFPORT)
// (((m) & _S_IFMT) == _S_IFPORT)
61
#define _S_ISWHT(m) _S_ISTYPE(m, _S_IFWHT )
// (((m) & _S_IFMT) == _S_IFWHT )
62
#define _S_ISEVC(m) _S_ISTYPE(m, _S_IFEVC )
// (((m) & _S_IFMT) == _S_IFEVC )
63
64
/*
65
* Major/Minor of device (st_rdev)
66
*/
67
#define S_INSEM 0x01
// XENIX IFNAM semaphore
68
#define S_INSHD 0x02
// XENIX IFNAM shared memory object
69
#define S_TYPEISSEM(_stbuf) (S_ISNAM((_stbuf)->st_mode) && \
70
(_stbuf)->st_rdev == S_INSEM)
71
#define S_TYPEISSHM(_stbuf) (S_ISNAM((_stbuf)->st_mode) && \
72
(_stbuf)->st_rdev == S_INSHD)
73
// #define S_TYPEISMQ(_stbuf) (...) // Test for message queue
74
// #define S_TYPEISTMO(_stbuf) (...) // Test for typed memory object
75
76
77
/*
78
* Mode permission bits (st_mode)
79
*
80
* S_IREAD/S_IWRITE/S_IEXEC is only available on UNIX V.7 but not on POSIX.
81
* UNIX V.7 has only S_IREAD/S_IWRITE/S_IEXEC and S_ISUID/S_ISGID/S_ISVTX.
82
* S_ISUID/S_ISGID/S_ISVTX is available on UNIX V.7 and POSIX.
83
*/
84
#define _S_IREAD 0x0100
// Read permission, owner
85
#define _S_IWRITE 0x0080
// Write permission, owner
86
#define _S_IEXEC 0x0040
// Execute/search permission, owner
87
88
#define _S_IRUSR _S_IREAD
// -r-------- // Read permission, owner
89
#define _S_IWUSR _S_IWRITE
// --w------- // Write permission, owner
90
#define _S_IXUSR _S_IEXEC
// ---x------ // Execute/search permission, owner
91
#define _S_IRWXU (_S_IRUSR | _S_IWUSR | _S_IXUSR)
// Read, write, execute/search by owner
92
93
#define _S_IRGRP (_S_IRUSR >> 3)
// ----r----- // Read permission, group
94
#define _S_IWGRP (_S_IWUSR >> 3)
// -----w---- // Write permission, group
95
#define _S_IXGRP (_S_IXUSR >> 3)
// ------x--- // Execute/search permission, group
96
#define _S_IRWXG (_S_IRGRP | _S_IWGRP | _S_IXGRP)
// Read, write, execute/search by group
97
98
#define _S_IROTH (_S_IRUSR >> 6)
// -------r-- // Read permission, others
99
#define _S_IWOTH (_S_IWUSR >> 6)
// --------w- // Write permission, others
100
#define _S_IXOTH (_S_IXUSR >> 6)
// ---------x // Execute/search permission, others
101
#define _S_IRWXO (_S_IROTH | _S_IWOTH | _S_IXOTH)
// Read, write, execute/search by others
102
103
#define _S_ISUID 0x0800
// Set-user-ID on execution
104
#define _S_ISGID 0x0400
// Set-group-ID on execution
105
#define _S_ISVTX 0x0200
// Sticky bit: on directories, restricted deletion flag
106
107
108
/* COMPATIBILITY DEFINITIONS *************************************************/
109
110
// #if !defined(NO_OLDNAMES) || (defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES)
111
112
/*
113
* Device/File types (st_mode)
114
*/
115
#define S_IFMT _S_IFMT
116
#define S_IFIFO _S_IFIFO
117
#define S_IFCHR _S_IFCHR
118
// #define S_IFMPC _S_IFMPC
119
#define S_IFDIR _S_IFDIR
120
// #define S_IFNAM _S_IFNAM
121
#define S_IFBLK _S_IFBLK
122
// #define S_IFMPB _S_IFMPB
123
#define S_IFREG _S_IFREG
124
125
#define S_IFCTG _S_IFCTG
126
#define S_IFCMP _S_IFCMP
127
#define S_IFNWK _S_IFNWK
128
129
#define S_IFLNK _S_IFLNK
130
#define S_IFSHAD _S_IFSHAD
131
#define S_IFSOCK _S_IFSOCK
132
#define S_IFDOOR _S_IFDOOR
133
#define S_IFPORT _S_IFPORT
134
#define S_IFWHT _S_IFWHT
135
#define S_IFEVC _S_IFEVC
136
137
#define S_ISTYPE(mode, mask) _S_ISTYPE(mode, mask)
138
139
#define S_ISFIFO(m) _S_ISFIFO(m)
140
#define S_ISCHR(m) _S_ISCHR(m)
141
// #define S_ISMPC(m) _S_ISMPC(m)
142
#define S_ISDIR(m) _S_ISDIR(m)
143
// #define S_ISNAM(m) _S_ISNAM(m)
144
#define S_ISBLK(m) _S_ISBLK(m)
145
// #define S_ISMPB(m) _S_ISMPB(m)
146
#define S_ISREG(m) _S_ISREG(m)
147
148
#define S_ISCTG(m) _S_ISCTG(m)
149
#define S_ISCMP(m) _S_ISCMP(m)
150
#define S_ISNWK(m) _S_ISNWK(m)
151
152
#define S_ISLNK(m) _S_ISLNK(m)
153
#define S_ISSHAD(m) _S_ISSHAD(m)
154
#define S_ISSOCK(m) _S_ISSOCK(m)
155
#define S_ISDOOR(m) _S_ISDOOR(m)
156
#define S_ISPORT(m) _S_ISPORT(m)
157
#define S_ISWHT(m) _S_ISWHT(m)
158
#define S_ISEVC(m) _S_ISEVC(m)
159
160
161
/*
162
* Mode permission bits (st_mode)
163
*/
164
#define S_IREAD _S_IREAD
165
#define S_IWRITE _S_IWRITE
166
#define S_IEXEC _S_IEXEC
167
168
#define S_IRUSR _S_IRUSR
169
#define S_IWUSR _S_IWUSR
170
#define S_IXUSR _S_IXUSR
171
#define S_IRWXU _S_IRWXU
172
173
#define S_IRGRP _S_IRGRP
174
#define S_IWGRP _S_IWGRP
175
#define S_IXGRP _S_IXGRP
176
#define S_IRWXG _S_IRWXG
177
178
#define S_IROTH _S_IROTH
179
#define S_IWOTH _S_IWOTH
180
#define S_IXOTH _S_IXOTH
181
#define S_IRWXO _S_IRWXO
182
183
#define S_ISUID _S_ISUID
184
#define S_ISGID _S_ISGID
185
#define S_ISVTX _S_ISVTX
186
187
// #endif // !NO_OLDNAMES || _CRT_INTERNAL_NONSTDC_NAMES
boot
freeldr
freeldr
include
fs
stat.h
Generated on Thu Dec 4 2025 06:16:41 for ReactOS by
1.9.6