@@ -157,6 +157,80 @@ mod stat {
157157 }
158158 };
159159
160+ // Windows file attributes (if on Windows)
161+
162+ #[cfg(windows)]
163+ #[pyattr]
164+ pub use windows_sys::Win32::Storage::FileSystem::{
165+ FILE_ATTRIBUTE_ARCHIVE, FILE_ATTRIBUTE_COMPRESSED, FILE_ATTRIBUTE_DEVICE,
166+ FILE_ATTRIBUTE_DIRECTORY, FILE_ATTRIBUTE_ENCRYPTED, FILE_ATTRIBUTE_HIDDEN,
167+ FILE_ATTRIBUTE_INTEGRITY_STREAM, FILE_ATTRIBUTE_NO_SCRUB_DATA, FILE_ATTRIBUTE_NORMAL,
168+ FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, FILE_ATTRIBUTE_OFFLINE, FILE_ATTRIBUTE_READONLY,
169+ FILE_ATTRIBUTE_REPARSE_POINT, FILE_ATTRIBUTE_SPARSE_FILE, FILE_ATTRIBUTE_SYSTEM,
170+ FILE_ATTRIBUTE_TEMPORARY, FILE_ATTRIBUTE_VIRTUAL,
171+ };
172+
173+ // Unix file flags (if on Unix)
174+
175+ #[pyattr]
176+ pub const UF_NODUMP: u32 = macos_libc_get!(UF_NODUMP, 0x00000001);
177+
178+ #[pyattr]
179+ pub const UF_IMMUTABLE: u32 = macos_libc_get!(UF_IMMUTABLE, 0x00000002);
180+
181+ #[pyattr]
182+ pub const UF_APPEND: u32 = macos_libc_get!(UF_APPEND, 0x00000004);
183+
184+ #[pyattr]
185+ pub const UF_OPAQUE: u32 = macos_libc_get!(UF_OPAQUE, 0x00000008);
186+
187+ #[pyattr]
188+ pub const UF_COMPRESSED: u32 = macos_libc_get!(UF_COMPRESSED, 0x00000020);
189+
190+ #[pyattr]
191+ pub const UF_HIDDEN: u32 = macos_libc_get!(UF_HIDDEN, 0x00008000);
192+
193+ #[pyattr]
194+ pub const SF_ARCHIVED: u32 = macos_libc_get!(SF_ARCHIVED, 0x00010000);
195+
196+ #[pyattr]
197+ pub const SF_IMMUTABLE: u32 = macos_libc_get!(SF_IMMUTABLE, 0x00020000);
198+
199+ #[pyattr]
200+ pub const SF_APPEND: u32 = macos_libc_get!(SF_APPEND, 0x00040000);
201+
202+ #[pyattr]
203+ pub const SF_SETTABLE: u32 = if cfg!(target_os = "macos") {
204+ 0x3fff0000
205+ } else {
206+ 0xffff0000
207+ };
208+
209+ #[pyattr]
210+ pub const UF_NOUNLINK: u32 = 0x00000010;
211+
212+ #[pyattr]
213+ pub const SF_NOUNLINK: u32 = 0x00100000;
214+
215+ #[pyattr]
216+ pub const SF_SNAPSHOT: u32 = 0x00200000;
217+
218+ #[pyattr]
219+ pub const SF_FIRMLINK: u32 = 0x00800000;
220+
221+ #[pyattr]
222+ pub const SF_DATALESS: u32 = 0x40000000;
223+
224+ // MacOS specific
225+
226+ #[cfg(target_os = "macos")]
227+ #[pyattr]
228+ pub const SF_SUPPORTED: u32 = 0x009f0000;
229+
230+ #[cfg(target_os = "macos")]
231+ #[pyattr]
232+ pub const SF_SYNTHETIC: u32 = 0xc0000000;
233+
160234 // Stat result indices
161235
162236 #[pyattr]
@@ -333,80 +407,6 @@ mod stat {
333407
334408 result
335409 }
336-
337- // Windows file attributes (if on Windows)
338-
339- #[cfg(windows)]
340- #[pyattr]
341- pub use windows_sys::Win32::Storage::FileSystem::{
342- FILE_ATTRIBUTE_ARCHIVE, FILE_ATTRIBUTE_COMPRESSED, FILE_ATTRIBUTE_DEVICE,
343- FILE_ATTRIBUTE_DIRECTORY, FILE_ATTRIBUTE_ENCRYPTED, FILE_ATTRIBUTE_HIDDEN,
344- FILE_ATTRIBUTE_INTEGRITY_STREAM, FILE_ATTRIBUTE_NO_SCRUB_DATA, FILE_ATTRIBUTE_NORMAL,
345- FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, FILE_ATTRIBUTE_OFFLINE, FILE_ATTRIBUTE_READONLY,
346- FILE_ATTRIBUTE_REPARSE_POINT, FILE_ATTRIBUTE_SPARSE_FILE, FILE_ATTRIBUTE_SYSTEM,
347- FILE_ATTRIBUTE_TEMPORARY, FILE_ATTRIBUTE_VIRTUAL,
348- };
349-
350- // Unix file flags (if on Unix)
351-
352- #[pyattr]
353- pub const UF_NODUMP: u32 = macos_libc_get!(UF_NODUMP, 0x00000001);
354-
355- #[pyattr]
356- pub const UF_IMMUTABLE: u32 = macos_libc_get!(UF_IMMUTABLE, 0x00000002);
357-
358- #[pyattr]
359- pub const UF_APPEND: u32 = macos_libc_get!(UF_APPEND, 0x00000004);
360-
361- #[pyattr]
362- pub const UF_OPAQUE: u32 = macos_libc_get!(UF_OPAQUE, 0x00000008);
363-
364- #[pyattr]
365- pub const UF_COMPRESSED: u32 = macos_libc_get!(UF_COMPRESSED, 0x00000020);
366-
367- #[pyattr]
368- pub const UF_HIDDEN: u32 = macos_libc_get!(UF_HIDDEN, 0x00008000);
369-
370- #[pyattr]
371- pub const SF_ARCHIVED: u32 = macos_libc_get!(SF_ARCHIVED, 0x00010000);
372-
373- #[pyattr]
374- pub const SF_IMMUTABLE: u32 = macos_libc_get!(SF_IMMUTABLE, 0x00020000);
375-
376- #[pyattr]
377- pub const SF_APPEND: u32 = macos_libc_get!(SF_APPEND, 0x00040000);
378-
379- #[pyattr]
380- pub const SF_SETTABLE: u32 = if cfg!(target_os = "macos") {
381- 0x3fff0000
382- } else {
383- 0xffff0000
384- };
385-
386- #[pyattr]
387- pub const UF_NOUNLINK: u32 = 0x00000010;
388-
389- #[pyattr]
390- pub const SF_NOUNLINK: u32 = 0x00100000;
391-
392- #[pyattr]
393- pub const SF_SNAPSHOT: u32 = 0x00200000;
394-
395- #[pyattr]
396- pub const SF_FIRMLINK: u32 = 0x00800000;
397-
398- #[pyattr]
399- pub const SF_DATALESS: u32 = 0x40000000;
400-
401- // MacOS specific
402-
403- #[cfg(target_os = "macos")]
404- #[pyattr]
405- pub const SF_SUPPORTED: u32 = 0x009f0000;
406-
407- #[cfg(target_os = "macos")]
408- #[pyattr]
409- pub const SF_SYNTHETIC: u32 = 0xc0000000;
410410}
411411
412412pub fn make_module(vm: &VirtualMachine) -> PyRef<PyModule> {
0 commit comments