Add FNDELAY and FFSYNC to bits/fcntl.h
[kopensolaris-gnu/glibc.git] / sysdeps / unix / sysv / solaris2 / kopensolaris-gnu / bits / fcntl.h
1 /* O_*, F_*, FD_* bit values for OpenSolaris.
2    Copyright (C) 2001, 2002, 2004, 2006, 2007, 2008
3     Free Software Foundation, Inc.
4    This file is part of the GNU C Library.
5
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with the GNU C Library; if not, write to the Free
18    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19    02111-1307 USA.  */
20
21 #ifndef _FCNTL_H
22 # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
23 #endif
24
25 #include <sys/types.h>
26 #include <bits/wordsize.h>
27 #ifdef __USE_GNU
28 # include <bits/uio.h>
29 #endif
30
31
32 /* open/fcntl */
33 #define O_RDONLY        0
34 #define O_WRONLY        1
35 #define O_RDWR          2
36 #define O_ACCMODE       3
37 #define O_NDELAY        0x04
38 #define O_APPEND        0x08
39 #define O_SYNC          0x10
40 #define O_NONBLOCK      0x80
41 #define O_CREAT         0x100
42 #define O_TRUNC         0x200
43 #define O_EXCL          0x400
44 #define O_NOCTTY        0x800
45 #define O_PRIV          0x1000
46 #define O_XATTR         0x4000
47 #define O_NOFOLLOW      0x20000
48 #define O_NOLINKS       0x40000
49
50 #if defined __USE_POSIX199309 || defined __USE_UNIX98
51 # define O_DSYNC    0x40  /* Synchronize data.  */
52 # define O_RSYNC    0x8000  /* Synchronize read operations.  */
53 #endif
54 #define O_FSYNC         O_SYNC
55
56 #ifdef __USE_GNU
57 #define O_DIRECT        0x1000000
58 #define O_DIRECTORY     0x2000000
59 #endif
60
61 #ifdef __USE_LARGEFILE64
62 # if __WORDSIZE == 64
63 #  define O_LARGEFILE   0
64 # else
65 #  define O_LARGEFILE   0x2000
66 # endif
67 #endif
68
69 /* Values for the second argument to `fcntl'.  */
70 #define F_DUPFD         0       /* Duplicate file descriptor.  */
71 #define F_GETFD         1       /* Get file descriptor flags.  */
72 #define F_SETFD         2       /* Set file descriptor flags.  */
73 #define F_GETFL         3       /* Get file status flags.  */
74 #define F_SETFL         4       /* Set file status flags.  */
75 #if __WORDSIZE == 64
76 # define F_GETLK        14      /* Get record locking info.  */
77 # define F_SETLK        6       /* Set record locking info (non-blocking).  */
78 # define F_SETLKW       7       /* Set record locking info (blocking).  */
79 # define F_ALLOCSP      10      /* Allocate file space.  */
80 # define F_FREESP       11      /* Free file space.  */
81 # define F_SETLK_NBMAND 42      /* Private.  */
82 /* Not necessary, we always have 64-bit offsets.  */
83 # define F_GETLK64      F_GETLK /* Get record locking info.  */
84 # define F_SETLK64      F_SETLK /* Set record locking info (non-blocking).  */
85 # define F_SETLKW64     F_SETLKW        /* Set record locking info (blocking).  */
86 # define F_ALLOCSP64    F_ALLOCSP       /* Allocate file space.  */
87 # define F_FREESP64     F_FREESP        /* Free file space.  */
88 # define F_SETLK6464_NBMAND     F_SETLK64_NBMAND        /* Private.  */
89 #else
90 # ifndef __USE_FILE_OFFSET64
91 #  define F_GETLK       14      /* Get record locking info.  */
92 #  define F_SETLK       6       /* Set record locking info (non-blocking).  */
93 #  define F_SETLKW      7       /* Set record locking info (blocking).  */
94 #  define F_ALLOCSP     10      /* Allocate file space.  */
95 #  define F_FREESP      11      /* Free file space.  */
96 #  define F_SETLK_NBMAND        42      /* Private.  */
97 # else
98 #  define F_GETLK       F_GETLK64       /* Get record locking info.  */
99 #  define F_SETLK       F_SETLK64       /* Set record locking info (non-blocking).*/
100 #  define F_SETLKW      F_SETLKW64      /* Set record locking info (blocking).  */
101 #  define F_ALLOCSP     F_ALLOCSP64     /* Allocate file space.  */
102 #  define F_FREESP      F_FREESP64      /* Free file space.  */
103 #  define F_SETLK_NBMAND        F_SETLK_NBMAND64        /* Private.  */
104 # endif
105 # define F_GETLK64      33      /* Get record locking info.  */
106 # define F_SETLK64      34      /* Set record locking info (non-blocking).  */
107 # define F_SETLKW64     35      /* Set record locking info (blocking).  */
108 # define F_ALLOCSP64    28      /* Allocate file space.  */
109 # define F_FREESP64     27      /* Free file space.  */
110 # define F_SETLK6464_NBMAND     44      /* Private.  */
111 #endif
112
113 /* OpenSolaris-specific */
114 #define F_GETXFL        45
115 #define F_CHKFL         8
116 #define F_DUP2FD        9
117 #define F_ISSTREAM      13
118 #define F_PRIV          15
119 #define F_NPRIV         16
120 #define F_QUOTACTL      17
121 #define F_BLOCKS        18
122 #define F_BLKSIZE       19
123 #define F_GETOWN        23
124 #define F_SETOWN        24
125 #define F_REVOKE        25
126 #define F_HASREMOTELOCKS        26
127
128 #define F_SHARE         40
129 #define F_UNSHARE       41
130 #define F_SHARE_NBMAND  43
131
132 typedef struct fshare
133 {
134     short f_access;
135         short f_deny;
136     int f_id;
137 } fshare_t;
138
139 /* f_access values */
140 #define F_RDACC         0x1
141 #define F_WRACC         0x2
142 #define F_RWACC         0x3
143 #define F_RMACC         0x4
144 #define F_MDACC         0x20
145
146 /* f_deny values */
147 #define F_NODNY         0x0
148 #define F_RDDNY         0x1
149 #define F_WRDNY         0x2
150 #define F_RWDNY         0x3
151 #define F_RMDNY         0x4
152 #define F_COMPAT        0x8
153 #define F_MANDDNY       0x10
154
155 #define F_BADFD         46
156
157 /* For F_[GET|SET]FD.  */
158 # define FD_CLOEXEC     1       /* actually anything with low bit set goes */
159
160 /* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
161 # define F_RDLCK        1       /* Read lock.  */
162 # define F_WRLCK        2       /* Write lock.  */
163 # define F_UNLCK        3       /* Remove lock.  */
164 /* OpenSolaris-specific */
165 #define F_UNLKSYS       4
166
167 struct flock
168   {
169     short int l_type;   /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
170     short int l_whence; /* Where `l_start' is relative to (like `lseek').  */
171 #ifndef __USE_FILE_OFFSET64
172     __off_t l_start;    /* Offset where the lock begins.  */
173     __off_t l_len;      /* Size of the locked area; zero means until EOF.  */
174 #else
175     __off64_t l_start;  /* Offset where the lock begins.  */
176     __off64_t l_len;    /* Size of the locked area; zero means until EOF.  */
177 #endif
178     int l_sysid;
179     __pid_t l_pid;      /* Process holding the lock.  */
180     long l_pad[4];
181   };
182
183 #ifdef __USE_LARGEFILE64
184 struct flock64
185   {
186     short int l_type;   /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
187     short int l_whence; /* Where `l_start' is relative to (like `lseek').  */
188     __off64_t l_start;  /* Offset where the lock begins.  */
189     __off64_t l_len;    /* Size of the locked area; zero means until EOF.  */
190     int l_sysid;
191     __pid_t l_pid;      /* Process holding the lock.  */
192     long l_pad[4];
193   };
194 #endif
195
196 /* OpenSolaris direct i/o */
197 #define DIRECTIO_OFF    (0)
198 #define DIRECTIO_ON             (1)
199
200 /* OpenSolaris-specific seek flags */
201 #define SEEK_DATA  3
202 #define SEEK_HOLE  4
203
204 /* at-file support */
205 #ifdef __USE_ATFILE
206 # define AT_FDCWD              0xffd19553   /* Special value used to indicate
207                                           the *at functions should use the
208                                           current working directory. */
209 # define AT_SYMLINK_NOFOLLOW   0x1000  /* Do not follow symbolic links.  */
210 # define AT_REMOVEDIR          0x1     /* Remove directory instead of
211                                           unlinking file.  */
212 #endif
213
214 /* Define some more compatibility macros to be backward compatible with
215    BSD systems which did not managed to hide these kernel macros.  */
216 #ifdef  __USE_BSD
217 # define FOPEN          0xffffffff
218 # define FREAD          0x01
219 # define FWRITE         0x02
220 # define NDELAY         0x04
221 # define FNDELAY        NDELAY
222 # define FAPPEND        0x08
223 # define FSYNC          0x10
224 # define FFSYNC         FSYNC
225 # define FREVOKED       0x20
226 # define FDSYNC         0x40
227 # define FNONBLOCK      0x80
228 # define FCREAT         0x0100
229 # define FTRUNC         0x0200
230 # define FEXCL          0x0400
231 # define FASYNC         0x1000
232 # define FOFFMAX        0x2000
233 # define FXATTR         0x4000
234 # define FNOCTTY        0x0800
235 # define FRSYNC         0x8000
236 # define FNODSYNC       0x10000
237 # define FNOFOLLOW      0x20000
238 # define FNOLINKS       0x40000
239 # define FIGNORECASE    0x80000
240 # define FXATTRDIROPEN  0x100000
241 #endif /* Use BSD.  */