Mercurial > cpython-lru_cache-weakref
annotate Modules/_stat.c @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 75bc0ae02bcd |
| children |
| rev | line source |
|---|---|
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1 /* stat.h interface |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2 * |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
3 * The module defines all S_IF*, S_I*, UF_*, SF_* and ST_* constants to |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
4 * sensible default values as well as defines S_IS*() macros in order to keep |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
5 * backward compatibility with the old stat.py module. |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
6 * |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
7 * New constants and macros such as S_IFDOOR / S_ISDOOR() are always defined |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
8 * as int 0. |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
9 * |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
10 * NOTE: POSIX only defines the values of the S_I* permission bits. |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
11 * |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
12 */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
13 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
14 #define PY_SSIZE_T_CLEAN |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
15 #include "Python.h" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
16 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
17 #ifdef __cplusplus |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
18 extern "C" { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
19 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
20 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
21 #ifdef HAVE_SYS_TYPES_H |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
22 #include <sys/types.h> |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
23 #endif /* HAVE_SYS_TYPES_H */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
24 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
25 #ifdef HAVE_SYS_STAT_H |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
26 #include <sys/stat.h> |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
27 #endif /* HAVE_SYS_STAT_H */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
28 |
|
84265
e5427b0b2bf7
Issue #11016: Try to fix compilaton of the new _stat.c module on Windows
Victor Stinner <victor.stinner@gmail.com>
parents:
84258
diff
changeset
|
29 #ifdef MS_WINDOWS |
|
e5427b0b2bf7
Issue #11016: Try to fix compilaton of the new _stat.c module on Windows
Victor Stinner <victor.stinner@gmail.com>
parents:
84258
diff
changeset
|
30 typedef unsigned short mode_t; |
|
e5427b0b2bf7
Issue #11016: Try to fix compilaton of the new _stat.c module on Windows
Victor Stinner <victor.stinner@gmail.com>
parents:
84258
diff
changeset
|
31 #endif |
|
e5427b0b2bf7
Issue #11016: Try to fix compilaton of the new _stat.c module on Windows
Victor Stinner <victor.stinner@gmail.com>
parents:
84258
diff
changeset
|
32 |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
33 /* From Python's stat.py */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
34 #ifndef S_IMODE |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
35 # define S_IMODE 07777 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
36 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
37 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
38 /* S_IFXXX constants (file types) |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
39 * |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
40 * Only the names are defined by POSIX but not their value. All common file |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
41 * types seems to have the same numeric value on all platforms, though. |
|
84302
75bc0ae02bcd
Issue #11016: Don't define macros and constants that are already set by pyport.h
Christian Heimes <christian@cheimes.de>
parents:
84298
diff
changeset
|
42 * |
|
75bc0ae02bcd
Issue #11016: Don't define macros and constants that are already set by pyport.h
Christian Heimes <christian@cheimes.de>
parents:
84298
diff
changeset
|
43 * pyport.h guarantees S_IFMT, S_IFDIR, S_IFCHR, S_IFREG and S_IFLNK |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
44 */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
45 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
46 #ifndef S_IFBLK |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
47 # define S_IFBLK 0060000 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
48 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
49 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
50 #ifndef S_IFIFO |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
51 # define S_IFIFO 0010000 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
52 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
53 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
54 #ifndef S_IFSOCK |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
55 # define S_IFSOCK 0140000 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
56 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
57 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
58 #ifndef S_IFDOOR |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
59 # define S_IFDOOR 0 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
60 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
61 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
62 #ifndef S_IFPORT |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
63 # define S_IFPORT 0 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
64 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
65 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
66 #ifndef S_IFWHT |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
67 # define S_IFWHT 0 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
68 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
69 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
70 |
|
84302
75bc0ae02bcd
Issue #11016: Don't define macros and constants that are already set by pyport.h
Christian Heimes <christian@cheimes.de>
parents:
84298
diff
changeset
|
71 /* S_ISXXX() |
|
75bc0ae02bcd
Issue #11016: Don't define macros and constants that are already set by pyport.h
Christian Heimes <christian@cheimes.de>
parents:
84298
diff
changeset
|
72 * pyport.h defines S_ISDIR(), S_ISREG() and S_ISCHR() |
|
75bc0ae02bcd
Issue #11016: Don't define macros and constants that are already set by pyport.h
Christian Heimes <christian@cheimes.de>
parents:
84298
diff
changeset
|
73 */ |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
74 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
75 #ifndef S_ISBLK |
|
84296
bc52faaa50e5
Fix a typo in S_ISDIR, S_ISCHR, S_ISBLK and S_ISREG.
Christian Heimes <christian@cheimes.de>
parents:
84265
diff
changeset
|
76 # define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK) |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
77 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
78 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
79 #ifndef S_ISFIFO |
|
84296
bc52faaa50e5
Fix a typo in S_ISDIR, S_ISCHR, S_ISBLK and S_ISREG.
Christian Heimes <christian@cheimes.de>
parents:
84265
diff
changeset
|
80 # define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO) |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
81 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
82 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
83 #ifndef S_ISLNK |
|
84296
bc52faaa50e5
Fix a typo in S_ISDIR, S_ISCHR, S_ISBLK and S_ISREG.
Christian Heimes <christian@cheimes.de>
parents:
84265
diff
changeset
|
84 # define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
85 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
86 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
87 #ifndef S_ISSOCK |
|
84296
bc52faaa50e5
Fix a typo in S_ISDIR, S_ISCHR, S_ISBLK and S_ISREG.
Christian Heimes <christian@cheimes.de>
parents:
84265
diff
changeset
|
88 # define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
89 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
90 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
91 #ifndef S_ISDOOR |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
92 # define S_ISDOOR(mode) 0 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
93 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
94 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
95 #ifndef S_ISPORT |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
96 # define S_ISPORT(mode) 0 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
97 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
98 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
99 #ifndef S_ISWHT |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
100 # define S_ISWHT(mode) 0 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
101 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
102 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
103 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
104 /* S_I* file permission |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
105 * |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
106 * The permission bit value are defined by POSIX standards. |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
107 */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
108 #ifndef S_ISUID |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
109 # define S_ISUID 04000 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
110 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
111 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
112 #ifndef S_ISGID |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
113 # define S_ISGID 02000 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
114 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
115 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
116 /* what is S_ENFMT? */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
117 #ifndef S_ENFMT |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
118 # define S_ENFMT S_ISGID |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
119 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
120 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
121 #ifndef S_ISVTX |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
122 # define S_ISVTX 01000 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
123 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
124 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
125 #ifndef S_IREAD |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
126 # define S_IREAD 00400 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
127 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
128 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
129 #ifndef S_IWRITE |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
130 # define S_IWRITE 00200 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
131 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
132 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
133 #ifndef S_IEXEC |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
134 # define S_IEXEC 00100 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
135 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
136 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
137 #ifndef S_IRWXU |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
138 # define S_IRWXU 00700 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
139 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
140 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
141 #ifndef S_IRUSR |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
142 # define S_IRUSR 00400 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
143 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
144 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
145 #ifndef S_IWUSR |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
146 # define S_IWUSR 00200 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
147 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
148 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
149 #ifndef S_IXUSR |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
150 # define S_IXUSR 00100 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
151 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
152 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
153 #ifndef S_IRWXG |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
154 # define S_IRWXG 00070 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
155 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
156 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
157 #ifndef S_IRGRP |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
158 # define S_IRGRP 00040 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
159 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
160 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
161 #ifndef S_IWGRP |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
162 # define S_IWGRP 00020 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
163 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
164 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
165 #ifndef S_IXGRP |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
166 # define S_IXGRP 00010 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
167 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
168 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
169 #ifndef S_IRWXO |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
170 # define S_IRWXO 00007 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
171 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
172 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
173 #ifndef S_IROTH |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
174 # define S_IROTH 00004 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
175 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
176 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
177 #ifndef S_IWOTH |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
178 # define S_IWOTH 00002 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
179 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
180 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
181 #ifndef S_IXOTH |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
182 # define S_IXOTH 00001 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
183 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
184 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
185 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
186 /* Names for file flags */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
187 #ifndef UF_NODUMP |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
188 # define UF_NODUMP 0x00000001 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
189 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
190 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
191 #ifndef UF_IMMUTABLE |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
192 # define UF_IMMUTABLE 0x00000002 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
193 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
194 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
195 #ifndef UF_APPEND |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
196 # define UF_APPEND 0x00000004 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
197 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
198 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
199 #ifndef UF_OPAQUE |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
200 # define UF_OPAQUE 0x00000008 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
201 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
202 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
203 #ifndef UF_NOUNLINK |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
204 # define UF_NOUNLINK 0x00000010 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
205 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
206 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
207 #ifndef UF_COMPRESSED |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
208 # define UF_COMPRESSED 0x00000020 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
209 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
210 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
211 #ifndef UF_HIDDEN |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
212 # define UF_HIDDEN 0x00008000 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
213 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
214 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
215 #ifndef SF_ARCHIVED |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
216 # define SF_ARCHIVED 0x00010000 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
217 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
218 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
219 #ifndef SF_IMMUTABLE |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
220 # define SF_IMMUTABLE 0x00020000 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
221 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
222 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
223 #ifndef SF_APPEND |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
224 # define SF_APPEND 0x00040000 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
225 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
226 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
227 #ifndef SF_NOUNLINK |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
228 # define SF_NOUNLINK 0x00100000 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
229 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
230 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
231 #ifndef SF_SNAPSHOT |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
232 # define SF_SNAPSHOT 0x00200000 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
233 #endif |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
234 |
|
84298
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
235 static mode_t |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
236 _PyLong_AsMode_t(PyObject *op) |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
237 { |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
238 unsigned long value; |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
239 mode_t mode; |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
240 |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
241 value = PyLong_AsUnsignedLong(op); |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
242 if ((value == (unsigned long)-1) && PyErr_Occurred()) |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
243 return (mode_t)-1; |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
244 |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
245 mode = (mode_t)value; |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
246 if ((unsigned long)mode != value) { |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
247 PyErr_SetString(PyExc_OverflowError, "mode out of range"); |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
248 return (mode_t)-1; |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
249 } |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
250 return mode; |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
251 } |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
252 |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
253 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
254 #define stat_S_ISFUNC(isfunc, doc) \ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
255 static PyObject * \ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
256 stat_ ##isfunc (PyObject *self, PyObject *omode) \ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
257 { \ |
|
84298
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
258 mode_t mode = _PyLong_AsMode_t(omode); \ |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
259 if ((mode == (mode_t)-1) && PyErr_Occurred()) \ |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
260 return NULL; \ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
261 return PyBool_FromLong(isfunc(mode)); \ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
262 } \ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
263 PyDoc_STRVAR(stat_ ## isfunc ## _doc, doc) |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
264 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
265 stat_S_ISFUNC(S_ISDIR, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
266 "S_ISDIR(mode) -> bool\n\n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
267 "Return True if mode is from a directory."); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
268 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
269 stat_S_ISFUNC(S_ISCHR, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
270 "S_ISCHR(mode) -> bool\n\n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
271 "Return True if mode is from a character special device file."); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
272 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
273 stat_S_ISFUNC(S_ISBLK, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
274 "S_ISBLK(mode) -> bool\n\n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
275 "Return True if mode is from a block special device file."); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
276 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
277 stat_S_ISFUNC(S_ISREG, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
278 "S_ISREG(mode) -> bool\n\n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
279 "Return True if mode is from a regular file."); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
280 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
281 stat_S_ISFUNC(S_ISFIFO, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
282 "S_ISFIFO(mode) -> bool\n\n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
283 "Return True if mode is from a FIFO (named pipe)."); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
284 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
285 stat_S_ISFUNC(S_ISLNK, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
286 "S_ISLNK(mode) -> bool\n\n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
287 "Return True if mode is from a symbolic link."); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
288 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
289 stat_S_ISFUNC(S_ISSOCK, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
290 "S_ISSOCK(mode) -> bool\n\n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
291 "Return True if mode is from a socket."); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
292 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
293 stat_S_ISFUNC(S_ISDOOR, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
294 "S_ISDOOR(mode) -> bool\n\n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
295 "Return True if mode is from a door."); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
296 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
297 stat_S_ISFUNC(S_ISPORT, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
298 "S_ISPORT(mode) -> bool\n\n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
299 "Return True if mode is from an event port."); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
300 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
301 stat_S_ISFUNC(S_ISWHT, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
302 "S_ISWHT(mode) -> bool\n\n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
303 "Return True if mode is from a whiteout."); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
304 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
305 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
306 PyDoc_STRVAR(stat_S_IMODE_doc, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
307 "Return the portion of the file's mode that can be set by os.chmod()."); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
308 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
309 static PyObject * |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
310 stat_S_IMODE(PyObject *self, PyObject *omode) |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
311 { |
|
84298
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
312 mode_t mode = _PyLong_AsMode_t(omode); |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
313 if ((mode == (mode_t)-1) && PyErr_Occurred()) |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
314 return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
315 return PyLong_FromUnsignedLong(mode & S_IMODE); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
316 } |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
317 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
318 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
319 PyDoc_STRVAR(stat_S_IFMT_doc, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
320 "Return the portion of the file's mode that describes the file type."); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
321 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
322 static PyObject * |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
323 stat_S_IFMT(PyObject *self, PyObject *omode) |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
324 { |
|
84298
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
325 mode_t mode = _PyLong_AsMode_t(omode); |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
326 if ((mode == (mode_t)-1) && PyErr_Occurred()) |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
327 return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
328 return PyLong_FromUnsignedLong(mode & S_IFMT); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
329 } |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
330 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
331 /* file type chars according to |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
332 http://en.wikibooks.org/wiki/C_Programming/POSIX_Reference/sys/stat.h */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
333 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
334 static char |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
335 filetype(mode_t mode) |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
336 { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
337 /* common cases first */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
338 if (S_ISREG(mode)) return '-'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
339 if (S_ISDIR(mode)) return 'd'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
340 if (S_ISLNK(mode)) return 'l'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
341 /* special files */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
342 if (S_ISBLK(mode)) return 'b'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
343 if (S_ISCHR(mode)) return 'c'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
344 if (S_ISFIFO(mode)) return 'p'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
345 if (S_ISSOCK(mode)) return 's'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
346 /* non-standard types */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
347 if (S_ISDOOR(mode)) return 'D'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
348 if (S_ISPORT(mode)) return 'P'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
349 if (S_ISWHT(mode)) return 'w'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
350 /* unknown */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
351 return '?'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
352 } |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
353 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
354 static void |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
355 fileperm(mode_t mode, char *buf) |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
356 { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
357 buf[0] = mode & S_IRUSR ? 'r' : '-'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
358 buf[1] = mode & S_IWUSR ? 'w' : '-'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
359 if (mode & S_ISUID) { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
360 buf[2] = mode & S_IXUSR ? 's' : 'S'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
361 } else { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
362 buf[2] = mode & S_IXUSR ? 'x' : '-'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
363 } |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
364 buf[3] = mode & S_IRGRP ? 'r' : '-'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
365 buf[4] = mode & S_IWGRP ? 'w' : '-'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
366 if (mode & S_ISGID) { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
367 buf[5] = mode & S_IXGRP ? 's' : 'S'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
368 } else { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
369 buf[5] = mode & S_IXGRP ? 'x' : '-'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
370 } |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
371 buf[6] = mode & S_IROTH ? 'r' : '-'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
372 buf[7] = mode & S_IWOTH ? 'w' : '-'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
373 if (mode & S_ISVTX) { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
374 buf[8] = mode & S_IXOTH ? 't' : 'T'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
375 } else { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
376 buf[8] = mode & S_IXOTH ? 'x' : '-'; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
377 } |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
378 } |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
379 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
380 PyDoc_STRVAR(stat_filemode_doc, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
381 "Convert a file's mode to a string of the form '-rwxrwxrwx'"); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
382 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
383 static PyObject * |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
384 stat_filemode(PyObject *self, PyObject *omode) |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
385 { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
386 char buf[10]; |
|
84298
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
387 mode_t mode; |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
388 |
|
84298
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
389 mode = _PyLong_AsMode_t(omode); |
|
44c8a9d80595
Issue #11016: Detect integer conversion on conversion from Python int to C mode_t
Victor Stinner <victor.stinner@gmail.com>
parents:
84296
diff
changeset
|
390 if ((mode == (mode_t)-1) && PyErr_Occurred()) |
|
84258
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
391 return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
392 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
393 buf[0] = filetype(mode); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
394 fileperm(mode, &buf[1]); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
395 return PyUnicode_FromStringAndSize(buf, 10); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
396 } |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
397 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
398 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
399 static PyMethodDef stat_methods[] = { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
400 {"S_ISDIR", stat_S_ISDIR, METH_O, stat_S_ISDIR_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
401 {"S_ISCHR", stat_S_ISCHR, METH_O, stat_S_ISCHR_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
402 {"S_ISBLK", stat_S_ISBLK, METH_O, stat_S_ISBLK_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
403 {"S_ISREG", stat_S_ISREG, METH_O, stat_S_ISREG_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
404 {"S_ISFIFO", stat_S_ISFIFO, METH_O, stat_S_ISFIFO_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
405 {"S_ISLNK", stat_S_ISLNK, METH_O, stat_S_ISLNK_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
406 {"S_ISSOCK", stat_S_ISSOCK, METH_O, stat_S_ISSOCK_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
407 {"S_ISDOOR", stat_S_ISDOOR, METH_O, stat_S_ISDOOR_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
408 {"S_ISPORT", stat_S_ISPORT, METH_O, stat_S_ISPORT_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
409 {"S_ISWHT", stat_S_ISWHT, METH_O, stat_S_ISWHT_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
410 {"S_IMODE", stat_S_IMODE, METH_O, stat_S_IMODE_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
411 {"S_IFMT", stat_S_IFMT, METH_O, stat_S_IFMT_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
412 {"filemode", stat_filemode, METH_O, stat_filemode_doc}, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
413 {NULL, NULL} /* sentinel */ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
414 }; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
415 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
416 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
417 PyDoc_STRVAR(module_doc, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
418 "S_IFMT_: file type bits\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
419 S_IFDIR: directory\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
420 S_IFCHR: character device\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
421 S_IFBLK: block device\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
422 S_IFREG: regular file\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
423 S_IFIFO: fifo (named pipe)\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
424 S_IFLNK: symbolic link\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
425 S_IFSOCK: socket file\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
426 S_IFDOOR: door\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
427 S_IFPORT: event port\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
428 S_IFWHT: whiteout\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
429 \n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
430 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
431 "S_ISUID: set UID bit\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
432 S_ISGID: set GID bit\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
433 S_ENFMT: file locking enforcement\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
434 S_ISVTX: sticky bit\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
435 S_IREAD: Unix V7 synonym for S_IRUSR\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
436 S_IWRITE: Unix V7 synonym for S_IWUSR\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
437 S_IEXEC: Unix V7 synonym for S_IXUSR\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
438 S_IRWXU: mask for owner permissions\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
439 S_IRUSR: read by owner\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
440 S_IWUSR: write by owner\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
441 S_IXUSR: execute by owner\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
442 S_IRWXG: mask for group permissions\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
443 S_IRGRP: read by group\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
444 S_IWGRP: write by group\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
445 S_IXGRP: execute by group\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
446 S_IRWXO: mask for others (not in group) permissions\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
447 S_IROTH: read by others\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
448 S_IWOTH: write by others\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
449 S_IXOTH: execute by others\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
450 \n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
451 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
452 "UF_NODUMP: do not dump file\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
453 UF_IMMUTABLE: file may not be changed\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
454 UF_APPEND: file may only be appended to\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
455 UF_OPAQUE: directory is opaque when viewed through a union stack\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
456 UF_NOUNLINK: file may not be renamed or deleted\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
457 UF_COMPRESSED: OS X: file is hfs-compressed\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
458 UF_HIDDEN: OS X: file should not be displayed\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
459 SF_ARCHIVED: file may be archived\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
460 SF_IMMUTABLE: file may not be changed\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
461 SF_APPEND: file may only be appended to\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
462 SF_NOUNLINK: file may not be renamed or deleted\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
463 SF_SNAPSHOT: file is a snapshot file\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
464 \n" |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
465 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
466 "ST_MODE\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
467 ST_INO\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
468 ST_DEV\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
469 ST_NLINK\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
470 ST_UID\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
471 ST_GID\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
472 ST_SIZE\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
473 ST_ATIME\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
474 ST_MTIME\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
475 ST_CTIME\n\ |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
476 "); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
477 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
478 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
479 static struct PyModuleDef statmodule = { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
480 PyModuleDef_HEAD_INIT, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
481 "_stat", |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
482 module_doc, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
483 -1, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
484 stat_methods, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
485 NULL, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
486 NULL, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
487 NULL, |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
488 NULL |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
489 }; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
490 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
491 PyMODINIT_FUNC |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
492 PyInit__stat(void) |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
493 { |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
494 PyObject *m; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
495 m = PyModule_Create(&statmodule); |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
496 if (m == NULL) |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
497 return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
498 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
499 if (PyModule_AddIntMacro(m, S_IFDIR)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
500 if (PyModule_AddIntMacro(m, S_IFCHR)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
501 if (PyModule_AddIntMacro(m, S_IFBLK)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
502 if (PyModule_AddIntMacro(m, S_IFREG)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
503 if (PyModule_AddIntMacro(m, S_IFIFO)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
504 if (PyModule_AddIntMacro(m, S_IFLNK)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
505 if (PyModule_AddIntMacro(m, S_IFSOCK)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
506 if (PyModule_AddIntMacro(m, S_IFDOOR)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
507 if (PyModule_AddIntMacro(m, S_IFPORT)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
508 if (PyModule_AddIntMacro(m, S_IFWHT)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
509 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
510 if (PyModule_AddIntMacro(m, S_ISUID)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
511 if (PyModule_AddIntMacro(m, S_ISGID)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
512 if (PyModule_AddIntMacro(m, S_ISVTX)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
513 if (PyModule_AddIntMacro(m, S_ENFMT)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
514 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
515 if (PyModule_AddIntMacro(m, S_IREAD)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
516 if (PyModule_AddIntMacro(m, S_IWRITE)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
517 if (PyModule_AddIntMacro(m, S_IEXEC)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
518 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
519 if (PyModule_AddIntMacro(m, S_IRWXU)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
520 if (PyModule_AddIntMacro(m, S_IRUSR)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
521 if (PyModule_AddIntMacro(m, S_IWUSR)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
522 if (PyModule_AddIntMacro(m, S_IXUSR)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
523 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
524 if (PyModule_AddIntMacro(m, S_IRWXG)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
525 if (PyModule_AddIntMacro(m, S_IRGRP)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
526 if (PyModule_AddIntMacro(m, S_IWGRP)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
527 if (PyModule_AddIntMacro(m, S_IXGRP)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
528 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
529 if (PyModule_AddIntMacro(m, S_IRWXO)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
530 if (PyModule_AddIntMacro(m, S_IROTH)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
531 if (PyModule_AddIntMacro(m, S_IWOTH)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
532 if (PyModule_AddIntMacro(m, S_IXOTH)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
533 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
534 if (PyModule_AddIntMacro(m, UF_NODUMP)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
535 if (PyModule_AddIntMacro(m, UF_IMMUTABLE)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
536 if (PyModule_AddIntMacro(m, UF_APPEND)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
537 if (PyModule_AddIntMacro(m, UF_OPAQUE)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
538 if (PyModule_AddIntMacro(m, UF_NOUNLINK)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
539 if (PyModule_AddIntMacro(m, UF_COMPRESSED)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
540 if (PyModule_AddIntMacro(m, UF_HIDDEN)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
541 if (PyModule_AddIntMacro(m, SF_ARCHIVED)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
542 if (PyModule_AddIntMacro(m, SF_IMMUTABLE)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
543 if (PyModule_AddIntMacro(m, SF_APPEND)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
544 if (PyModule_AddIntMacro(m, SF_NOUNLINK)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
545 if (PyModule_AddIntMacro(m, SF_SNAPSHOT)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
546 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
547 if (PyModule_AddIntConstant(m, "ST_MODE", 0)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
548 if (PyModule_AddIntConstant(m, "ST_INO", 1)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
549 if (PyModule_AddIntConstant(m, "ST_DEV", 2)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
550 if (PyModule_AddIntConstant(m, "ST_NLINK", 3)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
551 if (PyModule_AddIntConstant(m, "ST_UID", 4)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
552 if (PyModule_AddIntConstant(m, "ST_GID", 5)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
553 if (PyModule_AddIntConstant(m, "ST_SIZE", 6)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
554 if (PyModule_AddIntConstant(m, "ST_ATIME", 7)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
555 if (PyModule_AddIntConstant(m, "ST_MTIME", 8)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
556 if (PyModule_AddIntConstant(m, "ST_CTIME", 9)) return NULL; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
557 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
558 return m; |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
559 } |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
560 |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
561 #ifdef __cplusplus |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
562 } |
|
420f70a22b9d
Issue #11016: Add C implementation of the stat module as _stat
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
563 #endif |
