summaryrefslogtreecommitdiffstats
path: root/Modules/_stat.c
diff options
context:
space:
mode:
authorRonald Oussoren <ronaldoussoren@mac.com>2024-01-15 11:22:43 (GMT)
committerGitHub <noreply@github.com>2024-01-15 11:22:43 (GMT)
commit2010d45327128594aed332befa687c8aead010bc (patch)
tree4545de42e4d6d99ea2bc8123aa987fac4bb4a7d4 /Modules/_stat.c
parent892155d7365c9c4a6c2dd6850b4527222ba5c217 (diff)
downloadcpython-2010d45327128594aed332befa687c8aead010bc.zip
cpython-2010d45327128594aed332befa687c8aead010bc.tar.gz
cpython-2010d45327128594aed332befa687c8aead010bc.tar.bz2
gh-113666: Adding missing UF_ and SF_ flags to module 'stat' (#113667)
Add some constants to module 'stat' that are used on macOS. Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Modules/_stat.c')
-rw-r--r--Modules/_stat.c71
1 files changed, 68 insertions, 3 deletions
diff --git a/Modules/_stat.c b/Modules/_stat.c
index 80f8a92..b43e794 100644
--- a/Modules/_stat.c
+++ b/Modules/_stat.c
@@ -202,6 +202,10 @@ typedef unsigned short mode_t;
/* Names for file flags */
+#ifndef UF_SETTABLE
+# define UF_SETTABLE 0x0000ffff
+#endif
+
#ifndef UF_NODUMP
# define UF_NODUMP 0x00000001
#endif
@@ -226,10 +230,22 @@ typedef unsigned short mode_t;
# define UF_COMPRESSED 0x00000020
#endif
+#ifndef UF_TRACKED
+# define UF_TRACKED 0x00000040
+#endif
+
+#ifndef UF_DATAVAULT
+# define UF_DATAVAULT 0x00000080
+#endif
+
#ifndef UF_HIDDEN
# define UF_HIDDEN 0x00008000
#endif
+#ifndef SF_SETTABLE
+# define SF_SETTABLE 0xffff0000
+#endif
+
#ifndef SF_ARCHIVED
# define SF_ARCHIVED 0x00010000
#endif
@@ -250,6 +266,30 @@ typedef unsigned short mode_t;
# define SF_SNAPSHOT 0x00200000
#endif
+#ifndef SF_FIRMLINK
+# define SF_FIRMLINK 0x00800000
+#endif
+
+#ifndef SF_DATALESS
+# define SF_DATALESS 0x40000000
+#endif
+
+#if defined(__APPLE__) && !defined(SF_SUPPORTED)
+ /* On older macOS versions the definition of SF_SUPPORTED is different
+ * from that on newer versions.
+ *
+ * Provide a consistent experience by redefining.
+ *
+ * None of bit bits set in the actual SF_SUPPORTED but not in this
+ * definition are defined on these versions of macOS.
+ */
+# undef SF_SETTABLE
+# define SF_SUPPORTED 0x009f0000
+# define SF_SETTABLE 0x3fff0000
+# define SF_SYNTHETIC 0xc0000000
+#endif
+
+
static mode_t
_PyLong_AsMode_t(PyObject *op)
{
@@ -467,18 +507,29 @@ S_IWOTH: write by others\n\
S_IXOTH: execute by others\n\
\n"
-"UF_NODUMP: do not dump file\n\
+"UF_SETTABLE: mask of owner changable flags\n\
+UF_NODUMP: do not dump file\n\
UF_IMMUTABLE: file may not be changed\n\
UF_APPEND: file may only be appended to\n\
UF_OPAQUE: directory is opaque when viewed through a union stack\n\
UF_NOUNLINK: file may not be renamed or deleted\n\
-UF_COMPRESSED: OS X: file is hfs-compressed\n\
-UF_HIDDEN: OS X: file should not be displayed\n\
+UF_COMPRESSED: macOS: file is hfs-compressed\n\
+UF_TRACKED: used for dealing with document IDs\n\
+UF_DATAVAULT: entitlement required for reading and writing\n\
+UF_HIDDEN: macOS: file should not be displayed\n\
+SF_SETTABLE: mask of super user changeable flags\n\
SF_ARCHIVED: file may be archived\n\
SF_IMMUTABLE: file may not be changed\n\
SF_APPEND: file may only be appended to\n\
+SF_RESTRICTED: entitlement required for writing\n\
SF_NOUNLINK: file may not be renamed or deleted\n\
SF_SNAPSHOT: file is a snapshot file\n\
+SF_FIRMLINK: file is a firmlink\n\
+SF_DATALESS: file is a dataless object\n\
+\n\
+On macOS:\n\
+SF_SUPPORTED: mask of super user supported flags\n\
+SF_SYNTHETIC: mask of read-only synthetic flags\n\
\n"
"ST_MODE\n\
@@ -543,18 +594,32 @@ stat_exec(PyObject *module)
ADD_INT_MACRO(module, S_IWOTH);
ADD_INT_MACRO(module, S_IXOTH);
+ ADD_INT_MACRO(module, UF_SETTABLE);
ADD_INT_MACRO(module, UF_NODUMP);
ADD_INT_MACRO(module, UF_IMMUTABLE);
ADD_INT_MACRO(module, UF_APPEND);
ADD_INT_MACRO(module, UF_OPAQUE);
ADD_INT_MACRO(module, UF_NOUNLINK);
ADD_INT_MACRO(module, UF_COMPRESSED);
+ ADD_INT_MACRO(module, UF_TRACKED);
+ ADD_INT_MACRO(module, UF_DATAVAULT);
ADD_INT_MACRO(module, UF_HIDDEN);
+ ADD_INT_MACRO(module, SF_SETTABLE);
ADD_INT_MACRO(module, SF_ARCHIVED);
ADD_INT_MACRO(module, SF_IMMUTABLE);
ADD_INT_MACRO(module, SF_APPEND);
ADD_INT_MACRO(module, SF_NOUNLINK);
ADD_INT_MACRO(module, SF_SNAPSHOT);
+ ADD_INT_MACRO(module, SF_FIRMLINK);
+ ADD_INT_MACRO(module, SF_DATALESS);
+
+#ifdef SF_SUPPORTED
+ ADD_INT_MACRO(module, SF_SUPPORTED);
+#endif
+#ifdef SF_SYNTHETIC
+ ADD_INT_MACRO(module, SF_SYNTHETIC);
+#endif
+
const char* st_constants[] = {
"ST_MODE",