Skip to content

Commit 8842db8

Browse files
committed
libc_const!
1 parent 116beaa commit 8842db8

File tree

1 file changed

+185
-82
lines changed

1 file changed

+185
-82
lines changed

vm/src/stdlib/stat.rs

Lines changed: 185 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -10,61 +10,68 @@ mod stat {
1010
#[cfg(not(any(unix, windows)))]
1111
type Mode = u32; // Fallback for unknown targets
1212

13-
// unix_libc_get
14-
cfg_if::cfg_if! {
15-
if #[cfg(unix)] {
16-
macro_rules! unix_libc_get {
17-
($name:ident, $val:expr) => {
18-
libc::$name
19-
};
13+
// libc_const macro for conditional compilation
14+
macro_rules! libc_const {
15+
(#[cfg($cfg:meta)] $name:ident, $fallback:expr) => {{
16+
#[cfg($cfg)]
17+
{
18+
libc::$name
2019
}
21-
} else {
22-
macro_rules! unix_libc_get {
23-
($name:ident, $val:expr) => {
24-
$val
25-
};
20+
#[cfg(not($cfg))]
21+
{
22+
$fallback
2623
}
27-
}
28-
29-
}
30-
31-
// macos_libc_get
32-
cfg_if::cfg_if! {
33-
if #[cfg(target_os = "macos")] {
34-
macro_rules! macos_libc_get {
35-
($name:ident, $val:expr) => {
36-
libc::$name
37-
};
38-
}
39-
} else {
40-
macro_rules! macos_libc_get {
41-
($name:ident, $val:expr) => {
42-
$val
43-
};
44-
}
45-
}
24+
}};
4625
}
4726

4827
#[pyattr]
49-
pub const S_IFDIR: Mode = unix_libc_get!(S_IFDIR, 0o040000);
28+
pub const S_IFDIR: Mode = libc_const!(
29+
#[cfg(unix)]
30+
S_IFDIR,
31+
0o040000
32+
);
5033

5134
#[pyattr]
52-
pub const S_IFCHR: Mode = unix_libc_get!(S_IFCHR, 0o020000);
35+
pub const S_IFCHR: Mode = libc_const!(
36+
#[cfg(unix)]
37+
S_IFCHR,
38+
0o020000
39+
);
5340

5441
#[pyattr]
55-
pub const S_IFBLK: Mode = unix_libc_get!(S_IFBLK, 0o060000);
42+
pub const S_IFBLK: Mode = libc_const!(
43+
#[cfg(unix)]
44+
S_IFBLK,
45+
0o060000
46+
);
5647

5748
#[pyattr]
58-
pub const S_IFREG: Mode = unix_libc_get!(S_IFREG, 0o100000);
49+
pub const S_IFREG: Mode = libc_const!(
50+
#[cfg(unix)]
51+
S_IFREG,
52+
0o100000
53+
);
5954

6055
#[pyattr]
61-
pub const S_IFIFO: Mode = unix_libc_get!(S_IFIFO, 0o010000);
56+
pub const S_IFIFO: Mode = libc_const!(
57+
#[cfg(unix)]
58+
S_IFIFO,
59+
0o010000
60+
);
6261

6362
#[pyattr]
64-
pub const S_IFLNK: Mode = unix_libc_get!(S_IFLNK, 0o120000);
63+
pub const S_IFLNK: Mode = libc_const!(
64+
#[cfg(unix)]
65+
S_IFLNK,
66+
0o120000
67+
);
6568

6669
#[pyattr]
67-
pub const S_IFSOCK: Mode = unix_libc_get!(S_IFSOCK, 0o140000);
70+
pub const S_IFSOCK: Mode = libc_const!(
71+
#[cfg(unix)]
72+
S_IFSOCK,
73+
0o140000
74+
);
6875

6976
#[pyattr]
7077
pub const S_IFDOOR: Mode = 0; // TODO: RUSTPYTHON Support Solaris
@@ -85,77 +92,137 @@ mod stat {
8592
// Permission bits
8693

8794
#[pyattr]
88-
pub const S_ISUID: Mode = unix_libc_get!(S_ISUID, 0o4000);
95+
pub const S_ISUID: Mode = libc_const!(
96+
#[cfg(unix)]
97+
S_ISUID,
98+
0o4000
99+
);
89100

90101
#[pyattr]
91-
pub const S_ISGID: Mode = unix_libc_get!(S_ISGID, 0o2000);
102+
pub const S_ISGID: Mode = libc_const!(
103+
#[cfg(unix)]
104+
S_ISGID,
105+
0o2000
106+
);
92107

93108
#[pyattr]
94-
pub const S_ENFMT: Mode = unix_libc_get!(S_ISGID, 0o2000);
109+
pub const S_ENFMT: Mode = libc_const!(
110+
#[cfg(unix)]
111+
S_ISGID,
112+
0o2000
113+
);
95114

96115
#[pyattr]
97-
pub const S_ISVTX: Mode = unix_libc_get!(S_ISVTX, 0o1000);
116+
pub const S_ISVTX: Mode = libc_const!(
117+
#[cfg(unix)]
118+
S_ISVTX,
119+
0o1000
120+
);
98121

99122
#[pyattr]
100-
pub const S_IRWXU: Mode = unix_libc_get!(S_IRWXU, 0o0700);
123+
pub const S_IRWXU: Mode = libc_const!(
124+
#[cfg(unix)]
125+
S_IRWXU,
126+
0o0700
127+
);
101128

102129
#[pyattr]
103-
pub const S_IRUSR: Mode = unix_libc_get!(S_IRUSR, 0o0400);
130+
pub const S_IRUSR: Mode = libc_const!(
131+
#[cfg(unix)]
132+
S_IRUSR,
133+
0o0400
134+
);
104135

105136
#[pyattr]
106-
pub const S_IREAD: Mode = unix_libc_get!(S_IRUSR, 0o0400);
137+
pub const S_IREAD: Mode = libc_const!(
138+
#[cfg(unix)]
139+
S_IRUSR,
140+
0o0400
141+
);
107142

108143
#[pyattr]
109-
pub const S_IWUSR: Mode = unix_libc_get!(S_IWUSR, 0o0200);
144+
pub const S_IWUSR: Mode = libc_const!(
145+
#[cfg(unix)]
146+
S_IWUSR,
147+
0o0200
148+
);
110149

111150
#[pyattr]
112-
pub const S_IXUSR: Mode = unix_libc_get!(S_IXUSR, 0o0100);
151+
pub const S_IXUSR: Mode = libc_const!(
152+
#[cfg(unix)]
153+
S_IXUSR,
154+
0o0100
155+
);
113156

114157
#[pyattr]
115-
pub const S_IRWXG: Mode = unix_libc_get!(S_IRWXG, 0o0070);
158+
pub const S_IRWXG: Mode = libc_const!(
159+
#[cfg(unix)]
160+
S_IRWXG,
161+
0o0070
162+
);
116163

117164
#[pyattr]
118-
pub const S_IRGRP: Mode = unix_libc_get!(S_IRGRP, 0o0040);
165+
pub const S_IRGRP: Mode = libc_const!(
166+
#[cfg(unix)]
167+
S_IRGRP,
168+
0o0040
169+
);
119170

120171
#[pyattr]
121-
pub const S_IWGRP: Mode = unix_libc_get!(S_IWGRP, 0o0020);
172+
pub const S_IWGRP: Mode = libc_const!(
173+
#[cfg(unix)]
174+
S_IWGRP,
175+
0o0020
176+
);
122177

123178
#[pyattr]
124-
pub const S_IXGRP: Mode = unix_libc_get!(S_IXGRP, 0o0010);
179+
pub const S_IXGRP: Mode = libc_const!(
180+
#[cfg(unix)]
181+
S_IXGRP,
182+
0o0010
183+
);
125184

126185
#[pyattr]
127-
pub const S_IRWXO: Mode = unix_libc_get!(S_IRWXO, 0o0007);
186+
pub const S_IRWXO: Mode = libc_const!(
187+
#[cfg(unix)]
188+
S_IRWXO,
189+
0o0007
190+
);
128191

129192
#[pyattr]
130-
pub const S_IROTH: Mode = unix_libc_get!(S_IROTH, 0o0004);
193+
pub const S_IROTH: Mode = libc_const!(
194+
#[cfg(unix)]
195+
S_IROTH,
196+
0o0004
197+
);
131198

132199
#[pyattr]
133-
pub const S_IWOTH: Mode = unix_libc_get!(S_IWOTH, 0o0002);
200+
pub const S_IWOTH: Mode = libc_const!(
201+
#[cfg(unix)]
202+
S_IWOTH,
203+
0o0002
204+
);
134205

135206
#[pyattr]
136-
pub const S_IXOTH: Mode = unix_libc_get!(S_IXOTH, 0o0001);
207+
pub const S_IXOTH: Mode = libc_const!(
208+
#[cfg(unix)]
209+
S_IXOTH,
210+
0o0001
211+
);
137212

138213
#[pyattr]
139-
pub const S_IWRITE: Mode = {
140-
cfg_if::cfg_if! {
141-
if #[cfg(all(unix, not(target_os = "android"), not(target_os = "redox")))] {
142-
libc::S_IWRITE
143-
} else {
144-
0o0200
145-
}
146-
}
147-
};
214+
pub const S_IWRITE: Mode = libc_const!(
215+
#[cfg(all(unix, not(target_os = "android"), not(target_os = "redox")))]
216+
S_IWRITE,
217+
0o0200
218+
);
148219

149220
#[pyattr]
150-
pub const S_IEXEC: Mode = {
151-
cfg_if::cfg_if! {
152-
if #[cfg(all(unix, not(target_os = "android"), not(target_os = "redox")))] {
153-
libc::S_IEXEC
154-
} else {
155-
0o0100
156-
}
157-
}
158-
};
221+
pub const S_IEXEC: Mode = libc_const!(
222+
#[cfg(all(unix, not(target_os = "android"), not(target_os = "redox")))]
223+
S_IEXEC,
224+
0o0100
225+
);
159226

