xref: /xnu-11417.140.69/bsd/sys/fcntl.h (revision 43a90889846e00bfb5cf1d255cdc0a701a1e05a4)
1*43a90889SApple OSS Distributions /*
2*43a90889SApple OSS Distributions  * Copyright (c) 2000-2022 Apple Inc. All rights reserved.
3*43a90889SApple OSS Distributions  *
4*43a90889SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*43a90889SApple OSS Distributions  *
6*43a90889SApple OSS Distributions  * This file contains Original Code and/or Modifications of Original Code
7*43a90889SApple OSS Distributions  * as defined in and that are subject to the Apple Public Source License
8*43a90889SApple OSS Distributions  * Version 2.0 (the 'License'). You may not use this file except in
9*43a90889SApple OSS Distributions  * compliance with the License. The rights granted to you under the License
10*43a90889SApple OSS Distributions  * may not be used to create, or enable the creation or redistribution of,
11*43a90889SApple OSS Distributions  * unlawful or unlicensed copies of an Apple operating system, or to
12*43a90889SApple OSS Distributions  * circumvent, violate, or enable the circumvention or violation of, any
13*43a90889SApple OSS Distributions  * terms of an Apple operating system software license agreement.
14*43a90889SApple OSS Distributions  *
15*43a90889SApple OSS Distributions  * Please obtain a copy of the License at
16*43a90889SApple OSS Distributions  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*43a90889SApple OSS Distributions  *
18*43a90889SApple OSS Distributions  * The Original Code and all software distributed under the License are
19*43a90889SApple OSS Distributions  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*43a90889SApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*43a90889SApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*43a90889SApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*43a90889SApple OSS Distributions  * Please see the License for the specific language governing rights and
24*43a90889SApple OSS Distributions  * limitations under the License.
25*43a90889SApple OSS Distributions  *
26*43a90889SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*43a90889SApple OSS Distributions  */
28*43a90889SApple OSS Distributions /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
29*43a90889SApple OSS Distributions /*-
30*43a90889SApple OSS Distributions  * Copyright (c) 1983, 1990, 1993
31*43a90889SApple OSS Distributions  *	The Regents of the University of California.  All rights reserved.
32*43a90889SApple OSS Distributions  * (c) UNIX System Laboratories, Inc.
33*43a90889SApple OSS Distributions  * All or some portions of this file are derived from material licensed
34*43a90889SApple OSS Distributions  * to the University of California by American Telephone and Telegraph
35*43a90889SApple OSS Distributions  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
36*43a90889SApple OSS Distributions  * the permission of UNIX System Laboratories, Inc.
37*43a90889SApple OSS Distributions  *
38*43a90889SApple OSS Distributions  * Redistribution and use in source and binary forms, with or without
39*43a90889SApple OSS Distributions  * modification, are permitted provided that the following conditions
40*43a90889SApple OSS Distributions  * are met:
41*43a90889SApple OSS Distributions  * 1. Redistributions of source code must retain the above copyright
42*43a90889SApple OSS Distributions  *    notice, this list of conditions and the following disclaimer.
43*43a90889SApple OSS Distributions  * 2. Redistributions in binary form must reproduce the above copyright
44*43a90889SApple OSS Distributions  *    notice, this list of conditions and the following disclaimer in the
45*43a90889SApple OSS Distributions  *    documentation and/or other materials provided with the distribution.
46*43a90889SApple OSS Distributions  * 3. All advertising materials mentioning features or use of this software
47*43a90889SApple OSS Distributions  *    must display the following acknowledgement:
48*43a90889SApple OSS Distributions  *	This product includes software developed by the University of
49*43a90889SApple OSS Distributions  *	California, Berkeley and its contributors.
50*43a90889SApple OSS Distributions  * 4. Neither the name of the University nor the names of its contributors
51*43a90889SApple OSS Distributions  *    may be used to endorse or promote products derived from this software
52*43a90889SApple OSS Distributions  *    without specific prior written permission.
53*43a90889SApple OSS Distributions  *
54*43a90889SApple OSS Distributions  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
55*43a90889SApple OSS Distributions  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
56*43a90889SApple OSS Distributions  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
57*43a90889SApple OSS Distributions  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
58*43a90889SApple OSS Distributions  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
59*43a90889SApple OSS Distributions  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
60*43a90889SApple OSS Distributions  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
61*43a90889SApple OSS Distributions  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
62*43a90889SApple OSS Distributions  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
63*43a90889SApple OSS Distributions  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
64*43a90889SApple OSS Distributions  * SUCH DAMAGE.
65*43a90889SApple OSS Distributions  *
66*43a90889SApple OSS Distributions  *	@(#)fcntl.h	8.3 (Berkeley) 1/21/94
67*43a90889SApple OSS Distributions  */
68*43a90889SApple OSS Distributions 
69*43a90889SApple OSS Distributions 
70*43a90889SApple OSS Distributions #ifndef _SYS_FCNTL_H_
71*43a90889SApple OSS Distributions #define _SYS_FCNTL_H_
72*43a90889SApple OSS Distributions 
73*43a90889SApple OSS Distributions /*
74*43a90889SApple OSS Distributions  * This file includes the definitions for open and fcntl
75*43a90889SApple OSS Distributions  * described by POSIX for <fcntl.h>; it also includes
76*43a90889SApple OSS Distributions  * related kernel definitions.
77*43a90889SApple OSS Distributions  */
78*43a90889SApple OSS Distributions #include <sys/_types.h>
79*43a90889SApple OSS Distributions #include <sys/cdefs.h>
80*43a90889SApple OSS Distributions #ifndef KERNEL
81*43a90889SApple OSS Distributions #include <Availability.h>
82*43a90889SApple OSS Distributions #endif
83*43a90889SApple OSS Distributions 
84*43a90889SApple OSS Distributions /* We should not be exporting size_t here.  Temporary for gcc bootstrapping. */
85*43a90889SApple OSS Distributions #include <sys/_types/_size_t.h>
86*43a90889SApple OSS Distributions #include <sys/_types/_mode_t.h>
87*43a90889SApple OSS Distributions #include <sys/_types/_off_t.h>
88*43a90889SApple OSS Distributions #include <sys/_types/_pid_t.h>
89*43a90889SApple OSS Distributions 
90*43a90889SApple OSS Distributions /*
91*43a90889SApple OSS Distributions  * File status flags: these are used by open(2), fcntl(2).
92*43a90889SApple OSS Distributions  * They are also used (indirectly) in the kernel file structure f_flags,
93*43a90889SApple OSS Distributions  * which is a superset of the open/fcntl flags.  Open flags and f_flags
94*43a90889SApple OSS Distributions  * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
95*43a90889SApple OSS Distributions  * Open/fcntl flags begin with O_; kernel-internal flags begin with F.
96*43a90889SApple OSS Distributions  */
97*43a90889SApple OSS Distributions /* open-only flags */
98*43a90889SApple OSS Distributions #define O_RDONLY        0x0000          /* open for reading only */
99*43a90889SApple OSS Distributions #define O_WRONLY        0x0001          /* open for writing only */
100*43a90889SApple OSS Distributions #define O_RDWR          0x0002          /* open for reading and writing */
101*43a90889SApple OSS Distributions #define O_ACCMODE       0x0003          /* mask for above modes */
102*43a90889SApple OSS Distributions 
103*43a90889SApple OSS Distributions /*
104*43a90889SApple OSS Distributions  * Kernel encoding of open mode; separate read and write bits that are
105*43a90889SApple OSS Distributions  * independently testable: 1 greater than the above.
106*43a90889SApple OSS Distributions  *
107*43a90889SApple OSS Distributions  * XXX
108*43a90889SApple OSS Distributions  * FREAD and FWRITE are excluded from the #ifdef KERNEL so that TIOCFLUSH,
109*43a90889SApple OSS Distributions  * which was documented to use FREAD/FWRITE, continues to work.
110*43a90889SApple OSS Distributions  */
111*43a90889SApple OSS Distributions #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
112*43a90889SApple OSS Distributions #define FREAD           0x00000001
113*43a90889SApple OSS Distributions #define FWRITE          0x00000002
114*43a90889SApple OSS Distributions #endif
115*43a90889SApple OSS Distributions #define O_NONBLOCK      0x00000004      /* no delay */
116*43a90889SApple OSS Distributions #define O_APPEND        0x00000008      /* set append mode */
117*43a90889SApple OSS Distributions 
118*43a90889SApple OSS Distributions #include <sys/_types/_o_sync.h>
119*43a90889SApple OSS Distributions 
120*43a90889SApple OSS Distributions #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
121*43a90889SApple OSS Distributions #define O_SHLOCK        0x00000010      /* open with shared file lock */
122*43a90889SApple OSS Distributions #define O_EXLOCK        0x00000020      /* open with exclusive file lock */
123*43a90889SApple OSS Distributions #define O_ASYNC         0x00000040      /* signal pgrp when data ready */
124*43a90889SApple OSS Distributions #define O_FSYNC         O_SYNC          /* source compatibility: do not use */
125*43a90889SApple OSS Distributions #define O_NOFOLLOW      0x00000100      /* don't follow symlinks */
126*43a90889SApple OSS Distributions #endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
127*43a90889SApple OSS Distributions #define O_CREAT         0x00000200      /* create if nonexistant */
128*43a90889SApple OSS Distributions #define O_TRUNC         0x00000400      /* truncate to zero length */
129*43a90889SApple OSS Distributions #define O_EXCL          0x00000800      /* error if already exists */
130*43a90889SApple OSS Distributions #define O_RESOLVE_BENEATH 0x00001000    /* only for open(2), same value as FMARK */
131*43a90889SApple OSS Distributions 
132*43a90889SApple OSS Distributions #ifdef KERNEL
133*43a90889SApple OSS Distributions #define FMARK           0x00001000      /* mark during gc(), same value as O_RESOLVE_BENEATH */
134*43a90889SApple OSS Distributions #define FDEFER          0x00002000      /* defer for next gc pass */
135*43a90889SApple OSS Distributions #define FWASLOCKED      0x00004000      /* has or has had an advisory fcntl lock */
136*43a90889SApple OSS Distributions #define FHASLOCK        FWASLOCKED      /* obsolete compatibility name */
137*43a90889SApple OSS Distributions #endif
138*43a90889SApple OSS Distributions 
139*43a90889SApple OSS Distributions #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
140*43a90889SApple OSS Distributions #define O_EVTONLY       0x00008000      /* descriptor requested for event notifications only */
141*43a90889SApple OSS Distributions #endif
142*43a90889SApple OSS Distributions 
143*43a90889SApple OSS Distributions #ifdef KERNEL
144*43a90889SApple OSS Distributions #define FWASWRITTEN     0x00010000      /* descriptor was written */
145*43a90889SApple OSS Distributions #endif
146*43a90889SApple OSS Distributions 
147*43a90889SApple OSS Distributions #define O_NOCTTY        0x00020000      /* don't assign controlling terminal */
148*43a90889SApple OSS Distributions 
149*43a90889SApple OSS Distributions #ifdef KERNEL
150*43a90889SApple OSS Distributions #define FNOCACHE        0x00040000      /* fcntl(F_NOCACHE, 1) */
151*43a90889SApple OSS Distributions #define FNORDAHEAD      0x00080000      /* fcntl(F_RDAHEAD, 0) */
152*43a90889SApple OSS Distributions #endif
153*43a90889SApple OSS Distributions 
154*43a90889SApple OSS Distributions #if __DARWIN_C_LEVEL >= 200809L
155*43a90889SApple OSS Distributions #define O_DIRECTORY     0x00100000
156*43a90889SApple OSS Distributions #endif
157*43a90889SApple OSS Distributions 
158*43a90889SApple OSS Distributions #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
159*43a90889SApple OSS Distributions #define O_SYMLINK       0x00200000      /* allow open of a symlink */
160*43a90889SApple OSS Distributions #endif
161*43a90889SApple OSS Distributions 
162*43a90889SApple OSS Distributions //      O_DSYNC         0x00400000      /* synch I/O data integrity */
163*43a90889SApple OSS Distributions #include <sys/_types/_o_dsync.h>
164*43a90889SApple OSS Distributions 
165*43a90889SApple OSS Distributions #ifdef KERNEL
166*43a90889SApple OSS Distributions #define FNODIRECT       0x00800000      /* fcntl(F_NODIRECT, 1) */
167*43a90889SApple OSS Distributions #endif
168*43a90889SApple OSS Distributions 
169*43a90889SApple OSS Distributions #if __DARWIN_C_LEVEL >= 200809L
170*43a90889SApple OSS Distributions #define O_CLOEXEC       0x01000000      /* implicitly set FD_CLOEXEC */
171*43a90889SApple OSS Distributions #endif
172*43a90889SApple OSS Distributions 
173*43a90889SApple OSS Distributions #ifdef KERNEL
174*43a90889SApple OSS Distributions #define FENCRYPTED      0x02000000
175*43a90889SApple OSS Distributions #define FSINGLE_WRITER  0x04000000      /* fcntl(F_SINGLE_WRITER, 1) */
176*43a90889SApple OSS Distributions #define O_CLOFORK       0x08000000      /* implicitly set FD_CLOFORK */
177*43a90889SApple OSS Distributions #define FUNENCRYPTED    0x10000000
178*43a90889SApple OSS Distributions #endif
179*43a90889SApple OSS Distributions 
180*43a90889SApple OSS Distributions #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
181*43a90889SApple OSS Distributions #define O_NOFOLLOW_ANY  0x20000000      /* no symlinks allowed in path */
182*43a90889SApple OSS Distributions #endif
183*43a90889SApple OSS Distributions 
184*43a90889SApple OSS Distributions #if __DARWIN_C_LEVEL >= 200809L
185*43a90889SApple OSS Distributions #define O_EXEC          0x40000000               /* open file for execute only */
186*43a90889SApple OSS Distributions #define O_SEARCH        (O_EXEC | O_DIRECTORY)   /* open directory for search only */
187*43a90889SApple OSS Distributions #endif
188*43a90889SApple OSS Distributions 
189*43a90889SApple OSS Distributions #ifdef KERNEL
190*43a90889SApple OSS Distributions #define FEXEC           O_EXEC
191*43a90889SApple OSS Distributions #define FSEARCH         FEXEC
192*43a90889SApple OSS Distributions #endif
193*43a90889SApple OSS Distributions 
194*43a90889SApple OSS Distributions #ifdef KERNEL
195*43a90889SApple OSS Distributions /* End of File status flags (fileglob::fg_flag) */
196*43a90889SApple OSS Distributions #endif
197*43a90889SApple OSS Distributions 
198*43a90889SApple OSS Distributions #if __DARWIN_C_LEVEL >= 200809L
199*43a90889SApple OSS Distributions /*
200*43a90889SApple OSS Distributions  * Descriptor value for the current working directory
201*43a90889SApple OSS Distributions  */
202*43a90889SApple OSS Distributions #define AT_FDCWD        -2
203*43a90889SApple OSS Distributions 
204*43a90889SApple OSS Distributions /*
205*43a90889SApple OSS Distributions  * Flags for the at functions
206*43a90889SApple OSS Distributions  */
207*43a90889SApple OSS Distributions #define AT_EACCESS              0x0010  /* Use effective ids in access check */
208*43a90889SApple OSS Distributions #define AT_SYMLINK_NOFOLLOW     0x0020  /* Act on the symlink itself not the target */
209*43a90889SApple OSS Distributions #define AT_SYMLINK_FOLLOW       0x0040  /* Act on target of symlink */
210*43a90889SApple OSS Distributions #define AT_REMOVEDIR            0x0080  /* Path refers to directory */
211*43a90889SApple OSS Distributions #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
212*43a90889SApple OSS Distributions #ifdef PRIVATE
213*43a90889SApple OSS Distributions #define AT_REMOVEDIR_DATALESS   0x0100  /* Remove a dataless directory without materializing first */
214*43a90889SApple OSS Distributions #endif
215*43a90889SApple OSS Distributions #define AT_REALDEV              0x0200  /* Return real device inodes resides on for fstatat(2) */
216*43a90889SApple OSS Distributions #define AT_FDONLY               0x0400  /* Use only the fd and Ignore the path for fstatat(2) */
217*43a90889SApple OSS Distributions #define AT_SYMLINK_NOFOLLOW_ANY 0x0800  /* Path should not contain any symlinks */
218*43a90889SApple OSS Distributions #ifdef PRIVATE
219*43a90889SApple OSS Distributions #define AT_SYSTEM_DISCARDED     0x1000  /* Indicated file/folder was discarded by system */
220*43a90889SApple OSS Distributions #endif
221*43a90889SApple OSS Distributions #endif
222*43a90889SApple OSS Distributions #endif
223*43a90889SApple OSS Distributions 
224*43a90889SApple OSS Distributions #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
225*43a90889SApple OSS Distributions /* Data Protection Flags */
226*43a90889SApple OSS Distributions #define O_DP_GETRAWENCRYPTED    0x0001
227*43a90889SApple OSS Distributions #define O_DP_GETRAWUNENCRYPTED  0x0002
228*43a90889SApple OSS Distributions #define O_DP_AUTHENTICATE       0x0004
229*43a90889SApple OSS Distributions 
230*43a90889SApple OSS Distributions /* Descriptor value for openat_authenticated_np() to skip authentication with another fd */
231*43a90889SApple OSS Distributions #define AUTH_OPEN_NOAUTHFD      -1
232*43a90889SApple OSS Distributions #endif
233*43a90889SApple OSS Distributions 
234*43a90889SApple OSS Distributions 
235*43a90889SApple OSS Distributions #ifdef KERNEL
236*43a90889SApple OSS Distributions /* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */
237*43a90889SApple OSS Distributions /* O_EXEC turns off FREAD/FWRITE */
238*43a90889SApple OSS Distributions #define FFLAGS(oflags)  (((oflags) & O_EXEC) ? ((oflags) & ~(O_ACCMODE)) : ((oflags) + 1))
239*43a90889SApple OSS Distributions /* There is no way to convey a lack of O_RDONLY but the presence of O_EXEC means that */
240*43a90889SApple OSS Distributions #define OFLAGS(fflags)  (((fflags) & FEXEC) ? ((fflags) & ~(O_ACCMODE)) : ((fflags) - 1))
241*43a90889SApple OSS Distributions 
242*43a90889SApple OSS Distributions /* bits to save after open */
243*43a90889SApple OSS Distributions #define FMASK           (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FFDSYNC|FNONBLOCK|FEXEC)
244*43a90889SApple OSS Distributions /* bits settable by fcntl(F_SETFL, ...) */
245*43a90889SApple OSS Distributions #define FCNTLFLAGS      (FAPPEND|FASYNC|FFSYNC|FFDSYNC|FNONBLOCK)
246*43a90889SApple OSS Distributions #endif
247*43a90889SApple OSS Distributions 
248*43a90889SApple OSS Distributions /*
249*43a90889SApple OSS Distributions  * The O_* flags used to have only F* names, which were used in the kernel
250*43a90889SApple OSS Distributions  * and by fcntl.  We retain the F* names for the kernel f_flags field
251*43a90889SApple OSS Distributions  * and for backward compatibility for fcntl.
252*43a90889SApple OSS Distributions  */
253*43a90889SApple OSS Distributions #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
254*43a90889SApple OSS Distributions #define FAPPEND         O_APPEND        /* kernel/compat */
255*43a90889SApple OSS Distributions #define FASYNC          O_ASYNC         /* kernel/compat */
256*43a90889SApple OSS Distributions #define FFSYNC          O_FSYNC         /* kernel */
257*43a90889SApple OSS Distributions #define FFDSYNC         O_DSYNC         /* kernel */
258*43a90889SApple OSS Distributions #define FNONBLOCK       O_NONBLOCK      /* kernel */
259*43a90889SApple OSS Distributions #define FNDELAY         O_NONBLOCK      /* compat */
260*43a90889SApple OSS Distributions #define O_NDELAY        O_NONBLOCK      /* compat */
261*43a90889SApple OSS Distributions #endif
262*43a90889SApple OSS Distributions 
263*43a90889SApple OSS Distributions /*
264*43a90889SApple OSS Distributions  * Flags used for copyfile(2)
265*43a90889SApple OSS Distributions  */
266*43a90889SApple OSS Distributions 
267*43a90889SApple OSS Distributions #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
268*43a90889SApple OSS Distributions #define CPF_OVERWRITE    0x0001
269*43a90889SApple OSS Distributions #define CPF_IGNORE_MODE  0x0002
270*43a90889SApple OSS Distributions #define CPF_MASK (CPF_OVERWRITE|CPF_IGNORE_MODE)
271*43a90889SApple OSS Distributions #endif
272*43a90889SApple OSS Distributions 
273*43a90889SApple OSS Distributions /*
274*43a90889SApple OSS Distributions  * Constants used for fcntl(2)
275*43a90889SApple OSS Distributions  */
276*43a90889SApple OSS Distributions 
277*43a90889SApple OSS Distributions /* command values */
278*43a90889SApple OSS Distributions #define F_DUPFD         0               /* duplicate file descriptor */
279*43a90889SApple OSS Distributions #define F_GETFD         1               /* get file descriptor flags */
280*43a90889SApple OSS Distributions #define F_SETFD         2               /* set file descriptor flags */
281*43a90889SApple OSS Distributions #define F_GETFL         3               /* get file status flags */
282*43a90889SApple OSS Distributions #define F_SETFL         4               /* set file status flags */
283*43a90889SApple OSS Distributions #define F_GETOWN        5               /* get SIGIO/SIGURG proc/pgrp */
284*43a90889SApple OSS Distributions #define F_SETOWN        6               /* set SIGIO/SIGURG proc/pgrp */
285*43a90889SApple OSS Distributions #define F_GETLK         7               /* get record locking information */
286*43a90889SApple OSS Distributions #define F_SETLK         8               /* set record locking information */
287*43a90889SApple OSS Distributions #define F_SETLKW        9               /* F_SETLK; wait if blocked */
288*43a90889SApple OSS Distributions #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
289*43a90889SApple OSS Distributions #define F_SETLKWTIMEOUT 10              /* F_SETLK; wait if blocked, return on timeout */
290*43a90889SApple OSS Distributions #endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
291*43a90889SApple OSS Distributions #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
292*43a90889SApple OSS Distributions #define F_FLUSH_DATA    40
293*43a90889SApple OSS Distributions #define F_CHKCLEAN      41              /* Used for regression test */
294*43a90889SApple OSS Distributions #define F_PREALLOCATE   42              /* Preallocate storage */
295*43a90889SApple OSS Distributions #define F_SETSIZE       43              /* Truncate a file. Equivalent to calling truncate(2) */
296*43a90889SApple OSS Distributions #define F_RDADVISE      44              /* Issue an advisory read async with no copy to user */
297*43a90889SApple OSS Distributions #define F_RDAHEAD       45              /* turn read ahead off/on for this fd */
298*43a90889SApple OSS Distributions /*
299*43a90889SApple OSS Distributions  * 46,47 used to be F_READBOOTSTRAP and F_WRITEBOOTSTRAP
300*43a90889SApple OSS Distributions  */
301*43a90889SApple OSS Distributions #define F_NOCACHE       48              /* turn data caching off/on for this fd */
302*43a90889SApple OSS Distributions #define F_LOG2PHYS      49              /* file offset to device offset */
303*43a90889SApple OSS Distributions #define F_GETPATH       50              /* return the full path of the fd */
304*43a90889SApple OSS Distributions #define F_FULLFSYNC     51              /* fsync + ask the drive to flush to the media */
305*43a90889SApple OSS Distributions #define F_PATHPKG_CHECK 52              /* find which component (if any) is a package */
306*43a90889SApple OSS Distributions #define F_FREEZE_FS     53              /* "freeze" all fs operations */
307*43a90889SApple OSS Distributions #define F_THAW_FS       54              /* "thaw" all fs operations */
308*43a90889SApple OSS Distributions #define F_GLOBAL_NOCACHE 55             /* turn data caching off/on (globally) for this file */
309*43a90889SApple OSS Distributions 
310*43a90889SApple OSS Distributions #ifdef PRIVATE
311*43a90889SApple OSS Distributions #define F_OPENFROM      56              /* SPI: open a file relative to fd (must be a dir) */
312*43a90889SApple OSS Distributions #define F_UNLINKFROM    57              /* SPI: open a file relative to fd (must be a dir) */
313*43a90889SApple OSS Distributions #define F_CHECK_OPENEVT 58              /* SPI: if a process is marked OPENEVT, or in O_EVTONLY on opens of this vnode */
314*43a90889SApple OSS Distributions #endif /* PRIVATE */
315*43a90889SApple OSS Distributions 
316*43a90889SApple OSS Distributions #define F_ADDSIGS       59              /* add detached signatures */
317*43a90889SApple OSS Distributions 
318*43a90889SApple OSS Distributions #ifdef PRIVATE
319*43a90889SApple OSS Distributions /* Deprecated/Removed in 10.9 */
320*43a90889SApple OSS Distributions #define F_MARKDEPENDENCY 60             /* this process hosts the device supporting the fs backing this fd */
321*43a90889SApple OSS Distributions #endif
322*43a90889SApple OSS Distributions 
323*43a90889SApple OSS Distributions #define F_ADDFILESIGS   61              /* add signature from same file (used by dyld for shared libs) */
324*43a90889SApple OSS Distributions 
325*43a90889SApple OSS Distributions #define F_NODIRECT      62              /* used in conjunction with F_NOCACHE to indicate that DIRECT, synchonous writes */
326*43a90889SApple OSS Distributions                                         /* should not be used (i.e. its ok to temporaily create cached pages) */
327*43a90889SApple OSS Distributions 
328*43a90889SApple OSS Distributions #define F_GETPROTECTIONCLASS    63              /* Get the protection class of a file from the EA, returns int */
329*43a90889SApple OSS Distributions #define F_SETPROTECTIONCLASS    64              /* Set the protection class of a file for the EA, requires int */
330*43a90889SApple OSS Distributions 
331*43a90889SApple OSS Distributions #define F_LOG2PHYS_EXT  65              /* file offset to device offset, extended */
332*43a90889SApple OSS Distributions 
333*43a90889SApple OSS Distributions #define F_GETLKPID              66      /* See man fcntl(2) F_GETLK
334*43a90889SApple OSS Distributions 	                                 * Similar to F_GETLK but in addition l_pid is treated as an input parameter
335*43a90889SApple OSS Distributions 	                                 * which is used as a matching value when searching locks on the file
336*43a90889SApple OSS Distributions 	                                 * so that only locks owned by the process with pid l_pid are returned.
337*43a90889SApple OSS Distributions 	                                 * However, any flock(2) type lock will also be found with the returned value
338*43a90889SApple OSS Distributions 	                                 * of l_pid set to -1 (as with F_GETLK).
339*43a90889SApple OSS Distributions 	                                 */
340*43a90889SApple OSS Distributions 
341*43a90889SApple OSS Distributions /* See F_DUPFD_CLOEXEC below for 67 */
342*43a90889SApple OSS Distributions 
343*43a90889SApple OSS Distributions #ifdef PRIVATE
344*43a90889SApple OSS Distributions #define F_SETSTATICCONTENT              68              /*
345*43a90889SApple OSS Distributions 	                                                 * indicate to the filesystem/storage driver that the content to be
346*43a90889SApple OSS Distributions 	                                                 * written is usually static.  a nonzero value enables it, 0 disables it.
347*43a90889SApple OSS Distributions 	                                                 */
348*43a90889SApple OSS Distributions #define F_MOVEDATAEXTENTS       69              /* Swap only the data associated with two files */
349*43a90889SApple OSS Distributions #endif
350*43a90889SApple OSS Distributions 
351*43a90889SApple OSS Distributions #define F_SETBACKINGSTORE       70      /* Mark the file as being the backing store for another filesystem */
352*43a90889SApple OSS Distributions #define F_GETPATH_MTMINFO       71      /* return the full path of the FD, but error in specific mtmd circumstances */
353*43a90889SApple OSS Distributions 
354*43a90889SApple OSS Distributions #define F_GETCODEDIR            72      /* Returns the code directory, with associated hashes, to the caller */
355*43a90889SApple OSS Distributions 
356*43a90889SApple OSS Distributions #define F_SETNOSIGPIPE          73      /* No SIGPIPE generated on EPIPE */
357*43a90889SApple OSS Distributions #define F_GETNOSIGPIPE          74      /* Status of SIGPIPE for this fd */
358*43a90889SApple OSS Distributions 
359*43a90889SApple OSS Distributions #define F_TRANSCODEKEY          75      /* For some cases, we need to rewrap the key for AKS/MKB */
360*43a90889SApple OSS Distributions 
361*43a90889SApple OSS Distributions #define F_SINGLE_WRITER         76      /* file being written to a by single writer... if throttling enabled, writes */
362*43a90889SApple OSS Distributions                                         /* may be broken into smaller chunks with throttling in between */
363*43a90889SApple OSS Distributions 
364*43a90889SApple OSS Distributions #define F_GETPROTECTIONLEVEL    77      /* Get the protection version number for this filesystem */
365*43a90889SApple OSS Distributions 
366*43a90889SApple OSS Distributions #define F_FINDSIGS              78      /* Add detached code signatures (used by dyld for shared libs) */
367*43a90889SApple OSS Distributions 
368*43a90889SApple OSS Distributions #ifdef PRIVATE
369*43a90889SApple OSS Distributions #define F_GETDEFAULTPROTLEVEL   79 /* Get the default protection level for the filesystem */
370*43a90889SApple OSS Distributions #define F_MAKECOMPRESSED                80 /* Make the file compressed; truncate & toggle BSD bits */
371*43a90889SApple OSS Distributions #define F_SET_GREEDY_MODE               81      /*
372*43a90889SApple OSS Distributions 	                                         * indicate to the filesystem/storage driver that the content to be
373*43a90889SApple OSS Distributions 	                                         * written should be written in greedy mode for additional speed at
374*43a90889SApple OSS Distributions 	                                         * the cost of storage efficiency. A nonzero value enables it, 0 disables it.
375*43a90889SApple OSS Distributions 	                                         */
376*43a90889SApple OSS Distributions 
377*43a90889SApple OSS Distributions #define F_SETIOTYPE             82  /*
378*43a90889SApple OSS Distributions 	                             * Use parameters to describe content being written to the FD. See
379*43a90889SApple OSS Distributions 	                             * flag definitions below for argument bits.
380*43a90889SApple OSS Distributions 	                             */
381*43a90889SApple OSS Distributions #endif
382*43a90889SApple OSS Distributions 
383*43a90889SApple OSS Distributions #define F_ADDFILESIGS_FOR_DYLD_SIM 83   /* Add signature from same file, only if it is signed by Apple (used by dyld for simulator) */
384*43a90889SApple OSS Distributions 
385*43a90889SApple OSS Distributions #ifdef PRIVATE
386*43a90889SApple OSS Distributions #define F_RECYCLE                       84      /* Recycle vnode; debug/development builds only */
387*43a90889SApple OSS Distributions #endif
388*43a90889SApple OSS Distributions 
389*43a90889SApple OSS Distributions #define F_BARRIERFSYNC          85      /* fsync + issue barrier to drive */
390*43a90889SApple OSS Distributions 
391*43a90889SApple OSS Distributions #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
392*43a90889SApple OSS Distributions #define F_OFD_SETLK             90      /* Acquire or release open file description lock */
393*43a90889SApple OSS Distributions #define F_OFD_SETLKW            91      /* (as F_OFD_SETLK but blocking if conflicting lock) */
394*43a90889SApple OSS Distributions #define F_OFD_GETLK             92      /* Examine OFD lock */
395*43a90889SApple OSS Distributions 
396*43a90889SApple OSS Distributions #define F_OFD_SETLKWTIMEOUT     93      /* (as F_OFD_SETLKW but return if timeout) */
397*43a90889SApple OSS Distributions #endif
398*43a90889SApple OSS Distributions 
399*43a90889SApple OSS Distributions #ifdef PRIVATE
400*43a90889SApple OSS Distributions #define F_OFD_GETLKPID          94      /* get record locking information */
401*43a90889SApple OSS Distributions 
402*43a90889SApple OSS Distributions #define F_SETCONFINED           95      /* "confine" OFD to process */
403*43a90889SApple OSS Distributions #define F_GETCONFINED           96      /* is-fd-confined? */
404*43a90889SApple OSS Distributions #endif
405*43a90889SApple OSS Distributions 
406*43a90889SApple OSS Distributions #define F_ADDFILESIGS_RETURN    97      /* Add signature from same file, return end offset in structure on success */
407*43a90889SApple OSS Distributions #define F_CHECK_LV              98      /* Check if Library Validation allows this Mach-O file to be mapped into the calling process */
408*43a90889SApple OSS Distributions 
409*43a90889SApple OSS Distributions #define F_PUNCHHOLE     99              /* Deallocate a range of the file */
410*43a90889SApple OSS Distributions 
411*43a90889SApple OSS Distributions #define F_TRIM_ACTIVE_FILE      100     /* Trim an active file */
412*43a90889SApple OSS Distributions 
413*43a90889SApple OSS Distributions #define F_SPECULATIVE_READ      101     /* Asynchronous advisory read fcntl for regular and compressed file */
414*43a90889SApple OSS Distributions 
415*43a90889SApple OSS Distributions #define F_GETPATH_NOFIRMLINK    102     /* return the full path without firmlinks of the fd */
416*43a90889SApple OSS Distributions 
417*43a90889SApple OSS Distributions #define F_ADDFILESIGS_INFO      103     /* Add signature from same file, return information */
418*43a90889SApple OSS Distributions #define F_ADDFILESUPPL          104     /* Add supplemental signature from same file with fd reference to original */
419*43a90889SApple OSS Distributions #define F_GETSIGSINFO           105     /* Look up code signature information attached to a file or slice */
420*43a90889SApple OSS Distributions 
421*43a90889SApple OSS Distributions #define F_SETLEASE              106      /* Acquire or release lease */
422*43a90889SApple OSS Distributions #define F_GETLEASE              107      /* Retrieve lease information */
423*43a90889SApple OSS Distributions 
424*43a90889SApple OSS Distributions #define F_SETLEASE_ARG(t, oc)   ((t) | ((oc) << 2))
425*43a90889SApple OSS Distributions 
426*43a90889SApple OSS Distributions #ifdef PRIVATE
427*43a90889SApple OSS Distributions #define F_ASSERT_BG_ACCESS      108      /* Assert background access to a file */
428*43a90889SApple OSS Distributions #define F_RELEASE_BG_ACCESS     109      /* Release background access to a file */
429*43a90889SApple OSS Distributions #endif // PRIVATE
430*43a90889SApple OSS Distributions 
431*43a90889SApple OSS Distributions #define F_TRANSFEREXTENTS       110      /* Transfer allocated extents beyond leof to a different file */
432*43a90889SApple OSS Distributions 
433*43a90889SApple OSS Distributions #define F_ATTRIBUTION_TAG       111      /* Based on flags, query/set/delete a file's attribution tag */
434*43a90889SApple OSS Distributions #if PRIVATE
435*43a90889SApple OSS Distributions #define F_NOCACHE_EXT           112      /* turn data caching off/on for this fd and relax size and alignment restrictions for write */
436*43a90889SApple OSS Distributions #endif
437*43a90889SApple OSS Distributions 
438*43a90889SApple OSS Distributions #define F_ADDSIGS_MAIN_BINARY   113             /* add detached signatures for main binary -- development only */
439*43a90889SApple OSS Distributions 
440*43a90889SApple OSS Distributions // FS-specific fcntl()'s numbers begin at 0x00010000 and go up
441*43a90889SApple OSS Distributions #define FCNTL_FS_SPECIFIC_BASE  0x00010000
442*43a90889SApple OSS Distributions 
443*43a90889SApple OSS Distributions #endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
444*43a90889SApple OSS Distributions 
445*43a90889SApple OSS Distributions #if __DARWIN_C_LEVEL >= 200809L
446*43a90889SApple OSS Distributions #define F_DUPFD_CLOEXEC         67      /* mark the dup with FD_CLOEXEC */
447*43a90889SApple OSS Distributions #endif
448*43a90889SApple OSS Distributions 
449*43a90889SApple OSS Distributions /* file descriptor flags (F_GETFD, F_SETFD) */
450*43a90889SApple OSS Distributions #define FD_CLOEXEC      1               /* close-on-exec flag */
451*43a90889SApple OSS Distributions #if PRIVATE
452*43a90889SApple OSS Distributions #define FD_CLOFORK      2               /* close-on-fork flag */
453*43a90889SApple OSS Distributions #endif
454*43a90889SApple OSS Distributions 
455*43a90889SApple OSS Distributions /* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
456*43a90889SApple OSS Distributions #define F_RDLCK         1               /* shared or read lock */
457*43a90889SApple OSS Distributions #define F_UNLCK         2               /* unlock */
458*43a90889SApple OSS Distributions #define F_WRLCK         3               /* exclusive or write lock */
459*43a90889SApple OSS Distributions #ifdef KERNEL
460*43a90889SApple OSS Distributions #define F_WAIT          0x010           /* Wait until lock is granted */
461*43a90889SApple OSS Distributions #define F_FLOCK         0x020           /* Use flock(2) semantics for lock */
462*43a90889SApple OSS Distributions #define F_POSIX         0x040           /* Use POSIX semantics for lock */
463*43a90889SApple OSS Distributions #define F_PROV          0x080           /* Non-coalesced provisional lock */
464*43a90889SApple OSS Distributions #define F_WAKE1_SAFE    0x100           /* its safe to only wake one waiter */
465*43a90889SApple OSS Distributions #define F_ABORT         0x200           /* lock attempt aborted (force umount) */
466*43a90889SApple OSS Distributions #define F_OFD_LOCK      0x400           /* Use "OFD" semantics for lock */
467*43a90889SApple OSS Distributions #define F_TRANSFER      0x800           /* Transfer the lock to new proc */
468*43a90889SApple OSS Distributions #define F_CONFINED      0x1000          /* fileglob cannot leave curproc */
469*43a90889SApple OSS Distributions #endif
470*43a90889SApple OSS Distributions 
471*43a90889SApple OSS Distributions #if PRIVATE
472*43a90889SApple OSS Distributions /*
473*43a90889SApple OSS Distributions  * ISOCHRONOUS attempts to sustain a minimum platform-dependent throughput
474*43a90889SApple OSS Distributions  * for the duration of the I/O delivered to the driver.
475*43a90889SApple OSS Distributions  */
476*43a90889SApple OSS Distributions #define F_IOTYPE_ISOCHRONOUS 0x0001
477*43a90889SApple OSS Distributions #endif
478*43a90889SApple OSS Distributions 
479*43a90889SApple OSS Distributions /*
480*43a90889SApple OSS Distributions  * [XSI] The values used for l_whence shall be defined as described
481*43a90889SApple OSS Distributions  * in <unistd.h>
482*43a90889SApple OSS Distributions  */
483*43a90889SApple OSS Distributions #include <sys/_types/_seek_set.h>
484*43a90889SApple OSS Distributions 
485*43a90889SApple OSS Distributions /*
486*43a90889SApple OSS Distributions  * [XSI] The symbolic names for file modes for use as values of mode_t
487*43a90889SApple OSS Distributions  * shall be defined as described in <sys/stat.h>
488*43a90889SApple OSS Distributions  */
489*43a90889SApple OSS Distributions #include <sys/_types/_s_ifmt.h>
490*43a90889SApple OSS Distributions 
491*43a90889SApple OSS Distributions #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
492*43a90889SApple OSS Distributions /* allocate flags (F_PREALLOCATE) */
493*43a90889SApple OSS Distributions 
494*43a90889SApple OSS Distributions #define F_ALLOCATECONTIG  0x00000002    /* allocate contigious space */
495*43a90889SApple OSS Distributions #define F_ALLOCATEALL     0x00000004    /* allocate all requested space or no space at all */
496*43a90889SApple OSS Distributions #define F_ALLOCATEPERSIST 0x00000008    /* do not free space upon close(2) */
497*43a90889SApple OSS Distributions 
498*43a90889SApple OSS Distributions /* Position Modes (fst_posmode) for F_PREALLOCATE */
499*43a90889SApple OSS Distributions 
500*43a90889SApple OSS Distributions #define F_PEOFPOSMODE 3                 /* Make it past all of the SEEK pos modes so that */
501*43a90889SApple OSS Distributions                                         /* we can keep them in sync should we desire */
502*43a90889SApple OSS Distributions #define F_VOLPOSMODE    4               /* specify volume starting postion */
503*43a90889SApple OSS Distributions #endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
504*43a90889SApple OSS Distributions 
505*43a90889SApple OSS Distributions /*
506*43a90889SApple OSS Distributions  * Advisory file segment locking data type -
507*43a90889SApple OSS Distributions  * information passed to system by user
508*43a90889SApple OSS Distributions  */
509*43a90889SApple OSS Distributions struct flock {
510*43a90889SApple OSS Distributions 	off_t   l_start;        /* starting offset */
511*43a90889SApple OSS Distributions 	off_t   l_len;          /* len = 0 means until end of file */
512*43a90889SApple OSS Distributions 	pid_t   l_pid;          /* lock owner */
513*43a90889SApple OSS Distributions 	short   l_type;         /* lock type: read/write, etc. */
514*43a90889SApple OSS Distributions 	short   l_whence;       /* type of l_start */
515*43a90889SApple OSS Distributions };
516*43a90889SApple OSS Distributions 
517*43a90889SApple OSS Distributions #include <sys/_types/_timespec.h>
518*43a90889SApple OSS Distributions 
519*43a90889SApple OSS Distributions #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
520*43a90889SApple OSS Distributions /*
521*43a90889SApple OSS Distributions  * Advisory file segment locking with time out -
522*43a90889SApple OSS Distributions  * Information passed to system by user for F_SETLKWTIMEOUT
523*43a90889SApple OSS Distributions  */
524*43a90889SApple OSS Distributions struct flocktimeout {
525*43a90889SApple OSS Distributions 	struct flock    fl;             /* flock passed for file locking */
526*43a90889SApple OSS Distributions 	struct timespec timeout;        /* timespec struct for timeout */
527*43a90889SApple OSS Distributions };
528*43a90889SApple OSS Distributions #endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
529*43a90889SApple OSS Distributions 
530*43a90889SApple OSS Distributions #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
531*43a90889SApple OSS Distributions /*
532*43a90889SApple OSS Distributions  * advisory file read data type -
533*43a90889SApple OSS Distributions  * information passed by user to system
534*43a90889SApple OSS Distributions  */
535*43a90889SApple OSS Distributions 
536*43a90889SApple OSS Distributions #ifdef KERNEL
537*43a90889SApple OSS Distributions #pragma pack(4) /* prevent structure padding in kernel */
538*43a90889SApple OSS Distributions #endif /* KERNEL */
539*43a90889SApple OSS Distributions 
540*43a90889SApple OSS Distributions struct radvisory {
541*43a90889SApple OSS Distributions 	off_t   ra_offset;
542*43a90889SApple OSS Distributions 	int     ra_count;
543*43a90889SApple OSS Distributions };
544*43a90889SApple OSS Distributions 
545*43a90889SApple OSS Distributions #ifdef KERNEL
546*43a90889SApple OSS Distributions #pragma pack()
547*43a90889SApple OSS Distributions #endif /* KERNEL */
548*43a90889SApple OSS Distributions 
549*43a90889SApple OSS Distributions /*
550*43a90889SApple OSS Distributions  * detached code signatures data type -
551*43a90889SApple OSS Distributions  * information passed by user to system used by F_ADDSIGS and F_ADDFILESIGS.
552*43a90889SApple OSS Distributions  * F_ADDFILESIGS is a shortcut for files that contain their own signature and
553*43a90889SApple OSS Distributions  * doesn't require mapping of the file in order to load the signature.
554*43a90889SApple OSS Distributions  */
555*43a90889SApple OSS Distributions #define USER_FSIGNATURES_CDHASH_LEN 20
556*43a90889SApple OSS Distributions typedef struct fsignatures {
557*43a90889SApple OSS Distributions 	off_t           fs_file_start;
558*43a90889SApple OSS Distributions 	void            *fs_blob_start;
559*43a90889SApple OSS Distributions 	size_t          fs_blob_size;
560*43a90889SApple OSS Distributions 
561*43a90889SApple OSS Distributions 	/* The following fields are only applicable to F_ADDFILESIGS_INFO (64bit only). */
562*43a90889SApple OSS Distributions 	/* Prior to F_ADDFILESIGS_INFO, this struct ended after fs_blob_size. */
563*43a90889SApple OSS Distributions 	size_t          fs_fsignatures_size;// input: size of this struct (for compatibility)
564*43a90889SApple OSS Distributions 	char            fs_cdhash[USER_FSIGNATURES_CDHASH_LEN];     // output: cdhash
565*43a90889SApple OSS Distributions 	int             fs_hash_type;// output: hash algorithm type for cdhash
566*43a90889SApple OSS Distributions } fsignatures_t;
567*43a90889SApple OSS Distributions #ifdef KERNEL
568*43a90889SApple OSS Distributions /* LP64 version of fsignatures.  all pointers
569*43a90889SApple OSS Distributions  * grow when we're dealing with a 64-bit process.
570*43a90889SApple OSS Distributions  * WARNING - keep in sync with fsignatures
571*43a90889SApple OSS Distributions  */
572*43a90889SApple OSS Distributions 
573*43a90889SApple OSS Distributions typedef struct user32_fsignatures {
574*43a90889SApple OSS Distributions 	off_t           fs_file_start;
575*43a90889SApple OSS Distributions 	user32_addr_t   fs_blob_start;
576*43a90889SApple OSS Distributions 	user32_size_t   fs_blob_size;
577*43a90889SApple OSS Distributions } user32_fsignatures_t;
578*43a90889SApple OSS Distributions 
579*43a90889SApple OSS Distributions typedef struct user_fsignatures {
580*43a90889SApple OSS Distributions 	off_t           fs_file_start;  /* offset of Mach-O image in FAT file */
581*43a90889SApple OSS Distributions 	user_addr_t     fs_blob_start;  /* F_ADDSIGS: mem address of signature*/
582*43a90889SApple OSS Distributions 	                                /* F_ADDFILESIGS: offset of signature */
583*43a90889SApple OSS Distributions 	                                /*                in Mach-O image     */
584*43a90889SApple OSS Distributions 	user_size_t     fs_blob_size;   /* size of signature blob             */
585*43a90889SApple OSS Distributions 
586*43a90889SApple OSS Distributions 	/* The following fields are only applicable to F_ADDFILESIGS_INFO. */
587*43a90889SApple OSS Distributions 	/* Prior to F_ADDFILESIGS_INFO, this struct ended after fs_blob_size. */
588*43a90889SApple OSS Distributions 	user_size_t     fs_fsignatures_size;// input: size of this struct (for compatibility)
589*43a90889SApple OSS Distributions 	char            fs_cdhash[USER_FSIGNATURES_CDHASH_LEN];     // output: cdhash
590*43a90889SApple OSS Distributions 	int             fs_hash_type;//output: hash algorithm type for cdhash
591*43a90889SApple OSS Distributions } user_fsignatures_t;
592*43a90889SApple OSS Distributions #endif /* KERNEL */
593*43a90889SApple OSS Distributions 
594*43a90889SApple OSS Distributions typedef struct fsupplement {
595*43a90889SApple OSS Distributions 	off_t           fs_file_start;   /* offset of Mach-O image in FAT file  */
596*43a90889SApple OSS Distributions 	off_t           fs_blob_start;   /* offset of signature in Mach-O image */
597*43a90889SApple OSS Distributions 	size_t          fs_blob_size;    /* signature blob size                 */
598*43a90889SApple OSS Distributions 	int             fs_orig_fd;      /* address of original image           */
599*43a90889SApple OSS Distributions } fsupplement_t;
600*43a90889SApple OSS Distributions 
601*43a90889SApple OSS Distributions #ifdef KERNEL
602*43a90889SApple OSS Distributions /* LP64 version of fsupplement.
603*43a90889SApple OSS Distributions  * Supplements are not supported for 32 bit.
604*43a90889SApple OSS Distributions  * WARNING - keep in sync with fsupplement.
605*43a90889SApple OSS Distributions  */
606*43a90889SApple OSS Distributions 
607*43a90889SApple OSS Distributions typedef struct user_fsupplement {
608*43a90889SApple OSS Distributions 	off_t           fs_file_start;   /* offset of Mach-O image in FAT file  */
609*43a90889SApple OSS Distributions 	off_t           fs_blob_start;   /* offset of signature in Mach-O image */
610*43a90889SApple OSS Distributions 	size_t          fs_blob_size;    /* signature blob size                 */
611*43a90889SApple OSS Distributions 	int             fs_orig_fd;      /* file descriptor to original image   */
612*43a90889SApple OSS Distributions } user_fsupplement_t;
613*43a90889SApple OSS Distributions #endif /* KERNEL */
614*43a90889SApple OSS Distributions 
615*43a90889SApple OSS Distributions 
616*43a90889SApple OSS Distributions /*
617*43a90889SApple OSS Distributions  * DYLD needs to check if the object is allowed to be combined
618*43a90889SApple OSS Distributions  * into the main binary. This is done between the code signature
619*43a90889SApple OSS Distributions  * is loaded and dyld is doing all the work to process the LOAD commands.
620*43a90889SApple OSS Distributions  *
621*43a90889SApple OSS Distributions  * While this could be done in F_ADDFILESIGS.* family the hook into
622*43a90889SApple OSS Distributions  * the MAC module doesn't say no when LV isn't enabled and then that
623*43a90889SApple OSS Distributions  * is cached on the vnode, and the MAC module never gets change once
624*43a90889SApple OSS Distributions  * a process that library validation enabled.
625*43a90889SApple OSS Distributions  */
626*43a90889SApple OSS Distributions typedef struct fchecklv {
627*43a90889SApple OSS Distributions 	off_t           lv_file_start;
628*43a90889SApple OSS Distributions 	size_t          lv_error_message_size;
629*43a90889SApple OSS Distributions 	void            *lv_error_message;
630*43a90889SApple OSS Distributions } fchecklv_t;
631*43a90889SApple OSS Distributions 
632*43a90889SApple OSS Distributions #ifdef KERNEL
633*43a90889SApple OSS Distributions /* LP64 version of fchecklv.  all pointers
634*43a90889SApple OSS Distributions  * grow when we're dealing with a 64-bit process.
635*43a90889SApple OSS Distributions  * WARNING - keep in sync with fsignatures
636*43a90889SApple OSS Distributions  */
637*43a90889SApple OSS Distributions 
638*43a90889SApple OSS Distributions typedef struct user32_fchecklv {
639*43a90889SApple OSS Distributions 	user32_off_t    lv_file_start;
640*43a90889SApple OSS Distributions 	user32_size_t   lv_error_message_size;
641*43a90889SApple OSS Distributions 	user32_addr_t   lv_error_message;
642*43a90889SApple OSS Distributions } user32_fchecklv_t;
643*43a90889SApple OSS Distributions 
644*43a90889SApple OSS Distributions typedef struct user_fchecklv {
645*43a90889SApple OSS Distributions 	off_t           lv_file_start;
646*43a90889SApple OSS Distributions 	user_size_t     lv_error_message_size;
647*43a90889SApple OSS Distributions 	user_addr_t     lv_error_message;
648*43a90889SApple OSS Distributions } user_fchecklv_t;
649*43a90889SApple OSS Distributions 
650*43a90889SApple OSS Distributions #endif /* KERNEL */
651*43a90889SApple OSS Distributions 
652*43a90889SApple OSS Distributions /* At this time F_GETSIGSINFO can only indicate platformness.
653*43a90889SApple OSS Distributions  *  As additional requestable information is defined, new keys will be added and the
654*43a90889SApple OSS Distributions  *  fgetsigsinfo_t structure will be lengthened to add space for the additional information
655*43a90889SApple OSS Distributions  */
656*43a90889SApple OSS Distributions #define GETSIGSINFO_PLATFORM_BINARY 1
657*43a90889SApple OSS Distributions 
658*43a90889SApple OSS Distributions /* fgetsigsinfo_t used by F_GETSIGSINFO command */
659*43a90889SApple OSS Distributions typedef struct fgetsigsinfo {
660*43a90889SApple OSS Distributions 	off_t fg_file_start; /* IN: Offset in the file to look for a signature, -1 for any signature */
661*43a90889SApple OSS Distributions 	int   fg_info_request; /* IN: Key indicating the info requested */
662*43a90889SApple OSS Distributions 	int   fg_sig_is_platform; /* OUT: 1 if the signature is a plat form binary, 0 if not */
663*43a90889SApple OSS Distributions } fgetsigsinfo_t;
664*43a90889SApple OSS Distributions 
665*43a90889SApple OSS Distributions 
666*43a90889SApple OSS Distributions /* lock operations for flock(2) */
667*43a90889SApple OSS Distributions #define LOCK_SH         0x01            /* shared file lock */
668*43a90889SApple OSS Distributions #define LOCK_EX         0x02            /* exclusive file lock */
669*43a90889SApple OSS Distributions #define LOCK_NB         0x04            /* don't block when locking */
670*43a90889SApple OSS Distributions #define LOCK_UN         0x08            /* unlock file */
671*43a90889SApple OSS Distributions 
672*43a90889SApple OSS Distributions /* fstore_t type used by F_PREALLOCATE command */
673*43a90889SApple OSS Distributions 
674*43a90889SApple OSS Distributions typedef struct fstore {
675*43a90889SApple OSS Distributions 	unsigned int fst_flags; /* IN: flags word */
676*43a90889SApple OSS Distributions 	int     fst_posmode;    /* IN: indicates use of offset field */
677*43a90889SApple OSS Distributions 	off_t   fst_offset;     /* IN: start of the region */
678*43a90889SApple OSS Distributions 	off_t   fst_length;     /* IN: size of the region */
679*43a90889SApple OSS Distributions 	off_t   fst_bytesalloc; /* OUT: number of bytes allocated */
680*43a90889SApple OSS Distributions } fstore_t;
681*43a90889SApple OSS Distributions 
682*43a90889SApple OSS Distributions /* fpunchhole_t used by F_PUNCHHOLE */
683*43a90889SApple OSS Distributions typedef struct fpunchhole {
684*43a90889SApple OSS Distributions 	unsigned int fp_flags; /* unused */
685*43a90889SApple OSS Distributions 	unsigned int reserved; /* (to maintain 8-byte alignment) */
686*43a90889SApple OSS Distributions 	off_t fp_offset; /* IN: start of the region */
687*43a90889SApple OSS Distributions 	off_t fp_length; /* IN: size of the region */
688*43a90889SApple OSS Distributions } fpunchhole_t;
689*43a90889SApple OSS Distributions 
690*43a90889SApple OSS Distributions /* factive_file_trim_t used by F_TRIM_ACTIVE_FILE */
691*43a90889SApple OSS Distributions typedef struct ftrimactivefile {
692*43a90889SApple OSS Distributions 	off_t fta_offset;  /* IN: start of the region */
693*43a90889SApple OSS Distributions 	off_t fta_length; /* IN: size of the region */
694*43a90889SApple OSS Distributions } ftrimactivefile_t;
695*43a90889SApple OSS Distributions 
696*43a90889SApple OSS Distributions /* fspecread_t used by F_SPECULATIVE_READ */
697*43a90889SApple OSS Distributions typedef struct fspecread {
698*43a90889SApple OSS Distributions 	unsigned int fsr_flags;  /* IN: flags word */
699*43a90889SApple OSS Distributions 	unsigned int reserved;   /* to maintain 8-byte alignment */
700*43a90889SApple OSS Distributions 	off_t fsr_offset;        /* IN: start of the region */
701*43a90889SApple OSS Distributions 	off_t fsr_length;        /* IN: size of the region */
702*43a90889SApple OSS Distributions } fspecread_t;
703*43a90889SApple OSS Distributions 
704*43a90889SApple OSS Distributions #ifdef PRIVATE
705*43a90889SApple OSS Distributions /* fassertbgaccess_t used by F_ASSERT_BG_ACCESS */
706*43a90889SApple OSS Distributions typedef struct fassertbgaccess {
707*43a90889SApple OSS Distributions 	unsigned int       fbga_flags;   /* unused */
708*43a90889SApple OSS Distributions 	unsigned int       reserved;     /* (to maintain 8-byte alignment) */
709*43a90889SApple OSS Distributions 	unsigned long long ttl;          /* IN: time to live for the assertion (nanoseconds; continuous) */
710*43a90889SApple OSS Distributions } fassertbgaccess_t;
711*43a90889SApple OSS Distributions #endif // PRIVATE
712*43a90889SApple OSS Distributions 
713*43a90889SApple OSS Distributions /* fattributiontag_t used by F_ATTRIBUTION_TAG */
714*43a90889SApple OSS Distributions #define ATTRIBUTION_NAME_MAX 255
715*43a90889SApple OSS Distributions typedef struct fattributiontag {
716*43a90889SApple OSS Distributions 	unsigned int ft_flags;  /* IN: flags word */
717*43a90889SApple OSS Distributions 	unsigned long long ft_hash; /* OUT: hash of attribution tag name */
718*43a90889SApple OSS Distributions 	char ft_attribution_name[ATTRIBUTION_NAME_MAX]; /* IN/OUT: attribution tag name associated with the file */
719*43a90889SApple OSS Distributions } fattributiontag_t;
720*43a90889SApple OSS Distributions 
721*43a90889SApple OSS Distributions /* ft_flags (F_ATTRIBUTION_TAG)*/
722*43a90889SApple OSS Distributions #define F_CREATE_TAG  0x00000001
723*43a90889SApple OSS Distributions #define F_DELETE_TAG  0x00000002
724*43a90889SApple OSS Distributions #define F_QUERY_TAG   0x00000004
725*43a90889SApple OSS Distributions 
726*43a90889SApple OSS Distributions /*
727*43a90889SApple OSS Distributions  * For F_LOG2PHYS this information is passed back to user
728*43a90889SApple OSS Distributions  * Currently only devoffset is returned - that is the VOP_BMAP
729*43a90889SApple OSS Distributions  * result - the disk device address corresponding to the
730*43a90889SApple OSS Distributions  * current file offset (likely set with an lseek).
731*43a90889SApple OSS Distributions  *
732*43a90889SApple OSS Distributions  * The flags could hold an indication of whether the # of
733*43a90889SApple OSS Distributions  * contiguous bytes reflects the true extent length on disk,
734*43a90889SApple OSS Distributions  * or is an advisory value that indicates there is at least that
735*43a90889SApple OSS Distributions  * many bytes contiguous.  For some filesystems it might be too
736*43a90889SApple OSS Distributions  * inefficient to provide anything beyond the advisory value.
737*43a90889SApple OSS Distributions  * Flags and contiguous bytes return values are not yet implemented.
738*43a90889SApple OSS Distributions  * For them the fcntl will nedd to switch from using BMAP to CMAP
739*43a90889SApple OSS Distributions  * and a per filesystem type flag will be needed to interpret the
740*43a90889SApple OSS Distributions  * contiguous bytes count result from CMAP.
741*43a90889SApple OSS Distributions  *
742*43a90889SApple OSS Distributions  * F_LOG2PHYS_EXT is a variant of F_LOG2PHYS that uses a passed in
743*43a90889SApple OSS Distributions  * file offset and length instead of the current file offset.
744*43a90889SApple OSS Distributions  * F_LOG2PHYS_EXT operates on the same structure as F_LOG2PHYS, but
745*43a90889SApple OSS Distributions  * treats it as an in/out.
746*43a90889SApple OSS Distributions  */
747*43a90889SApple OSS Distributions #pragma pack(4)
748*43a90889SApple OSS Distributions 
749*43a90889SApple OSS Distributions struct log2phys {
750*43a90889SApple OSS Distributions 	unsigned int    l2p_flags;       /* unused so far */
751*43a90889SApple OSS Distributions 	off_t           l2p_contigbytes; /* F_LOG2PHYS:     unused so far */
752*43a90889SApple OSS Distributions 	                                 /* F_LOG2PHYS_EXT: IN:  number of bytes to be queried */
753*43a90889SApple OSS Distributions 	                                 /*                 OUT: number of contiguous bytes at this position */
754*43a90889SApple OSS Distributions 	off_t           l2p_devoffset;   /* F_LOG2PHYS:     OUT: bytes into device */
755*43a90889SApple OSS Distributions 	                                 /* F_LOG2PHYS_EXT: IN:  bytes into file */
756*43a90889SApple OSS Distributions 	                                 /*                 OUT: bytes into device */
757*43a90889SApple OSS Distributions };
758*43a90889SApple OSS Distributions 
759*43a90889SApple OSS Distributions #pragma pack()
760*43a90889SApple OSS Distributions 
761*43a90889SApple OSS Distributions #define O_POPUP    0x80000000   /* force window to popup on open */
762*43a90889SApple OSS Distributions #define O_ALERT    0x20000000   /* small, clean popup window */
763*43a90889SApple OSS Distributions 
764*43a90889SApple OSS Distributions #ifdef PRIVATE
765*43a90889SApple OSS Distributions /*
766*43a90889SApple OSS Distributions  * SPI: Argument data for F_OPENFROM
767*43a90889SApple OSS Distributions  */
768*43a90889SApple OSS Distributions struct fopenfrom {
769*43a90889SApple OSS Distributions 	unsigned int    o_flags;        /* same as open(2) */
770*43a90889SApple OSS Distributions 	mode_t          o_mode;         /* same as open(2) */
771*43a90889SApple OSS Distributions 	char *          o_pathname;     /* relative pathname */
772*43a90889SApple OSS Distributions };
773*43a90889SApple OSS Distributions 
774*43a90889SApple OSS Distributions #ifdef KERNEL
775*43a90889SApple OSS Distributions /*
776*43a90889SApple OSS Distributions  * LP64 version of fopenfrom.  Memory pointers
777*43a90889SApple OSS Distributions  * grow when we're dealing with a 64-bit process.
778*43a90889SApple OSS Distributions  *
779*43a90889SApple OSS Distributions  * WARNING - keep in sync with fopenfrom (above)
780*43a90889SApple OSS Distributions  */
781*43a90889SApple OSS Distributions struct user32_fopenfrom {
782*43a90889SApple OSS Distributions 	unsigned int    o_flags;
783*43a90889SApple OSS Distributions 	mode_t          o_mode;
784*43a90889SApple OSS Distributions 	user32_addr_t   o_pathname;
785*43a90889SApple OSS Distributions };
786*43a90889SApple OSS Distributions 
787*43a90889SApple OSS Distributions struct user_fopenfrom {
788*43a90889SApple OSS Distributions 	unsigned int    o_flags;
789*43a90889SApple OSS Distributions 	mode_t          o_mode;
790*43a90889SApple OSS Distributions 	user_addr_t     o_pathname;
791*43a90889SApple OSS Distributions };
792*43a90889SApple OSS Distributions #endif /* KERNEL */
793*43a90889SApple OSS Distributions 
794*43a90889SApple OSS Distributions #endif /* PRIVATE */
795*43a90889SApple OSS Distributions 
796*43a90889SApple OSS Distributions #endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
797*43a90889SApple OSS Distributions 
798*43a90889SApple OSS Distributions #ifndef KERNEL
799*43a90889SApple OSS Distributions 
800*43a90889SApple OSS Distributions #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
801*43a90889SApple OSS Distributions 
802*43a90889SApple OSS Distributions #include <sys/_types/_filesec_t.h>
803*43a90889SApple OSS Distributions 
804*43a90889SApple OSS Distributions typedef enum {
805*43a90889SApple OSS Distributions 	FILESEC_OWNER = 1,
806*43a90889SApple OSS Distributions 	FILESEC_GROUP = 2,
807*43a90889SApple OSS Distributions 	FILESEC_UUID = 3,
808*43a90889SApple OSS Distributions 	FILESEC_MODE = 4,
809*43a90889SApple OSS Distributions 	FILESEC_ACL = 5,
810*43a90889SApple OSS Distributions 	FILESEC_GRPUUID = 6,
811*43a90889SApple OSS Distributions 
812*43a90889SApple OSS Distributions /* XXX these are private to the implementation */
813*43a90889SApple OSS Distributions 	FILESEC_ACL_RAW = 100,
814*43a90889SApple OSS Distributions 	FILESEC_ACL_ALLOCSIZE = 101
815*43a90889SApple OSS Distributions } filesec_property_t;
816*43a90889SApple OSS Distributions 
817*43a90889SApple OSS Distributions /* XXX backwards compatibility */
818*43a90889SApple OSS Distributions #define FILESEC_GUID FILESEC_UUID
819*43a90889SApple OSS Distributions #endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
820*43a90889SApple OSS Distributions 
821*43a90889SApple OSS Distributions __BEGIN_DECLS
822*43a90889SApple OSS Distributions int     open(const char *, int, ...) __DARWIN_ALIAS_C(open);
823*43a90889SApple OSS Distributions #if __DARWIN_C_LEVEL >= 200809L
824*43a90889SApple OSS Distributions int     openat(int, const char *, int, ...) __DARWIN_NOCANCEL(openat) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0);
825*43a90889SApple OSS Distributions #endif
826*43a90889SApple OSS Distributions int     creat(const char *, mode_t) __DARWIN_ALIAS_C(creat);
827*43a90889SApple OSS Distributions int     fcntl(int, int, ...) __DARWIN_ALIAS_C(fcntl);
828*43a90889SApple OSS Distributions #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
829*43a90889SApple OSS Distributions 
830*43a90889SApple OSS Distributions #ifdef PRIVATE
831*43a90889SApple OSS Distributions /*
832*43a90889SApple OSS Distributions  * These definitions are retained temporarily for compatibility.
833*43a90889SApple OSS Distributions  * If you want to use fileports, please use
834*43a90889SApple OSS Distributions  *	#include <sys/fileport.h>
835*43a90889SApple OSS Distributions  * or
836*43a90889SApple OSS Distributions  *	#include <System/sys/fileport.h>
837*43a90889SApple OSS Distributions  */
838*43a90889SApple OSS Distributions #ifndef _FILEPORT_T
839*43a90889SApple OSS Distributions #define _FILEPORT_T
840*43a90889SApple OSS Distributions typedef __darwin_mach_port_t fileport_t;
841*43a90889SApple OSS Distributions #define FILEPORT_NULL ((fileport_t)0)
842*43a90889SApple OSS Distributions #endif /* _FILEPORT_T */
843*43a90889SApple OSS Distributions 
844*43a90889SApple OSS Distributions int     fileport_makeport(int, fileport_t*);
845*43a90889SApple OSS Distributions int     fileport_makefd(fileport_t);
846*43a90889SApple OSS Distributions #endif /* PRIVATE */
847*43a90889SApple OSS Distributions int     openx_np(const char *, int, filesec_t);
848*43a90889SApple OSS Distributions /*
849*43a90889SApple OSS Distributions  * data-protected non-portable open(2) :
850*43a90889SApple OSS Distributions  *  int open_dprotected_np(user_addr_t path, int flags, int class, int dpflags, int mode)
851*43a90889SApple OSS Distributions  */
852*43a90889SApple OSS Distributions int open_dprotected_np( const char *, int, int, int, ...);
853*43a90889SApple OSS Distributions int openat_dprotected_np( int, const char *, int, int, int, ...);
854*43a90889SApple OSS Distributions int openat_authenticated_np(int, const char *, int, int);
855*43a90889SApple OSS Distributions int     flock(int, int);
856*43a90889SApple OSS Distributions filesec_t filesec_init(void);
857*43a90889SApple OSS Distributions filesec_t filesec_dup(filesec_t);
858*43a90889SApple OSS Distributions void    filesec_free(filesec_t);
859*43a90889SApple OSS Distributions int     filesec_get_property(filesec_t, filesec_property_t, void *);
860*43a90889SApple OSS Distributions int     filesec_query_property(filesec_t, filesec_property_t, int *);
861*43a90889SApple OSS Distributions int     filesec_set_property(filesec_t, filesec_property_t, const void *);
862*43a90889SApple OSS Distributions int     filesec_unset_property(filesec_t, filesec_property_t) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2);
863*43a90889SApple OSS Distributions #define _FILESEC_UNSET_PROPERTY ((void *)0)
864*43a90889SApple OSS Distributions #define _FILESEC_REMOVE_ACL     ((void *)1)
865*43a90889SApple OSS Distributions #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
866*43a90889SApple OSS Distributions __END_DECLS
867*43a90889SApple OSS Distributions #endif
868*43a90889SApple OSS Distributions 
869*43a90889SApple OSS Distributions #endif /* !_SYS_FCNTL_H_ */
870