xref: /xnu-8792.61.2/bsd/sys/attr.h (revision 42e220869062b56f8d7d0726fd4c88954f87902c)
1*42e22086SApple OSS Distributions /*
2*42e22086SApple OSS Distributions  * Copyright (c) 2000-2018 Apple Computer, Inc. All rights reserved.
3*42e22086SApple OSS Distributions  *
4*42e22086SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*42e22086SApple OSS Distributions  *
6*42e22086SApple OSS Distributions  * This file contains Original Code and/or Modifications of Original Code
7*42e22086SApple OSS Distributions  * as defined in and that are subject to the Apple Public Source License
8*42e22086SApple OSS Distributions  * Version 2.0 (the 'License'). You may not use this file except in
9*42e22086SApple OSS Distributions  * compliance with the License. The rights granted to you under the License
10*42e22086SApple OSS Distributions  * may not be used to create, or enable the creation or redistribution of,
11*42e22086SApple OSS Distributions  * unlawful or unlicensed copies of an Apple operating system, or to
12*42e22086SApple OSS Distributions  * circumvent, violate, or enable the circumvention or violation of, any
13*42e22086SApple OSS Distributions  * terms of an Apple operating system software license agreement.
14*42e22086SApple OSS Distributions  *
15*42e22086SApple OSS Distributions  * Please obtain a copy of the License at
16*42e22086SApple OSS Distributions  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*42e22086SApple OSS Distributions  *
18*42e22086SApple OSS Distributions  * The Original Code and all software distributed under the License are
19*42e22086SApple OSS Distributions  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*42e22086SApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*42e22086SApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*42e22086SApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*42e22086SApple OSS Distributions  * Please see the License for the specific language governing rights and
24*42e22086SApple OSS Distributions  * limitations under the License.
25*42e22086SApple OSS Distributions  *
26*42e22086SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*42e22086SApple OSS Distributions  */
28*42e22086SApple OSS Distributions 
29*42e22086SApple OSS Distributions /*
30*42e22086SApple OSS Distributions  * attr.h - attribute data structures and interfaces
31*42e22086SApple OSS Distributions  *
32*42e22086SApple OSS Distributions  * Copyright (c) 1998, Apple Computer, Inc.  All Rights Reserved.
33*42e22086SApple OSS Distributions  */
34*42e22086SApple OSS Distributions 
35*42e22086SApple OSS Distributions #ifndef _SYS_ATTR_H_
36*42e22086SApple OSS Distributions #define _SYS_ATTR_H_
37*42e22086SApple OSS Distributions 
38*42e22086SApple OSS Distributions #include <sys/appleapiopts.h>
39*42e22086SApple OSS Distributions 
40*42e22086SApple OSS Distributions #ifdef __APPLE_API_UNSTABLE
41*42e22086SApple OSS Distributions #include <sys/types.h>
42*42e22086SApple OSS Distributions #include <sys/ucred.h>
43*42e22086SApple OSS Distributions #include <sys/time.h>
44*42e22086SApple OSS Distributions #include <sys/cdefs.h>
45*42e22086SApple OSS Distributions 
46*42e22086SApple OSS Distributions #define FSOPT_NOFOLLOW          0x00000001
47*42e22086SApple OSS Distributions #define FSOPT_NOINMEMUPDATE     0x00000002
48*42e22086SApple OSS Distributions #define FSOPT_REPORT_FULLSIZE   0x00000004
49*42e22086SApple OSS Distributions /* The following option only valid when requesting ATTR_CMN_RETURNED_ATTRS */
50*42e22086SApple OSS Distributions #define FSOPT_PACK_INVAL_ATTRS  0x00000008
51*42e22086SApple OSS Distributions 
52*42e22086SApple OSS Distributions #ifdef PRIVATE
53*42e22086SApple OSS Distributions #define FSOPT_EXCHANGE_DATA_ONLY 0x0000010
54*42e22086SApple OSS Distributions #endif
55*42e22086SApple OSS Distributions 
56*42e22086SApple OSS Distributions #define FSOPT_ATTR_CMN_EXTENDED 0x00000020
57*42e22086SApple OSS Distributions #ifdef PRIVATE
58*42e22086SApple OSS Distributions #define FSOPT_LIST_SNAPSHOT     0x00000040
59*42e22086SApple OSS Distributions #ifndef FSOPT_NOFIRMLINKPATH /*a copy is in fsgetpath.h */
60*42e22086SApple OSS Distributions #define FSOPT_NOFIRMLINKPATH     0x00000080
61*42e22086SApple OSS Distributions #endif /* FSOPT_NOFIRMLINKPATH */
62*42e22086SApple OSS Distributions #define FSOPT_FOLLOW_FIRMLINK    0x00000100
63*42e22086SApple OSS Distributions #endif /* PRIVATE */
64*42e22086SApple OSS Distributions #define FSOPT_RETURN_REALDEV     0x00000200
65*42e22086SApple OSS Distributions #ifdef PRIVATE
66*42e22086SApple OSS Distributions #ifndef FSOPT_ISREALFSID  /*a copy is in fsgetpath.h */
67*42e22086SApple OSS Distributions #define FSOPT_ISREALFSID         FSOPT_RETURN_REALDEV
68*42e22086SApple OSS Distributions #endif
69*42e22086SApple OSS Distributions #define FSOPT_UTIMES_NULL        0x00000400
70*42e22086SApple OSS Distributions #endif /* PRIVATE */
71*42e22086SApple OSS Distributions #define FSOPT_NOFOLLOW_ANY       0x00000800
72*42e22086SApple OSS Distributions 
73*42e22086SApple OSS Distributions /* we currently aren't anywhere near this amount for a valid
74*42e22086SApple OSS Distributions  * fssearchblock.sizeofsearchparams1 or fssearchblock.sizeofsearchparams2
75*42e22086SApple OSS Distributions  * but we put a sanity check in to avoid abuse of the value passed in from
76*42e22086SApple OSS Distributions  * user land.
77*42e22086SApple OSS Distributions  */
78*42e22086SApple OSS Distributions #define SEARCHFS_MAX_SEARCHPARMS  4096
79*42e22086SApple OSS Distributions 
80*42e22086SApple OSS Distributions typedef u_int32_t text_encoding_t;
81*42e22086SApple OSS Distributions 
82*42e22086SApple OSS Distributions typedef u_int32_t fsobj_type_t;
83*42e22086SApple OSS Distributions 
84*42e22086SApple OSS Distributions typedef u_int32_t fsobj_tag_t;
85*42e22086SApple OSS Distributions 
86*42e22086SApple OSS Distributions typedef u_int32_t fsfile_type_t;
87*42e22086SApple OSS Distributions 
88*42e22086SApple OSS Distributions typedef u_int32_t fsvolid_t;
89*42e22086SApple OSS Distributions 
90*42e22086SApple OSS Distributions #include <sys/_types/_fsobj_id_t.h> /* file object id type */
91*42e22086SApple OSS Distributions 
92*42e22086SApple OSS Distributions typedef u_int32_t attrgroup_t;
93*42e22086SApple OSS Distributions 
94*42e22086SApple OSS Distributions struct attrlist {
95*42e22086SApple OSS Distributions 	u_short bitmapcount;                    /* number of attr. bit sets in list (should be 5) */
96*42e22086SApple OSS Distributions 	u_int16_t reserved;                     /* (to maintain 4-byte alignment) */
97*42e22086SApple OSS Distributions 	attrgroup_t commonattr;                 /* common attribute group */
98*42e22086SApple OSS Distributions 	attrgroup_t volattr;                    /* Volume attribute group */
99*42e22086SApple OSS Distributions 	attrgroup_t dirattr;                    /* directory attribute group */
100*42e22086SApple OSS Distributions 	attrgroup_t fileattr;                   /* file attribute group */
101*42e22086SApple OSS Distributions 	attrgroup_t forkattr;                   /* fork attribute group */
102*42e22086SApple OSS Distributions };
103*42e22086SApple OSS Distributions 
104*42e22086SApple OSS Distributions #define ATTR_BIT_MAP_COUNT 5
105*42e22086SApple OSS Distributions 
106*42e22086SApple OSS Distributions typedef struct attribute_set {
107*42e22086SApple OSS Distributions 	attrgroup_t commonattr;                 /* common attribute group */
108*42e22086SApple OSS Distributions 	attrgroup_t volattr;                    /* Volume attribute group */
109*42e22086SApple OSS Distributions 	attrgroup_t dirattr;                    /* directory attribute group */
110*42e22086SApple OSS Distributions 	attrgroup_t fileattr;                   /* file attribute group */
111*42e22086SApple OSS Distributions 	attrgroup_t forkattr;                   /* fork attribute group */
112*42e22086SApple OSS Distributions } attribute_set_t;
113*42e22086SApple OSS Distributions 
114*42e22086SApple OSS Distributions #define ATTRIBUTE_SET_INIT(a)               do {(a)->commonattr = (a)->volattr = (a)->dirattr = (a)->fileattr = (a)->forkattr = 0; } while(0)
115*42e22086SApple OSS Distributions 
116*42e22086SApple OSS Distributions 
117*42e22086SApple OSS Distributions typedef struct attrreference {
118*42e22086SApple OSS Distributions 	int32_t     attr_dataoffset;
119*42e22086SApple OSS Distributions 	u_int32_t   attr_length;
120*42e22086SApple OSS Distributions } attrreference_t;
121*42e22086SApple OSS Distributions 
122*42e22086SApple OSS Distributions /* XXX PPD This is derived from HFSVolumePriv.h and should perhaps be referenced from there? */
123*42e22086SApple OSS Distributions 
124*42e22086SApple OSS Distributions struct diskextent {
125*42e22086SApple OSS Distributions 	u_int32_t                                       startblock;                             /* first block allocated */
126*42e22086SApple OSS Distributions 	u_int32_t                                       blockcount;                             /* number of blocks allocated */
127*42e22086SApple OSS Distributions };
128*42e22086SApple OSS Distributions 
129*42e22086SApple OSS Distributions typedef struct diskextent extentrecord[8];
130*42e22086SApple OSS Distributions 
131*42e22086SApple OSS Distributions typedef u_int32_t vol_capabilities_set_t[4];
132*42e22086SApple OSS Distributions 
133*42e22086SApple OSS Distributions #define VOL_CAPABILITIES_FORMAT 0
134*42e22086SApple OSS Distributions #define VOL_CAPABILITIES_INTERFACES 1
135*42e22086SApple OSS Distributions #define VOL_CAPABILITIES_RESERVED1 2
136*42e22086SApple OSS Distributions #define VOL_CAPABILITIES_RESERVED2 3
137*42e22086SApple OSS Distributions 
138*42e22086SApple OSS Distributions typedef struct vol_capabilities_attr {
139*42e22086SApple OSS Distributions 	vol_capabilities_set_t capabilities;
140*42e22086SApple OSS Distributions 	vol_capabilities_set_t valid;
141*42e22086SApple OSS Distributions } vol_capabilities_attr_t;
142*42e22086SApple OSS Distributions 
143*42e22086SApple OSS Distributions /*
144*42e22086SApple OSS Distributions  * XXX this value needs to be raised - 3893388
145*42e22086SApple OSS Distributions  */
146*42e22086SApple OSS Distributions #define ATTR_MAX_BUFFER         8192
147*42e22086SApple OSS Distributions 
148*42e22086SApple OSS Distributions /*
149*42e22086SApple OSS Distributions  * VOL_CAP_FMT_PERSISTENTOBJECTIDS: When set, the volume has object IDs
150*42e22086SApple OSS Distributions  * that are persistent (retain their values even when the volume is
151*42e22086SApple OSS Distributions  * unmounted and remounted), and a file or directory can be looked up
152*42e22086SApple OSS Distributions  * by ID.  Volumes that support VolFS and can support Carbon File ID
153*42e22086SApple OSS Distributions  * references should set this bit.
154*42e22086SApple OSS Distributions  *
155*42e22086SApple OSS Distributions  * VOL_CAP_FMT_SYMBOLICLINKS: When set, the volume supports symbolic
156*42e22086SApple OSS Distributions  * links.  The symlink(), readlink(), and lstat() calls all use this
157*42e22086SApple OSS Distributions  * symbolic link.
158*42e22086SApple OSS Distributions  *
159*42e22086SApple OSS Distributions  * VOL_CAP_FMT_HARDLINKS: When set, the volume supports hard links.
160*42e22086SApple OSS Distributions  * The link() call creates hard links.
161*42e22086SApple OSS Distributions  *
162*42e22086SApple OSS Distributions  * VOL_CAP_FMT_JOURNAL: When set, the volume is capable of supporting
163*42e22086SApple OSS Distributions  * a journal used to speed recovery in case of unplanned shutdown
164*42e22086SApple OSS Distributions  * (such as a power outage or crash).  This bit does not necessarily
165*42e22086SApple OSS Distributions  * mean the volume is actively using a journal for recovery.
166*42e22086SApple OSS Distributions  *
167*42e22086SApple OSS Distributions  * VOL_CAP_FMT_JOURNAL_ACTIVE: When set, the volume is currently using
168*42e22086SApple OSS Distributions  * a journal for use in speeding recovery after an unplanned shutdown.
169*42e22086SApple OSS Distributions  * This bit can be set only if VOL_CAP_FMT_JOURNAL is also set.
170*42e22086SApple OSS Distributions  *
171*42e22086SApple OSS Distributions  * VOL_CAP_FMT_NO_ROOT_TIMES: When set, the volume format does not
172*42e22086SApple OSS Distributions  * store reliable times for the root directory, so you should not
173*42e22086SApple OSS Distributions  * depend on them to detect changes, etc.
174*42e22086SApple OSS Distributions  *
175*42e22086SApple OSS Distributions  * VOL_CAP_FMT_SPARSE_FILES: When set, the volume supports sparse files.
176*42e22086SApple OSS Distributions  * That is, files which can have "holes" that have never been written
177*42e22086SApple OSS Distributions  * to, and are not allocated on disk.  Sparse files may have an
178*42e22086SApple OSS Distributions  * allocated size that is less than the file's logical length.
179*42e22086SApple OSS Distributions  *
180*42e22086SApple OSS Distributions  * VOL_CAP_FMT_ZERO_RUNS: For security reasons, parts of a file (runs)
181*42e22086SApple OSS Distributions  * that have never been written to must appear to contain zeroes.  When
182*42e22086SApple OSS Distributions  * this bit is set, the volume keeps track of allocated but unwritten
183*42e22086SApple OSS Distributions  * runs of a file so that it can substitute zeroes without actually
184*42e22086SApple OSS Distributions  * writing zeroes to the media.  This provides performance similar to
185*42e22086SApple OSS Distributions  * sparse files, but not the space savings.
186*42e22086SApple OSS Distributions  *
187*42e22086SApple OSS Distributions  * VOL_CAP_FMT_CASE_SENSITIVE: When set, file and directory names are
188*42e22086SApple OSS Distributions  * case sensitive (upper and lower case are different).  When clear,
189*42e22086SApple OSS Distributions  * an upper case character is equivalent to a lower case character,
190*42e22086SApple OSS Distributions  * and you can't have two names that differ solely in the case of
191*42e22086SApple OSS Distributions  * the characters.
192*42e22086SApple OSS Distributions  *
193*42e22086SApple OSS Distributions  * VOL_CAP_FMT_CASE_PRESERVING: When set, file and directory names
194*42e22086SApple OSS Distributions  * preserve the difference between upper and lower case.  If clear,
195*42e22086SApple OSS Distributions  * the volume may change the case of some characters (typically
196*42e22086SApple OSS Distributions  * making them all upper or all lower case).  A volume that sets
197*42e22086SApple OSS Distributions  * VOL_CAP_FMT_CASE_SENSITIVE should also set VOL_CAP_FMT_CASE_PRESERVING.
198*42e22086SApple OSS Distributions  *
199*42e22086SApple OSS Distributions  * VOL_CAP_FMT_FAST_STATFS: This bit is used as a hint to upper layers
200*42e22086SApple OSS Distributions  * (especially Carbon) that statfs() is fast enough that its results
201*42e22086SApple OSS Distributions  * need not be cached by those upper layers.  A volume that caches
202*42e22086SApple OSS Distributions  * the statfs information in its in-memory structures should set this bit.
203*42e22086SApple OSS Distributions  * A volume that must always read from disk or always perform a network
204*42e22086SApple OSS Distributions  * transaction should not set this bit.
205*42e22086SApple OSS Distributions  *
206*42e22086SApple OSS Distributions  * VOL_CAP_FMT_2TB_FILESIZE: If this bit is set the volume format supports
207*42e22086SApple OSS Distributions  * file sizes larger than 4GB, and potentially up to 2TB; it does not
208*42e22086SApple OSS Distributions  * indicate whether the filesystem supports files larger than that.
209*42e22086SApple OSS Distributions  *
210*42e22086SApple OSS Distributions  * VOL_CAP_FMT_OPENDENYMODES: When set, the volume supports open deny
211*42e22086SApple OSS Distributions  * modes (e.g. "open for read write, deny write"; effectively, mandatory
212*42e22086SApple OSS Distributions  * file locking based on open modes).
213*42e22086SApple OSS Distributions  *
214*42e22086SApple OSS Distributions  * VOL_CAP_FMT_HIDDEN_FILES: When set, the volume supports the UF_HIDDEN
215*42e22086SApple OSS Distributions  * file flag, and the UF_HIDDEN flag is mapped to that volume's native
216*42e22086SApple OSS Distributions  * "hidden" or "invisible" bit (which may be the invisible bit from the
217*42e22086SApple OSS Distributions  * Finder Info extended attribute).
218*42e22086SApple OSS Distributions  *
219*42e22086SApple OSS Distributions  * VOL_CAP_FMT_PATH_FROM_ID:  When set, the volume supports the ability
220*42e22086SApple OSS Distributions  * to derive a pathname to the root of the file system given only the
221*42e22086SApple OSS Distributions  * id of an object.  This also implies that object ids on this file
222*42e22086SApple OSS Distributions  * system are persistent and not recycled.  This is a very specialized
223*42e22086SApple OSS Distributions  * capability and it is assumed that most file systems will not support
224*42e22086SApple OSS Distributions  * it.  Its use is for legacy non-posix APIs like ResolveFileIDRef.
225*42e22086SApple OSS Distributions  *
226*42e22086SApple OSS Distributions  * VOL_CAP_FMT_NO_VOLUME_SIZES: When set, the volume does not support
227*42e22086SApple OSS Distributions  * returning values for total data blocks, available blocks, or free blocks
228*42e22086SApple OSS Distributions  * (as in f_blocks, f_bavail, or f_bfree in "struct statfs").  Historically,
229*42e22086SApple OSS Distributions  * those values were set to 0xFFFFFFFF for volumes that did not support them.
230*42e22086SApple OSS Distributions  *
231*42e22086SApple OSS Distributions  * VOL_CAP_FMT_DECMPFS_COMPRESSION: When set, the volume supports transparent
232*42e22086SApple OSS Distributions  * decompression of compressed files using decmpfs.
233*42e22086SApple OSS Distributions  *
234*42e22086SApple OSS Distributions  * VOL_CAP_FMT_64BIT_OBJECT_IDS: When set, the volume uses object IDs that
235*42e22086SApple OSS Distributions  * are 64-bit. This means that ATTR_CMN_FILEID and ATTR_CMN_PARENTID are the
236*42e22086SApple OSS Distributions  * only legitimate attributes for obtaining object IDs from this volume and the
237*42e22086SApple OSS Distributions  * 32-bit fid_objno fields of the fsobj_id_t returned by ATTR_CMN_OBJID,
238*42e22086SApple OSS Distributions  * ATTR_CMN_OBJPERMID, and ATTR_CMN_PAROBJID are undefined.
239*42e22086SApple OSS Distributions  *
240*42e22086SApple OSS Distributions  * VOL_CAP_FMT_DIR_HARDLINKS: When set, the volume supports directory
241*42e22086SApple OSS Distributions  * hard links.
242*42e22086SApple OSS Distributions  *
243*42e22086SApple OSS Distributions  * VOL_CAP_FMT_DOCUMENT_ID: When set, the volume supports document IDs
244*42e22086SApple OSS Distributions  * (an ID which persists across object ID changes) for document revisions.
245*42e22086SApple OSS Distributions  *
246*42e22086SApple OSS Distributions  * VOL_CAP_FMT_WRITE_GENERATION_COUNT: When set, the volume supports write
247*42e22086SApple OSS Distributions  * generation counts (a count of how many times an object has been modified)
248*42e22086SApple OSS Distributions  *
249*42e22086SApple OSS Distributions  * VOL_CAP_FMT_NO_IMMUTABLE_FILES: When set, the volume does not support
250*42e22086SApple OSS Distributions  * setting the UF_IMMUTABLE flag.
251*42e22086SApple OSS Distributions  *
252*42e22086SApple OSS Distributions  * VOL_CAP_FMT_NO_PERMISSIONS: When set, the volume does not support setting
253*42e22086SApple OSS Distributions  * permissions.
254*42e22086SApple OSS Distributions  *
255*42e22086SApple OSS Distributions  * VOL_CAP_FMT_SHARED_SPACE: When set, the volume supports sharing space with
256*42e22086SApple OSS Distributions  * other filesystems i.e. multiple logical filesystems can exist in the same
257*42e22086SApple OSS Distributions  * "partition". An implication of this is that the filesystem which sets
258*42e22086SApple OSS Distributions  * this capability treats waitfor arguments to VFS_SYNC as bit flags.
259*42e22086SApple OSS Distributions  *
260*42e22086SApple OSS Distributions  * VOL_CAP_FMT_VOL_GROUPS: When set, this volume is part of a volume-group
261*42e22086SApple OSS Distributions  * that implies multiple volumes must be mounted in order to boot and root the
262*42e22086SApple OSS Distributions  * operating system. Typically, this means a read-only system volume and a
263*42e22086SApple OSS Distributions  * writable data volume.
264*42e22086SApple OSS Distributions  *
265*42e22086SApple OSS Distributions  * VOL_CAP_FMT_SEALED: When set, this volume is cryptographically sealed.
266*42e22086SApple OSS Distributions  * Any modifications to volume data or metadata will be detected and may
267*42e22086SApple OSS Distributions  * render the volume unusable.
268*42e22086SApple OSS Distributions  */
269*42e22086SApple OSS Distributions #define VOL_CAP_FMT_PERSISTENTOBJECTIDS         0x00000001
270*42e22086SApple OSS Distributions #define VOL_CAP_FMT_SYMBOLICLINKS               0x00000002
271*42e22086SApple OSS Distributions #define VOL_CAP_FMT_HARDLINKS                   0x00000004
272*42e22086SApple OSS Distributions #define VOL_CAP_FMT_JOURNAL                     0x00000008
273*42e22086SApple OSS Distributions #define VOL_CAP_FMT_JOURNAL_ACTIVE              0x00000010
274*42e22086SApple OSS Distributions #define VOL_CAP_FMT_NO_ROOT_TIMES               0x00000020
275*42e22086SApple OSS Distributions #define VOL_CAP_FMT_SPARSE_FILES                0x00000040
276*42e22086SApple OSS Distributions #define VOL_CAP_FMT_ZERO_RUNS                   0x00000080
277*42e22086SApple OSS Distributions #define VOL_CAP_FMT_CASE_SENSITIVE              0x00000100
278*42e22086SApple OSS Distributions #define VOL_CAP_FMT_CASE_PRESERVING             0x00000200
279*42e22086SApple OSS Distributions #define VOL_CAP_FMT_FAST_STATFS                 0x00000400
280*42e22086SApple OSS Distributions #define VOL_CAP_FMT_2TB_FILESIZE                0x00000800
281*42e22086SApple OSS Distributions #define VOL_CAP_FMT_OPENDENYMODES               0x00001000
282*42e22086SApple OSS Distributions #define VOL_CAP_FMT_HIDDEN_FILES                0x00002000
283*42e22086SApple OSS Distributions #define VOL_CAP_FMT_PATH_FROM_ID                0x00004000
284*42e22086SApple OSS Distributions #define VOL_CAP_FMT_NO_VOLUME_SIZES             0x00008000
285*42e22086SApple OSS Distributions #define VOL_CAP_FMT_DECMPFS_COMPRESSION         0x00010000
286*42e22086SApple OSS Distributions #define VOL_CAP_FMT_64BIT_OBJECT_IDS            0x00020000
287*42e22086SApple OSS Distributions #define VOL_CAP_FMT_DIR_HARDLINKS               0x00040000
288*42e22086SApple OSS Distributions #define VOL_CAP_FMT_DOCUMENT_ID                 0x00080000
289*42e22086SApple OSS Distributions #define VOL_CAP_FMT_WRITE_GENERATION_COUNT      0x00100000
290*42e22086SApple OSS Distributions #define VOL_CAP_FMT_NO_IMMUTABLE_FILES          0x00200000
291*42e22086SApple OSS Distributions #define VOL_CAP_FMT_NO_PERMISSIONS              0x00400000
292*42e22086SApple OSS Distributions #define VOL_CAP_FMT_SHARED_SPACE                0x00800000
293*42e22086SApple OSS Distributions #define VOL_CAP_FMT_VOL_GROUPS                  0x01000000
294*42e22086SApple OSS Distributions #define VOL_CAP_FMT_SEALED                      0x02000000
295*42e22086SApple OSS Distributions 
296*42e22086SApple OSS Distributions /*
297*42e22086SApple OSS Distributions  * VOL_CAP_INT_SEARCHFS: When set, the volume implements the
298*42e22086SApple OSS Distributions  * searchfs() system call (the vnop_searchfs vnode operation).
299*42e22086SApple OSS Distributions  *
300*42e22086SApple OSS Distributions  * VOL_CAP_INT_ATTRLIST: When set, the volume implements the
301*42e22086SApple OSS Distributions  * getattrlist() and setattrlist() system calls (vnop_getattrlist
302*42e22086SApple OSS Distributions  * and vnop_setattrlist vnode operations) for the volume, files,
303*42e22086SApple OSS Distributions  * and directories.  The volume may or may not implement the
304*42e22086SApple OSS Distributions  * readdirattr() system call.  XXX Is there any minimum set
305*42e22086SApple OSS Distributions  * of attributes that should be supported?  To determine the
306*42e22086SApple OSS Distributions  * set of supported attributes, get the ATTR_VOL_ATTRIBUTES
307*42e22086SApple OSS Distributions  * attribute of the volume.
308*42e22086SApple OSS Distributions  *
309*42e22086SApple OSS Distributions  * VOL_CAP_INT_NFSEXPORT: When set, the volume implements exporting
310*42e22086SApple OSS Distributions  * of NFS volumes.
311*42e22086SApple OSS Distributions  *
312*42e22086SApple OSS Distributions  * VOL_CAP_INT_READDIRATTR: When set, the volume implements the
313*42e22086SApple OSS Distributions  * readdirattr() system call (vnop_readdirattr vnode operation).
314*42e22086SApple OSS Distributions  *
315*42e22086SApple OSS Distributions  * VOL_CAP_INT_EXCHANGEDATA: When set, the volume implements the
316*42e22086SApple OSS Distributions  * exchangedata() system call (VNOP_EXCHANGE vnode operation).
317*42e22086SApple OSS Distributions  *
318*42e22086SApple OSS Distributions  * VOL_CAP_INT_COPYFILE: When set, the volume implements the
319*42e22086SApple OSS Distributions  * VOP_COPYFILE vnode operation.  (XXX There should be a copyfile()
320*42e22086SApple OSS Distributions  * system call in <unistd.h>.)
321*42e22086SApple OSS Distributions  *
322*42e22086SApple OSS Distributions  * VOL_CAP_INT_ALLOCATE: When set, the volume implements the
323*42e22086SApple OSS Distributions  * VNOP_ALLOCATE vnode operation, which means it implements the
324*42e22086SApple OSS Distributions  * F_PREALLOCATE selector of fcntl(2).
325*42e22086SApple OSS Distributions  *
326*42e22086SApple OSS Distributions  * VOL_CAP_INT_VOL_RENAME: When set, the volume implements the
327*42e22086SApple OSS Distributions  * ATTR_VOL_NAME attribute for both getattrlist() and setattrlist().
328*42e22086SApple OSS Distributions  * The volume can be renamed by setting ATTR_VOL_NAME with setattrlist().
329*42e22086SApple OSS Distributions  *
330*42e22086SApple OSS Distributions  * VOL_CAP_INT_ADVLOCK: When set, the volume implements POSIX style
331*42e22086SApple OSS Distributions  * byte range locks via vnop_advlock (accessible from fcntl(2)).
332*42e22086SApple OSS Distributions  *
333*42e22086SApple OSS Distributions  * VOL_CAP_INT_FLOCK: When set, the volume implements whole-file flock(2)
334*42e22086SApple OSS Distributions  * style locks via vnop_advlock.  This includes the O_EXLOCK and O_SHLOCK
335*42e22086SApple OSS Distributions  * flags of the open(2) call.
336*42e22086SApple OSS Distributions  *
337*42e22086SApple OSS Distributions  * VOL_CAP_INT_EXTENDED_SECURITY: When set, the volume implements
338*42e22086SApple OSS Distributions  * extended security (ACLs).
339*42e22086SApple OSS Distributions  *
340*42e22086SApple OSS Distributions  * VOL_CAP_INT_USERACCESS:  When set, the volume supports the
341*42e22086SApple OSS Distributions  * ATTR_CMN_USERACCESS attribute (used to get the user's access
342*42e22086SApple OSS Distributions  * mode to the file).
343*42e22086SApple OSS Distributions  *
344*42e22086SApple OSS Distributions  * VOL_CAP_INT_MANLOCK: When set, the volume supports AFP-style
345*42e22086SApple OSS Distributions  * mandatory byte range locks via an ioctl().
346*42e22086SApple OSS Distributions  *
347*42e22086SApple OSS Distributions  * VOL_CAP_INT_EXTENDED_ATTR: When set, the volume implements
348*42e22086SApple OSS Distributions  * native extended attribues.
349*42e22086SApple OSS Distributions  *
350*42e22086SApple OSS Distributions  * VOL_CAP_INT_NAMEDSTREAMS: When set, the volume supports
351*42e22086SApple OSS Distributions  * native named streams.
352*42e22086SApple OSS Distributions  *
353*42e22086SApple OSS Distributions  * VOL_CAP_INT_CLONE: When set, the volume supports clones.
354*42e22086SApple OSS Distributions  *
355*42e22086SApple OSS Distributions  * VOL_CAP_INT_SNAPSHOT: When set, the volume supports snapshots.
356*42e22086SApple OSS Distributions  *
357*42e22086SApple OSS Distributions  * VOL_CAP_INT_RENAME_SWAP: When set, the volume supports swapping
358*42e22086SApple OSS Distributions  * file system objects.
359*42e22086SApple OSS Distributions  *
360*42e22086SApple OSS Distributions  * VOL_CAP_INT_RENAME_EXCL: When set, the volume supports an
361*42e22086SApple OSS Distributions  * exclusive rename operation.
362*42e22086SApple OSS Distributions  *
363*42e22086SApple OSS Distributions  * VOL_CAP_INT_RENAME_OPENFAIL: When set, the volume may fail rename
364*42e22086SApple OSS Distributions  * operations on files that are open.
365*42e22086SApple OSS Distributions  */
366*42e22086SApple OSS Distributions #define VOL_CAP_INT_SEARCHFS                    0x00000001
367*42e22086SApple OSS Distributions #define VOL_CAP_INT_ATTRLIST                    0x00000002
368*42e22086SApple OSS Distributions #define VOL_CAP_INT_NFSEXPORT                   0x00000004
369*42e22086SApple OSS Distributions #define VOL_CAP_INT_READDIRATTR                 0x00000008
370*42e22086SApple OSS Distributions #define VOL_CAP_INT_EXCHANGEDATA                0x00000010
371*42e22086SApple OSS Distributions #define VOL_CAP_INT_COPYFILE                    0x00000020
372*42e22086SApple OSS Distributions #define VOL_CAP_INT_ALLOCATE                    0x00000040
373*42e22086SApple OSS Distributions #define VOL_CAP_INT_VOL_RENAME                  0x00000080
374*42e22086SApple OSS Distributions #define VOL_CAP_INT_ADVLOCK                     0x00000100
375*42e22086SApple OSS Distributions #define VOL_CAP_INT_FLOCK                       0x00000200
376*42e22086SApple OSS Distributions #define VOL_CAP_INT_EXTENDED_SECURITY           0x00000400
377*42e22086SApple OSS Distributions #define VOL_CAP_INT_USERACCESS                  0x00000800
378*42e22086SApple OSS Distributions #define VOL_CAP_INT_MANLOCK                     0x00001000
379*42e22086SApple OSS Distributions #define VOL_CAP_INT_NAMEDSTREAMS                0x00002000
380*42e22086SApple OSS Distributions #define VOL_CAP_INT_EXTENDED_ATTR               0x00004000
381*42e22086SApple OSS Distributions #ifdef PRIVATE
382*42e22086SApple OSS Distributions /* Volume supports kqueue notifications for remote events */
383*42e22086SApple OSS Distributions #define VOL_CAP_INT_REMOTE_EVENT                0x00008000
384*42e22086SApple OSS Distributions #endif /* PRIVATE */
385*42e22086SApple OSS Distributions #define VOL_CAP_INT_CLONE                       0x00010000
386*42e22086SApple OSS Distributions #define VOL_CAP_INT_SNAPSHOT                    0x00020000
387*42e22086SApple OSS Distributions #define VOL_CAP_INT_RENAME_SWAP                 0x00040000
388*42e22086SApple OSS Distributions #define VOL_CAP_INT_RENAME_EXCL                 0x00080000
389*42e22086SApple OSS Distributions #define VOL_CAP_INT_RENAME_OPENFAIL             0x00100000
390*42e22086SApple OSS Distributions 
391*42e22086SApple OSS Distributions typedef struct vol_attributes_attr {
392*42e22086SApple OSS Distributions 	attribute_set_t validattr;
393*42e22086SApple OSS Distributions 	attribute_set_t nativeattr;
394*42e22086SApple OSS Distributions } vol_attributes_attr_t;
395*42e22086SApple OSS Distributions 
396*42e22086SApple OSS Distributions #define ATTR_CMN_NAME                           0x00000001
397*42e22086SApple OSS Distributions #define ATTR_CMN_DEVID                          0x00000002
398*42e22086SApple OSS Distributions #define ATTR_CMN_FSID                           0x00000004
399*42e22086SApple OSS Distributions #define ATTR_CMN_OBJTYPE                        0x00000008
400*42e22086SApple OSS Distributions #define ATTR_CMN_OBJTAG                         0x00000010
401*42e22086SApple OSS Distributions #define ATTR_CMN_OBJID                          0x00000020
402*42e22086SApple OSS Distributions #define ATTR_CMN_OBJPERMANENTID                 0x00000040
403*42e22086SApple OSS Distributions #define ATTR_CMN_PAROBJID                       0x00000080
404*42e22086SApple OSS Distributions #define ATTR_CMN_SCRIPT                         0x00000100
405*42e22086SApple OSS Distributions #define ATTR_CMN_CRTIME                         0x00000200
406*42e22086SApple OSS Distributions #define ATTR_CMN_MODTIME                        0x00000400
407*42e22086SApple OSS Distributions #define ATTR_CMN_CHGTIME                        0x00000800
408*42e22086SApple OSS Distributions #define ATTR_CMN_ACCTIME                        0x00001000
409*42e22086SApple OSS Distributions #define ATTR_CMN_BKUPTIME                       0x00002000
410*42e22086SApple OSS Distributions #define ATTR_CMN_FNDRINFO                       0x00004000
411*42e22086SApple OSS Distributions #define ATTR_CMN_OWNERID                        0x00008000
412*42e22086SApple OSS Distributions #define ATTR_CMN_GRPID                          0x00010000
413*42e22086SApple OSS Distributions #define ATTR_CMN_ACCESSMASK                     0x00020000
414*42e22086SApple OSS Distributions #define ATTR_CMN_FLAGS                          0x00040000
415*42e22086SApple OSS Distributions 
416*42e22086SApple OSS Distributions /* The following were defined as:				*/
417*42e22086SApple OSS Distributions /*      #define ATTR_CMN_NAMEDATTRCOUNT		0x00080000	*/
418*42e22086SApple OSS Distributions /*      #define ATTR_CMN_NAMEDATTRLIST		0x00100000	*/
419*42e22086SApple OSS Distributions /* These bits have been salvaged for use as:			*/
420*42e22086SApple OSS Distributions /*	#define ATTR_CMN_GEN_COUNT		0x00080000	*/
421*42e22086SApple OSS Distributions /*	#define ATTR_CMN_DOCUMENT_ID		0x00100000	*/
422*42e22086SApple OSS Distributions /* They can only be used with the  FSOPT_ATTR_CMN_EXTENDED	*/
423*42e22086SApple OSS Distributions /* option flag.                                                 */
424*42e22086SApple OSS Distributions 
425*42e22086SApple OSS Distributions #define ATTR_CMN_GEN_COUNT                      0x00080000
426*42e22086SApple OSS Distributions #define ATTR_CMN_DOCUMENT_ID                    0x00100000
427*42e22086SApple OSS Distributions 
428*42e22086SApple OSS Distributions #define ATTR_CMN_USERACCESS                     0x00200000
429*42e22086SApple OSS Distributions #define ATTR_CMN_EXTENDED_SECURITY              0x00400000
430*42e22086SApple OSS Distributions #define ATTR_CMN_UUID                           0x00800000
431*42e22086SApple OSS Distributions #define ATTR_CMN_GRPUUID                        0x01000000
432*42e22086SApple OSS Distributions #define ATTR_CMN_FILEID                         0x02000000
433*42e22086SApple OSS Distributions #define ATTR_CMN_PARENTID                       0x04000000
434*42e22086SApple OSS Distributions #define ATTR_CMN_FULLPATH                       0x08000000
435*42e22086SApple OSS Distributions #define ATTR_CMN_ADDEDTIME                      0x10000000
436*42e22086SApple OSS Distributions #define ATTR_CMN_ERROR                          0x20000000
437*42e22086SApple OSS Distributions #define ATTR_CMN_DATA_PROTECT_FLAGS             0x40000000
438*42e22086SApple OSS Distributions 
439*42e22086SApple OSS Distributions /*
440*42e22086SApple OSS Distributions  * ATTR_CMN_RETURNED_ATTRS is only valid with getattrlist(2) and
441*42e22086SApple OSS Distributions  * getattrlistbulk(2). It is always the first attribute in the return buffer.
442*42e22086SApple OSS Distributions  */
443*42e22086SApple OSS Distributions #define ATTR_CMN_RETURNED_ATTRS                 0x80000000
444*42e22086SApple OSS Distributions 
445*42e22086SApple OSS Distributions #define ATTR_CMN_VALIDMASK                      0xFFFFFFFF
446*42e22086SApple OSS Distributions /*
447*42e22086SApple OSS Distributions  * The settable ATTR_CMN_* attributes include the following:
448*42e22086SApple OSS Distributions  * ATTR_CMN_SCRIPT
449*42e22086SApple OSS Distributions  * ATTR_CMN_CRTIME
450*42e22086SApple OSS Distributions  * ATTR_CMN_MODTIME
451*42e22086SApple OSS Distributions  * ATTR_CMN_CHGTIME
452*42e22086SApple OSS Distributions  *
453*42e22086SApple OSS Distributions  * ATTR_CMN_ACCTIME
454*42e22086SApple OSS Distributions  * ATTR_CMN_BKUPTIME
455*42e22086SApple OSS Distributions  * ATTR_CMN_FNDRINFO
456*42e22086SApple OSS Distributions  * ATTR_CMN_OWNERID
457*42e22086SApple OSS Distributions  *
458*42e22086SApple OSS Distributions  * ATTR_CMN_GRPID
459*42e22086SApple OSS Distributions  * ATTR_CMN_ACCESSMASK
460*42e22086SApple OSS Distributions  * ATTR_CMN_FLAGS
461*42e22086SApple OSS Distributions  *
462*42e22086SApple OSS Distributions  * ATTR_CMN_EXTENDED_SECURITY
463*42e22086SApple OSS Distributions  * ATTR_CMN_UUID
464*42e22086SApple OSS Distributions  *
465*42e22086SApple OSS Distributions  * ATTR_CMN_GRPUUID
466*42e22086SApple OSS Distributions  *
467*42e22086SApple OSS Distributions  * ATTR_CMN_DATA_PROTECT_FLAGS
468*42e22086SApple OSS Distributions  */
469*42e22086SApple OSS Distributions #define ATTR_CMN_SETMASK                        0x51C7FF00
470*42e22086SApple OSS Distributions #define ATTR_CMN_VOLSETMASK                     0x00006700
471*42e22086SApple OSS Distributions 
472*42e22086SApple OSS Distributions #define ATTR_VOL_FSTYPE                         0x00000001
473*42e22086SApple OSS Distributions #define ATTR_VOL_SIGNATURE                      0x00000002
474*42e22086SApple OSS Distributions #define ATTR_VOL_SIZE                           0x00000004
475*42e22086SApple OSS Distributions #define ATTR_VOL_SPACEFREE                      0x00000008
476*42e22086SApple OSS Distributions #define ATTR_VOL_SPACEAVAIL                     0x00000010
477*42e22086SApple OSS Distributions #define ATTR_VOL_MINALLOCATION                  0x00000020
478*42e22086SApple OSS Distributions #define ATTR_VOL_ALLOCATIONCLUMP                0x00000040
479*42e22086SApple OSS Distributions #define ATTR_VOL_IOBLOCKSIZE                    0x00000080
480*42e22086SApple OSS Distributions #define ATTR_VOL_OBJCOUNT                       0x00000100
481*42e22086SApple OSS Distributions #define ATTR_VOL_FILECOUNT                      0x00000200
482*42e22086SApple OSS Distributions #define ATTR_VOL_DIRCOUNT                       0x00000400
483*42e22086SApple OSS Distributions #define ATTR_VOL_MAXOBJCOUNT                    0x00000800
484*42e22086SApple OSS Distributions #define ATTR_VOL_MOUNTPOINT                     0x00001000
485*42e22086SApple OSS Distributions #define ATTR_VOL_NAME                           0x00002000
486*42e22086SApple OSS Distributions #define ATTR_VOL_MOUNTFLAGS                     0x00004000
487*42e22086SApple OSS Distributions #define ATTR_VOL_MOUNTEDDEVICE                  0x00008000
488*42e22086SApple OSS Distributions #define ATTR_VOL_ENCODINGSUSED                  0x00010000
489*42e22086SApple OSS Distributions #define ATTR_VOL_CAPABILITIES                   0x00020000
490*42e22086SApple OSS Distributions #define ATTR_VOL_UUID                           0x00040000
491*42e22086SApple OSS Distributions #define ATTR_VOL_SPACEUSED                      0x00800000
492*42e22086SApple OSS Distributions #define ATTR_VOL_QUOTA_SIZE                     0x10000000
493*42e22086SApple OSS Distributions #define ATTR_VOL_RESERVED_SIZE          0x20000000
494*42e22086SApple OSS Distributions #define ATTR_VOL_ATTRIBUTES                     0x40000000
495*42e22086SApple OSS Distributions #define ATTR_VOL_INFO                           0x80000000
496*42e22086SApple OSS Distributions 
497*42e22086SApple OSS Distributions #define ATTR_VOL_VALIDMASK                      0xF087FFFF
498*42e22086SApple OSS Distributions 
499*42e22086SApple OSS Distributions /*
500*42e22086SApple OSS Distributions  * The list of settable ATTR_VOL_* attributes include the following:
501*42e22086SApple OSS Distributions  * ATTR_VOL_NAME
502*42e22086SApple OSS Distributions  * ATTR_VOL_INFO
503*42e22086SApple OSS Distributions  */
504*42e22086SApple OSS Distributions #define ATTR_VOL_SETMASK                        0x80002000
505*42e22086SApple OSS Distributions 
506*42e22086SApple OSS Distributions 
507*42e22086SApple OSS Distributions /* File/directory attributes: */
508*42e22086SApple OSS Distributions #define ATTR_DIR_LINKCOUNT                      0x00000001
509*42e22086SApple OSS Distributions #define ATTR_DIR_ENTRYCOUNT                     0x00000002
510*42e22086SApple OSS Distributions #define ATTR_DIR_MOUNTSTATUS                    0x00000004
511*42e22086SApple OSS Distributions #define ATTR_DIR_ALLOCSIZE                      0x00000008
512*42e22086SApple OSS Distributions #define ATTR_DIR_IOBLOCKSIZE                    0x00000010
513*42e22086SApple OSS Distributions #define ATTR_DIR_DATALENGTH                     0x00000020
514*42e22086SApple OSS Distributions 
515*42e22086SApple OSS Distributions /* ATTR_DIR_MOUNTSTATUS Flags: */
516*42e22086SApple OSS Distributions #define   DIR_MNTSTATUS_MNTPOINT                0x00000001
517*42e22086SApple OSS Distributions #define   DIR_MNTSTATUS_TRIGGER                 0x00000002
518*42e22086SApple OSS Distributions 
519*42e22086SApple OSS Distributions #define ATTR_DIR_VALIDMASK                      0x0000003f
520*42e22086SApple OSS Distributions #define ATTR_DIR_SETMASK                        0x00000000
521*42e22086SApple OSS Distributions 
522*42e22086SApple OSS Distributions #define ATTR_FILE_LINKCOUNT                     0x00000001
523*42e22086SApple OSS Distributions #define ATTR_FILE_TOTALSIZE                     0x00000002
524*42e22086SApple OSS Distributions #define ATTR_FILE_ALLOCSIZE                     0x00000004
525*42e22086SApple OSS Distributions #define ATTR_FILE_IOBLOCKSIZE                   0x00000008
526*42e22086SApple OSS Distributions #define ATTR_FILE_DEVTYPE                       0x00000020
527*42e22086SApple OSS Distributions #define ATTR_FILE_FORKCOUNT                     0x00000080
528*42e22086SApple OSS Distributions #define ATTR_FILE_FORKLIST                      0x00000100
529*42e22086SApple OSS Distributions #define ATTR_FILE_DATALENGTH                    0x00000200
530*42e22086SApple OSS Distributions #define ATTR_FILE_DATAALLOCSIZE                 0x00000400
531*42e22086SApple OSS Distributions #define ATTR_FILE_RSRCLENGTH                    0x00001000
532*42e22086SApple OSS Distributions #define ATTR_FILE_RSRCALLOCSIZE                 0x00002000
533*42e22086SApple OSS Distributions 
534*42e22086SApple OSS Distributions #define ATTR_FILE_VALIDMASK                     0x000037FF
535*42e22086SApple OSS Distributions /*
536*42e22086SApple OSS Distributions  * Settable ATTR_FILE_* attributes include:
537*42e22086SApple OSS Distributions  * ATTR_FILE_DEVTYPE
538*42e22086SApple OSS Distributions  */
539*42e22086SApple OSS Distributions #define ATTR_FILE_SETMASK                       0x00000020
540*42e22086SApple OSS Distributions 
541*42e22086SApple OSS Distributions /* CMNEXT attributes extend the common attributes, but in the forkattr field */
542*42e22086SApple OSS Distributions #define ATTR_CMNEXT_RELPATH     0x00000004
543*42e22086SApple OSS Distributions #define ATTR_CMNEXT_PRIVATESIZE 0x00000008
544*42e22086SApple OSS Distributions #define ATTR_CMNEXT_LINKID      0x00000010
545*42e22086SApple OSS Distributions #define ATTR_CMNEXT_NOFIRMLINKPATH     0x00000020
546*42e22086SApple OSS Distributions #define ATTR_CMNEXT_REALDEVID   0x00000040
547*42e22086SApple OSS Distributions #define ATTR_CMNEXT_REALFSID    0x00000080
548*42e22086SApple OSS Distributions #define ATTR_CMNEXT_CLONEID     0x00000100
549*42e22086SApple OSS Distributions #define ATTR_CMNEXT_EXT_FLAGS   0x00000200
550*42e22086SApple OSS Distributions #define ATTR_CMNEXT_RECURSIVE_GENCOUNT 0x00000400
551*42e22086SApple OSS Distributions 
552*42e22086SApple OSS Distributions #define ATTR_CMNEXT_VALIDMASK   0x000007fc
553*42e22086SApple OSS Distributions #define ATTR_CMNEXT_SETMASK             0x00000000
554*42e22086SApple OSS Distributions 
555*42e22086SApple OSS Distributions /* Deprecated fork attributes */
556*42e22086SApple OSS Distributions #define ATTR_FORK_TOTALSIZE                     0x00000001
557*42e22086SApple OSS Distributions #define ATTR_FORK_ALLOCSIZE                     0x00000002
558*42e22086SApple OSS Distributions #define ATTR_FORK_RESERVED                      0xffffffff
559*42e22086SApple OSS Distributions 
560*42e22086SApple OSS Distributions #define ATTR_FORK_VALIDMASK                     0x00000003
561*42e22086SApple OSS Distributions #define ATTR_FORK_SETMASK                       0x00000000
562*42e22086SApple OSS Distributions 
563*42e22086SApple OSS Distributions /* Obsolete, implemented, not supported */
564*42e22086SApple OSS Distributions #define ATTR_CMN_NAMEDATTRCOUNT                 0x00080000
565*42e22086SApple OSS Distributions #define ATTR_CMN_NAMEDATTRLIST                  0x00100000
566*42e22086SApple OSS Distributions #define ATTR_FILE_CLUMPSIZE                     0x00000010      /* obsolete */
567*42e22086SApple OSS Distributions #define ATTR_FILE_FILETYPE                      0x00000040      /* always zero */
568*42e22086SApple OSS Distributions #define ATTR_FILE_DATAEXTENTS                   0x00000800      /* obsolete, HFS-specific */
569*42e22086SApple OSS Distributions #define ATTR_FILE_RSRCEXTENTS                   0x00004000      /* obsolete, HFS-specific */
570*42e22086SApple OSS Distributions 
571*42e22086SApple OSS Distributions /* Required attributes for getattrlistbulk(2) */
572*42e22086SApple OSS Distributions #define ATTR_BULK_REQUIRED (ATTR_CMN_NAME | ATTR_CMN_RETURNED_ATTRS)
573*42e22086SApple OSS Distributions 
574*42e22086SApple OSS Distributions /*
575*42e22086SApple OSS Distributions  * Searchfs
576*42e22086SApple OSS Distributions  */
577*42e22086SApple OSS Distributions #define SRCHFS_START                            0x00000001
578*42e22086SApple OSS Distributions #define SRCHFS_MATCHPARTIALNAMES                0x00000002
579*42e22086SApple OSS Distributions #define SRCHFS_MATCHDIRS                        0x00000004
580*42e22086SApple OSS Distributions #define SRCHFS_MATCHFILES                       0x00000008
581*42e22086SApple OSS Distributions #define SRCHFS_SKIPLINKS                        0x00000010
582*42e22086SApple OSS Distributions #define SRCHFS_SKIPINVISIBLE                    0x00000020
583*42e22086SApple OSS Distributions #define SRCHFS_SKIPPACKAGES                     0x00000040
584*42e22086SApple OSS Distributions #define SRCHFS_SKIPINAPPROPRIATE                0x00000080
585*42e22086SApple OSS Distributions 
586*42e22086SApple OSS Distributions #define SRCHFS_NEGATEPARAMS                     0x80000000
587*42e22086SApple OSS Distributions #define SRCHFS_VALIDOPTIONSMASK                 0x800000FF
588*42e22086SApple OSS Distributions 
589*42e22086SApple OSS Distributions struct fssearchblock {
590*42e22086SApple OSS Distributions 	struct attrlist         *returnattrs;
591*42e22086SApple OSS Distributions 	void                            *returnbuffer;
592*42e22086SApple OSS Distributions 	size_t                          returnbuffersize;
593*42e22086SApple OSS Distributions 	u_long                          maxmatches;
594*42e22086SApple OSS Distributions 	struct timeval          timelimit;
595*42e22086SApple OSS Distributions 	void                            *searchparams1;
596*42e22086SApple OSS Distributions 	size_t                          sizeofsearchparams1;
597*42e22086SApple OSS Distributions 	void                            *searchparams2;
598*42e22086SApple OSS Distributions 	size_t                          sizeofsearchparams2;
599*42e22086SApple OSS Distributions 	struct attrlist         searchattrs;
600*42e22086SApple OSS Distributions };
601*42e22086SApple OSS Distributions 
602*42e22086SApple OSS Distributions #ifdef KERNEL
603*42e22086SApple OSS Distributions /* LP64 version of fssearchblock.  all pointers and longs
604*42e22086SApple OSS Distributions  * grow when we're dealing with a 64-bit process.
605*42e22086SApple OSS Distributions  * WARNING - keep in sync with fssearchblock
606*42e22086SApple OSS Distributions  */
607*42e22086SApple OSS Distributions 
608*42e22086SApple OSS Distributions struct user64_fssearchblock {
609*42e22086SApple OSS Distributions 	user64_addr_t         returnattrs;
610*42e22086SApple OSS Distributions 	user64_addr_t         returnbuffer;
611*42e22086SApple OSS Distributions 	user64_size_t         returnbuffersize;
612*42e22086SApple OSS Distributions 	user64_ulong_t        maxmatches;
613*42e22086SApple OSS Distributions 	struct user64_timeval   timelimit;
614*42e22086SApple OSS Distributions 	user64_addr_t         searchparams1;
615*42e22086SApple OSS Distributions 	user64_size_t         sizeofsearchparams1;
616*42e22086SApple OSS Distributions 	user64_addr_t         searchparams2;
617*42e22086SApple OSS Distributions 	user64_size_t         sizeofsearchparams2;
618*42e22086SApple OSS Distributions 	struct attrlist         searchattrs;
619*42e22086SApple OSS Distributions };
620*42e22086SApple OSS Distributions 
621*42e22086SApple OSS Distributions struct user32_fssearchblock {
622*42e22086SApple OSS Distributions 	user32_addr_t         returnattrs;
623*42e22086SApple OSS Distributions 	user32_addr_t         returnbuffer;
624*42e22086SApple OSS Distributions 	user32_size_t         returnbuffersize;
625*42e22086SApple OSS Distributions 	user32_ulong_t        maxmatches;
626*42e22086SApple OSS Distributions 	struct user32_timeval   timelimit;
627*42e22086SApple OSS Distributions 	user32_addr_t         searchparams1;
628*42e22086SApple OSS Distributions 	user32_size_t         sizeofsearchparams1;
629*42e22086SApple OSS Distributions 	user32_addr_t         searchparams2;
630*42e22086SApple OSS Distributions 	user32_size_t         sizeofsearchparams2;
631*42e22086SApple OSS Distributions 	struct attrlist         searchattrs;
632*42e22086SApple OSS Distributions };
633*42e22086SApple OSS Distributions 
634*42e22086SApple OSS Distributions #endif /* KERNEL */
635*42e22086SApple OSS Distributions 
636*42e22086SApple OSS Distributions struct searchstate {
637*42e22086SApple OSS Distributions 	uint32_t                        ss_union_flags;         // for SRCHFS_START
638*42e22086SApple OSS Distributions 	uint32_t                        ss_union_layer;         // 0 = top
639*42e22086SApple OSS Distributions 	u_char                          ss_fsstate[548];        // fs private
640*42e22086SApple OSS Distributions } __attribute__((packed));
641*42e22086SApple OSS Distributions 
642*42e22086SApple OSS Distributions #define FST_EOF (-1)                            /* end-of-file offset */
643*42e22086SApple OSS Distributions 
644*42e22086SApple OSS Distributions #endif /* __APPLE_API_UNSTABLE */
645*42e22086SApple OSS Distributions #endif /* !_SYS_ATTR_H_ */
646