160227
// Windows file attributes (if on Windows)
161228

@@ -173,31 +240,67 @@ mod stat {
173240
// Unix file flags (if on Unix)
174241

175242
#[pyattr]
176-
pub const UF_NODUMP: u32 = macos_libc_get!(UF_NODUMP, 0x00000001);
243+
pub const UF_NODUMP: u32 = libc_const!(
244+
#[cfg(target_os = "macos")]
245+
UF_NODUMP,
246+
0x00000001
247+
);
177248

178249
#[pyattr]
179-
pub const UF_IMMUTABLE: u32 = macos_libc_get!(UF_IMMUTABLE, 0x00000002);
250+
pub const UF_IMMUTABLE: u32 = libc_const!(
251+
#[cfg(target_os = "macos")]
252+
UF_IMMUTABLE,
253+
0x00000002
254+
);
180255

181256
#[pyattr]
182-
pub const UF_APPEND: u32 = macos_libc_get!(UF_APPEND, 0x00000004);
257+
pub const UF_APPEND: u32 = libc_const!(
258+
#[cfg(target_os = "macos")]
259+
UF_APPEND,
260+
0x00000004
261+
);
183262

184263
#[pyattr]
185-
pub const UF_OPAQUE: u32 = macos_libc_get!(UF_OPAQUE, 0x00000008);
264+
pub const UF_OPAQUE: u32 = libc_const!(
265+
#[cfg(target_os = "macos")]
266+
UF_OPAQUE,
267+
0x00000008
268+
);
186269

187270
#[pyattr]
188-
pub const UF_COMPRESSED: u32 = macos_libc_get!(UF_COMPRESSED, 0x00000020);
271+
pub const UF_COMPRESSED: u32 = libc_const!(
272+
#[cfg(target_os = "macos")]
273+
UF_COMPRESSED,
274+
0x00000020
275+
);
189276

190277
#[pyattr]
191-
pub const UF_HIDDEN: u32 = macos_libc_get!(UF_HIDDEN, 0x00008000);
278+
pub const UF_HIDDEN: u32 = libc_const!(
279+
#[cfg(target_os = "macos")]
280+
UF_HIDDEN,
281+
0x00008000
282+
);
192283

193284
#[pyattr]
194-
pub const SF_ARCHIVED: u32 = macos_libc_get!(SF_ARCHIVED, 0x00010000);
285+
pub const SF_ARCHIVED: u32 = libc_const!(
286+
#[cfg(target_os = "macos")]
287+
SF_ARCHIVED,
288+
0x00010000
289+
);
195290

196291
#[pyattr]
197-
pub const SF_IMMUTABLE: u32 = macos_libc_get!(SF_IMMUTABLE, 0x00020000);
292+
pub const SF_IMMUTABLE: u32 = libc_const!(
293+
#[cfg(target_os = "macos")]
294+
SF_IMMUTABLE,
295+
0x00020000
296+
);
198297

199298
#[pyattr]
200-
pub const SF_APPEND: u32 = macos_libc_get!(SF_APPEND, 0x00040000);
299+
pub const SF_APPEND: u32 = libc_const!(
300+
#[cfg(target_os = "macos")]
301+
SF_APPEND,
302+
0x00040000
303+
);
201304

202305
#[pyattr]
203306
pub const SF_SETTABLE: u32 = if cfg!(target_os = "macos") {

0 commit comments

Comments
 (0)