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>
This commit is contained in:
Ronald Oussoren 2024-01-15 12:22:43 +01:00 committed by GitHub
parent 892155d736
commit 2010d45327
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 217 additions and 8 deletions

View file

@ -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",