xref: /xnu-8020.140.41/bsd/sys/xattr.h (revision 27b03b360a988dfd3dfdf34262bb0042026747cc)
1 /*
2  * Copyright (c) 2004-2012 Apple Inc. All rights reserved.
3  *
4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5  *
6  * This file contains Original Code and/or Modifications of Original Code
7  * as defined in and that are subject to the Apple Public Source License
8  * Version 2.0 (the 'License'). You may not use this file except in
9  * compliance with the License. The rights granted to you under the License
10  * may not be used to create, or enable the creation or redistribution of,
11  * unlawful or unlicensed copies of an Apple operating system, or to
12  * circumvent, violate, or enable the circumvention or violation of, any
13  * terms of an Apple operating system software license agreement.
14  *
15  * Please obtain a copy of the License at
16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17  *
18  * The Original Code and all software distributed under the License are
19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23  * Please see the License for the specific language governing rights and
24  * limitations under the License.
25  *
26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27  */
28 
29 #ifndef _SYS_XATTR_H_
30 #define _SYS_XATTR_H_
31 
32 #include <sys/types.h>
33 
34 /* Options for pathname based xattr calls */
35 #define XATTR_NOFOLLOW   0x0001     /* Don't follow symbolic links */
36 
37 /* Options for setxattr calls */
38 #define XATTR_CREATE     0x0002     /* set the value, fail if attr already exists */
39 #define XATTR_REPLACE    0x0004     /* set the value, fail if attr does not exist */
40 
41 /* Set this to bypass authorization checking (eg. if doing auth-related work) */
42 #define XATTR_NOSECURITY 0x0008
43 
44 /* Set this to bypass the default extended attribute file (dot-underscore file) */
45 #define XATTR_NODEFAULT  0x0010
46 
47 /* option for f/getxattr() and f/listxattr() to expose the HFS Compression extended attributes */
48 #define XATTR_SHOWCOMPRESSION 0x0020
49 
50 #define XATTR_MAXNAMELEN   127
51 
52 /* See the ATTR_CMN_FNDRINFO section of getattrlist(2) for details on FinderInfo */
53 #define XATTR_FINDERINFO_NAME     "com.apple.FinderInfo"
54 
55 #define XATTR_RESOURCEFORK_NAME   "com.apple.ResourceFork"
56 
57 
58 #ifdef KERNEL
59 
60 #ifdef KERNEL_PRIVATE
61 #define XATTR_VNODE_SUPPORTED(vp) \
62 	((vp)->v_type == VREG || (vp)->v_type == VDIR || (vp)->v_type == VLNK || (vp)->v_type == VSOCK || (vp)->v_type == VFIFO)
63 #endif
64 
65 __BEGIN_DECLS
66 int  xattr_protected(const char *);
67 int  xattr_validatename(const char *);
68 
69 /* Maximum extended attribute size supported by VFS */
70 #define XATTR_MAXSIZE           INT32_MAX
71 
72 #ifdef PRIVATE
73 /* Maximum extended attribute size in an Apple Double file */
74 #define AD_XATTR_MAXSIZE        XATTR_MAXSIZE
75 
76 /* Number of bits used to represent the maximum size of
77  * extended attribute stored in an Apple Double file.
78  */
79 #define AD_XATTR_SIZE_BITS      31
80 #endif /* PRIVATE */
81 
82 __END_DECLS
83 #endif /* KERNEL */
84 
85 #ifndef KERNEL
86 __BEGIN_DECLS
87 
88 ssize_t getxattr(const char *path, const char *name, void *value, size_t size, u_int32_t position, int options);
89 
90 ssize_t fgetxattr(int fd, const char *name, void *value, size_t size, u_int32_t position, int options);
91 
92 int setxattr(const char *path, const char *name, const void *value, size_t size, u_int32_t position, int options);
93 
94 int fsetxattr(int fd, const char *name, const void *value, size_t size, u_int32_t position, int options);
95 
96 int removexattr(const char *path, const char *name, int options);
97 
98 int fremovexattr(int fd, const char *name, int options);
99 
100 ssize_t listxattr(const char *path, char *namebuff, size_t size, int options);
101 
102 ssize_t flistxattr(int fd, char *namebuff, size_t size, int options);
103 
104 __END_DECLS
105 #endif /* KERNEL */
106 
107 #endif /* _SYS_XATTR_H_ */
108