blob: cb22b380ef68cf3d9f882f867181708a253d94f7 [file]
/**
* D header file for Darwin
*
* $(LINK2 https://opensource.apple.com/source/xnu/xnu-2422.115.4/bsd/sys/attr.h.auto.html, Apple sys/attr.h)
*/
module core.sys.darwin.sys.attr;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
version (Darwin):
extern (C):
nothrow:
@nogc:
import core.internal.attributes : betterC;
import core.sys.darwin.sys.cdefs : c_ulong;
import core.sys.posix.sys.time : timeval;
// These functions aren't actually declared in attr.h but in unistd.h.
@system
{
void getattrlist(scope const char* path, scope attrlist* attrList, scope void* attrBuf,
size_t attrBufSize, c_ulong options);
void setattrlist(scope const char* path, scope attrlist* attrList, scope void* attrBuf,
size_t attrBufSize, c_ulong options);
version (TVOS) {}
else version (WatchOS) {}
else
int searchfs(scope const char* path, scope fssearchblock* searchBlock,
scope c_ulong* numMatches, uint scriptCode, uint options, scope searchstate* state);
}
enum
{
FSOPT_NOFOLLOW = 0x00000001,
FSOPT_NOINMEMUPDATE = 0x00000002,
FSOPT_REPORT_FULLSIZE = 0x00000004,
FSOPT_PACK_INVAL_ATTRS = 0x00000008,
FSOPT_ATTR_CMN_EXTENDED = 0x00000020, // macOS 10.10
}
enum SEARCHFS_MAX_SEARCHPARMS = 4096;
alias uint text_encoding_t, fsobj_type_t, fsobj_tag_t, fsfile_type_t, fsvolid_t, attrgroup_t;
struct attrlist
{
ushort bitmapcount, reserved;
attrgroup_t commonattr, volattr, dirattr, fileattr, forkattr;
}
enum ATTR_BIT_MAP_COUNT = 5;
struct attribute_set_t
{
attrgroup_t commonattr, volattr, dirattr, fileattr, forkattr;
}
struct attrreference_t
{
int attr_dataoffset;
uint attr_length;
}
struct diskextent
{
uint startblock, blockcount;
}
alias extentrecord = diskextent[8];
alias vol_capabilities_set_t = uint[4];
enum
{
VOL_CAPABILITIES_FORMAT = 0,
VOL_CAPABILITIES_INTERFACES = 1,
VOL_CAPABILITIES_RESERVED1 = 2,
VOL_CAPABILITIES_RESERVED2 = 3,
}
struct vol_capabilities_attr_t
{
vol_capabilities_set_t capabilities, valid;
}
enum ATTR_MAX_BUFFER = 8192;
enum
{
VOL_CAP_FMT_PERSISTENTOBJECTIDS = 0x00000001,
VOL_CAP_FMT_SYMBOLICLINKS = 0x00000002,
VOL_CAP_FMT_HARDLINKS = 0x00000004,
VOL_CAP_FMT_JOURNAL = 0x00000008,
VOL_CAP_FMT_JOURNAL_ACTIVE = 0x00000010,
VOL_CAP_FMT_NO_ROOT_TIMES = 0x00000020,
VOL_CAP_FMT_SPARSE_FILES = 0x00000040,
VOL_CAP_FMT_ZERO_RUNS = 0x00000080,
VOL_CAP_FMT_CASE_SENSITIVE = 0x00000100,
VOL_CAP_FMT_CASE_PRESERVING = 0x00000200,
VOL_CAP_FMT_FAST_STATFS = 0x00000400,
VOL_CAP_FMT_2TB_FILESIZE = 0x00000800,
VOL_CAP_FMT_OPENDENYMODES = 0x00001000,
VOL_CAP_FMT_HIDDEN_FILES = 0x00002000,
VOL_CAP_FMT_PATH_FROM_ID = 0x00004000,
VOL_CAP_FMT_NO_VOLUME_SIZES = 0x00008000,
VOL_CAP_FMT_DECMPFS_COMPRESSION = 0x00010000,
VOL_CAP_FMT_64BIT_OBJECT_IDS = 0x00020000,
VOL_CAP_FMT_DIR_HARDLINKS = 0x00040000, // macOS 10.12
VOL_CAP_FMT_DOCUMENT_ID = 0x00080000, // macOS 10.12
VOL_CAP_FMT_WRITE_GENERATION_COUNT = 0x00100000, // macOS 10.12
VOL_CAP_FMT_NO_IMMUTABLE_FILES = 0x00200000, // macOS 10.12.4
VOL_CAP_FMT_NO_PERMISSIONS = 0x00400000, // macOS 10.12.4
VOL_CAP_FMT_SHARED_SPACE = 0x00800000, // macOS 10.15
VOL_CAP_FMT_VOL_GROUPS = 0x01000000, // macOS 10.15
}
enum
{
VOL_CAP_INT_SEARCHFS = 0x00000001,
VOL_CAP_INT_ATTRLIST = 0x00000002,
VOL_CAP_INT_NFSEXPORT = 0x00000004,
VOL_CAP_INT_READDIRATTR = 0x00000008,
VOL_CAP_INT_EXCHANGEDATA = 0x00000010,
VOL_CAP_INT_COPYFILE = 0x00000020,
VOL_CAP_INT_ALLOCATE = 0x00000040,
VOL_CAP_INT_VOL_RENAME = 0x00000080,
VOL_CAP_INT_ADVLOCK = 0x00000100,
VOL_CAP_INT_FLOCK = 0x00000200,
VOL_CAP_INT_EXTENDED_SECURITY = 0x00000400,
VOL_CAP_INT_USERACCESS = 0x00000800,
VOL_CAP_INT_MANLOCK = 0x00001000,
VOL_CAP_INT_NAMEDSTREAMS = 0x00002000,
VOL_CAP_INT_EXTENDED_ATTR = 0x00004000,
VOL_CAP_INT_CLONE = 0x00010000, // macOS 10.12
VOL_CAP_INT_SNAPSHOT = 0x00020000, // macOS 10.12
VOL_CAP_INT_RENAME_SWAP = 0x00040000, // macOS 10.12
VOL_CAP_INT_RENAME_EXCL = 0x00080000, // macOS 10.12
VOL_CAP_INT_RENAME_OPENFAIL = 0x00100000, // macOS 10.15
}
struct vol_attributes_attr_t
{
attribute_set_t validattr, nativeattr;
}
enum
{
ATTR_CMN_NAME = 0x00000001,
ATTR_CMN_DEVID = 0x00000002,
ATTR_CMN_FSID = 0x00000004,
ATTR_CMN_OBJTYPE = 0x00000008,
ATTR_CMN_OBJTAG = 0x00000010,
ATTR_CMN_OBJID = 0x00000020,
ATTR_CMN_OBJPERMANENTID = 0x00000040,
ATTR_CMN_PAROBJID = 0x00000080,
ATTR_CMN_SCRIPT = 0x00000100,
ATTR_CMN_CRTIME = 0x00000200,
ATTR_CMN_MODTIME = 0x00000400,
ATTR_CMN_CHGTIME = 0x00000800,
ATTR_CMN_ACCTIME = 0x00001000,
ATTR_CMN_BKUPTIME = 0x00002000,
ATTR_CMN_FNDRINFO = 0x00004000,
ATTR_CMN_OWNERID = 0x00008000,
ATTR_CMN_GRPID = 0x00010000,
ATTR_CMN_ACCESSMASK = 0x00020000,
ATTR_CMN_FLAGS = 0x00040000,
ATTR_CMN_GEN_COUNT = 0x00080000,
ATTR_CMN_DOCUMENT_ID = 0x00100000,
ATTR_CMN_USERACCESS = 0x00200000,
ATTR_CMN_EXTENDED_SECURITY = 0x00400000,
ATTR_CMN_UUID = 0x00800000,
ATTR_CMN_GRPUUID = 0x01000000,
ATTR_CMN_FILEID = 0x02000000,
ATTR_CMN_PARENTID = 0x04000000,
ATTR_CMN_FULLPATH = 0x08000000,
ATTR_CMN_ADDEDTIME = 0x10000000,
ATTR_CMN_ERROR = 0x20000000, // macOS 10.10
ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000, // macOS 10.10
}
enum ATTR_CMN_RETURNED_ATTRS = 0x80000000;
enum ATTR_CMN_VALIDMASK = 0xFFFFFFFF;
enum ATTR_CMN_SETMASK = 0x51C7FF00;
enum ATTR_CMN_VOLSETMASK = 0x00006700;
enum
{
ATTR_VOL_FSTYPE = 0x00000001,
ATTR_VOL_SIGNATURE = 0x00000002,
ATTR_VOL_SIZE = 0x00000004,
ATTR_VOL_SPACEFREE = 0x00000008,
ATTR_VOL_SPACEAVAIL = 0x00000010,
ATTR_VOL_MINALLOCATION = 0x00000020,
ATTR_VOL_ALLOCATIONCLUMP = 0x00000040,
ATTR_VOL_IOBLOCKSIZE = 0x00000080,
ATTR_VOL_OBJCOUNT = 0x00000100,
ATTR_VOL_FILECOUNT = 0x00000200,
ATTR_VOL_DIRCOUNT = 0x00000400,
ATTR_VOL_MAXOBJCOUNT = 0x00000800,
ATTR_VOL_MOUNTPOINT = 0x00001000,
ATTR_VOL_NAME = 0x00002000,
ATTR_VOL_MOUNTFLAGS = 0x00004000,
ATTR_VOL_MOUNTEDDEVICE = 0x00008000,
ATTR_VOL_ENCODINGSUSED = 0x00010000,
ATTR_VOL_CAPABILITIES = 0x00020000,
ATTR_VOL_UUID = 0x00040000,
ATTR_VOL_QUOTA_SIZE = 0x10000000, // macOS 10.12.4
ATTR_VOL_RESERVED_SIZE = 0x20000000, // macOS 10.12.4
ATTR_VOL_ATTRIBUTES = 0x40000000,
ATTR_VOL_INFO = 0x80000000,
}
enum ATTR_VOL_VALIDMASK = 0xF007FFFF;
enum ATTR_VOL_SETMASK = 0x80002000;
enum
{
ATTR_DIR_LINKCOUNT = 0x00000001,
ATTR_DIR_ENTRYCOUNT = 0x00000002,
ATTR_DIR_MOUNTSTATUS = 0x00000004,
ATTR_DIR_ALLOCSIZE = 0x00000008, // macOS 10.12.4
ATTR_DIR_IOBLOCKSIZE = 0x00000010, // macOS 10.12.4
ATTR_DIR_DATALENGTH = 0x00000020, // macOS 10.12.4
}
enum
{
DIR_MNTSTATUS_MNTPOINT = 0x00000001,
DIR_MNTSTATUS_TRIGGER = 0x00000002,
}
enum ATTR_DIR_VALIDMASK = 0x0000003f;
enum ATTR_DIR_SETMASK = 0x00000000;
enum
{
ATTR_FILE_LINKCOUNT = 0x00000001,
ATTR_FILE_TOTALSIZE = 0x00000002,
ATTR_FILE_ALLOCSIZE = 0x00000004,
ATTR_FILE_IOBLOCKSIZE = 0x00000008,
ATTR_FILE_DEVTYPE = 0x00000020,
ATTR_FILE_FORKCOUNT = 0x00000080,
ATTR_FILE_FORKLIST = 0x00000100,
ATTR_FILE_DATALENGTH = 0x00000200,
ATTR_FILE_DATAALLOCSIZE = 0x00000400,
ATTR_FILE_RSRCLENGTH = 0x00001000,
ATTR_FILE_RSRCALLOCSIZE = 0x00002000,
}
enum ATTR_FILE_VALIDMASK = 0x000037FF;
enum ATTR_FILE_SETMASK = 0x00000020;
enum
{
ATTR_CMNEXT_RELPATH = 0x00000004, // macOS 10.12.4
ATTR_CMNEXT_PRIVATESIZE = 0x00000008, // macOS 10.12.4
ATTR_CMNEXT_NOFIRMLINKPATH = 0x00000020, // macOS 10.15
ATTR_CMNEXT_REALDEVID = 0x00000040, // macOS 10.15
ATTR_CMNEXT_REALFSID = 0x00000080, // macOS 10.15
}
enum ATTR_CMNEXT_VALIDMASK = 0x000000fc;
enum ATTR_CMNEXT_SETMASK = 0x00000000;
enum ATTR_BULK_REQUIRED = ATTR_CMN_NAME | ATTR_CMN_RETURNED_ATTRS;
enum
{
SRCHFS_START = 0x00000001,
SRCHFS_MATCHPARTIALNAMES = 0x00000002,
SRCHFS_MATCHDIRS = 0x00000004,
SRCHFS_MATCHFILES = 0x00000008,
SRCHFS_SKIPLINKS = 0x00000010,
SRCHFS_SKIPINVISIBLE = 0x00000020,
SRCHFS_SKIPPACKAGES = 0x00000040,
SRCHFS_SKIPINAPPROPRIATE = 0x00000080,
SRCHFS_NEGATEPARAMS = 0x80000000,
SRCHFS_VALIDOPTIONSMASK = 0x800000FF,
}
struct fssearchblock
{
attrlist* returnattrs;
void* returnbuffer;
size_t returnbuffersize;
c_ulong maxmatches;
timeval timelimit;
void* searchparams1;
size_t sizeofsearchparams1;
void* searchparams2;
size_t sizeofsearchparams2;
attrlist searchattrs;
}
struct searchstate
{
uint ss_union_flags;
uint ss_union_layer;
ubyte[548] ss_fsstate;
}
static assert(searchstate.sizeof == uint.sizeof * 2 + searchstate.ss_fsstate.sizeof,
"searchstate struct must be packed");
enum FST_EOF = -1;
@betterC @nogc nothrow pure @safe unittest
{
// Use an enum instead of `version (Darwin)` so it works with the betterc test extractor.
version (OSX) enum isDarwin = true;
else version (iOS) enum isDarwin = true;
else version (TVOS) enum isDarwin = true;
else version (WatchOS) enum isDarwin = true;
else enum isDarwin = false;
static if (isDarwin)
{
// Verify that these types don't need __initZ and so can be used in betterC.
attrlist al;
attribute_set_t as;
attrreference_t ar;
diskextent de;
vol_capabilities_attr_t vca;
vol_attributes_attr_t vaa;
fssearchblock fsb;
searchstate ss;
}
}