1 /***********************************************************************
2 * *
3 * This software is part of the ast package *
4 * Copyright (c) 1985-2012 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Eclipse Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
8 * *
9 * A copy of the License is available at *
10 * http://www.eclipse.org/org/documents/epl-v10.html *
11 * (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12 * *
13 * Information and Software Systems Research *
14 * AT&T Research *
15 * Florham Park NJ *
16 * *
17 * Glenn Fowler <gsf@research.att.com> *
18 * David Korn <dgk@research.att.com> *
19 * Phong Vo <kpv@research.att.com> *
20 * *
21 ***********************************************************************/
22 #pragma prototyped
23 /*
24 * Glenn Fowler
25 * AT&T Research
26 *
27 * generate POSIX fcntl.h
28 */
29
30 #include <sys/types.h>
31
32 #include "FEATURE/lib"
33
34 #define getdtablesize ______getdtablesize
35 #define getpagesize ______getpagesize
36 #define ioctl ______ioctl
37
38 #if _typ_off64_t
39 #undef off_t
40 #ifdef __STDC__
41 #define off_t off_t
42 #endif
43 #endif
44
45 #if _hdr_fcntl
46 #include <fcntl.h>
47 #endif
48 #if _hdr_unistd
49 #include <unistd.h>
50 #endif
51
52 #include <sys/stat.h>
53
54 #include "FEATURE/fs"
55
56 #undef getdtablesize
57 #undef getpagesize
58 #undef ioctl
59
60 #include "FEATURE/tty"
61
62 #if _typ_off64_t
63 #undef off_t
64 #define off_t off64_t
65 #endif
66
67 int
main()68 main()
69 {
70 int f_local = 0;
71 int f_lck = 0;
72 int o_local = 2;
73
74 printf("#pragma prototyped\n");
75 printf("\n");
76 printf("#if _typ_off64_t\n");
77 printf("#undef off_t\n");
78 printf("#ifdef __STDC__\n");
79 printf("#define off_t off_t\n");
80 printf("#endif\n");
81 printf("#endif\n");
82 printf("\n");
83 printf("#include <ast_fs.h>\n");
84 printf("\n");
85 printf("#if _typ_off64_t\n");
86 printf("#undef off_t\n");
87 printf("#ifdef __STDC__\n");
88 printf("#define off_t off_t\n");
89 printf("#endif\n");
90 printf("#endif\n");
91 printf("\n");
92 printf("#include <fcntl.h>\n");
93 #if _hdr_mman
94 printf("#include <mman.h>\n");
95 #else
96 #if _sys_mman
97 printf("#include <sys/mman.h>\n");
98 #endif
99 #endif
100 printf("\n");
101 #ifndef FD_CLOEXEC
102 printf("#define FD_CLOEXEC 1\n");
103 printf("\n");
104 #endif
105
106 #ifndef F_DUPFD
107 #define NEED_F 1
108 #else
109 if (F_DUPFD > f_local) f_local = F_DUPFD;
110 #endif
111 #ifndef F_GETFD
112 #define NEED_F 1
113 #else
114 if (F_GETFD > f_local) f_local = F_GETFD;
115 #endif
116 #ifndef F_GETFL
117 #define NEED_F 1
118 #else
119 if (F_GETFL > f_local) f_local = F_GETFL;
120 #endif
121 #ifndef F_GETLK
122 #define NEED_F 1
123 #else
124 if (F_GETLK > f_local) f_local = F_GETLK;
125 #endif
126 #ifndef F_RDLCK
127 #define NEED_F 1
128 #define NEED_LCK 1
129 #else
130 if (F_RDLCK > f_lck) f_lck = F_RDLCK;
131 #endif
132 #ifndef F_SETFD
133 #define NEED_F 1
134 #else
135 if (F_SETFD > f_local) f_local = F_SETFD;
136 #endif
137 #ifndef F_SETFL
138 #define NEED_F 1
139 #else
140 if (F_SETFL > f_local) f_local = F_SETFL;
141 #endif
142 #ifndef F_SETLK
143 #define NEED_F 1
144 #else
145 if (F_SETLK > f_local) f_local = F_SETLK;
146 #endif
147 #ifndef F_SETLKW
148 #define NEED_F 1
149 #else
150 if (F_SETLKW > f_local) f_local = F_SETLKW;
151 #endif
152 #ifndef F_UNLCK
153 #define NEED_F 1
154 #define NEED_LCK 1
155 #else
156 if (F_UNLCK > f_lck) f_lck = F_UNLCK;
157 #endif
158 #ifndef F_WRLCK
159 #define NEED_F 1
160 #define NEED_LCK 1
161 #else
162 if (F_WRLCK > f_lck) f_lck = F_WRLCK;
163 #endif
164
165 #if NEED_F
166 printf("#define fcntl _ast_fcntl\n");
167 #if _lib_fcntl
168 printf("#define _lib_fcntl 1\n");
169 #endif
170 printf("#define _ast_F_LOCAL %d\n", f_local + 1);
171 #ifndef F_DUPFD
172 printf("#define F_DUPFD %d\n", ++f_local);
173 #endif
174 #ifndef F_GETFD
175 printf("#define F_GETFD %d\n", ++f_local);
176 #endif
177 #ifndef F_GETFL
178 printf("#define F_GETFL %d\n", ++f_local);
179 #endif
180 #ifndef F_GETLK
181 printf("#define F_GETLK %d\n", ++f_local);
182 #endif
183 #ifndef F_SETFD
184 printf("#define F_SETFD %d\n", ++f_local);
185 #endif
186 #ifndef F_SETFL
187 printf("#define F_SETFL %d\n", ++f_local);
188 #endif
189 #ifndef F_SETLK
190 printf("#define F_SETLK %d\n", ++f_local);
191 #endif
192 #ifndef F_SETLKW
193 printf("#define F_SETLKW %d\n", ++f_local);
194 #endif
195 #if NEED_LCK
196 printf("\n");
197 #ifndef F_RDLCK
198 printf("#define F_RDLCK %d\n", f_lck++);
199 #endif
200 #ifndef F_WRLCK
201 printf("#define F_WRLCK %d\n", f_lck++);
202 #endif
203 #ifndef F_UNLCK
204 printf("#define F_UNLCK %d\n", f_lck++);
205 #endif
206 #endif
207 printf("\n");
208 if (f_lck == 3)
209 {
210 printf("struct flock\n");
211 printf("{\n");
212 printf(" short l_type;\n");
213 printf(" short l_whence;\n");
214 printf(" off_t l_start;\n");
215 printf(" off_t l_len;\n");
216 printf(" short l_pid;\n");
217 printf("};\n");
218 printf("\n");
219 }
220 printf("\n");
221 #endif
222 #ifdef F_DUPFD_CLOEXEC
223 printf("#define F_dupfd_cloexec F_DUPFD_CLOEXEC\n");
224 #else
225 printf("#define F_dupfd_cloexec F_DUPFD\n");
226 #endif
227
228 #ifndef O_APPEND
229 #define NEED_O 1
230 #else
231 if (O_APPEND > o_local) o_local = O_APPEND;
232 #endif
233 #ifndef O_CREAT
234 #define NEED_O 1
235 #else
236 if (O_CREAT > o_local) o_local = O_CREAT;
237 #endif
238 #ifndef O_EXCL
239 #define NEED_O 1
240 #else
241 if (O_EXCL > o_local) o_local = O_EXCL;
242 #endif
243 #ifndef O_NOCTTY
244 #ifdef TIOCNOTTY
245 #define NEED_O 1
246 #endif
247 #else
248 if (O_NOCTTY > o_local) o_local = O_NOCTTY;
249 #endif
250 #ifndef O_NONBLOCK
251 #ifndef O_NDELAY
252 #define NEED_O 1
253 #endif
254 #else
255 if (O_NONBLOCK > o_local) o_local = O_NONBLOCK;
256 #endif
257 #ifndef O_RDONLY
258 #define NEED_O 1
259 #endif
260 #ifndef O_RDWR
261 #define NEED_O 1
262 #endif
263 #ifndef O_TRUNC
264 #define NEED_O 1
265 #else
266 if (O_TRUNC > o_local) o_local = O_TRUNC;
267 #endif
268 #ifndef O_WRONLY
269 #define NEED_O 1
270 #endif
271
272 #if NEED_O
273 printf("#define open _ast_open\n");
274 printf("#define _ast_O_LOCAL 0%o\n", o_local<<1);
275 #ifndef O_RDONLY
276 printf("#define O_RDONLY 0\n");
277 #endif
278 #ifndef O_WRONLY
279 printf("#define O_WRONLY 1\n");
280 #endif
281 #ifndef O_RDWR
282 printf("#define O_RDWR 2\n");
283 #endif
284 #ifndef O_APPEND
285 printf("#define O_APPEND 0%o\n", o_local <<= 1);
286 #endif
287 #ifndef O_CREAT
288 printf("#define O_CREAT 0%o\n", o_local <<= 1);
289 #endif
290 #ifndef O_EXCL
291 printf("#define O_EXCL 0%o\n", o_local <<= 1);
292 #endif
293 #ifndef O_NOCTTY
294 #ifdef TIOCNOTTY
295 printf("#define O_NOCTTY 0%o\n", o_local <<= 1);
296 #endif
297 #endif
298 #ifndef O_NONBLOCK
299 #ifndef O_NDELAY
300 printf("#define O_NONBLOCK 0%o\n", o_local <<= 1);
301 #endif
302 #endif
303 #ifndef O_TRUNC
304 printf("#define O_TRUNC 0%o\n", o_local <<= 1);
305 #endif
306 #endif
307 #ifndef O_ACCMODE
308 printf("#define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)\n");
309 #endif
310 #ifndef O_NOCTTY
311 #ifndef TIOCNOTTY
312 printf("#define O_NOCTTY 0\n");
313 #endif
314 #endif
315 #ifndef O_NONBLOCK
316 #ifdef O_NDELAY
317 printf("#define O_NONBLOCK O_NDELAY\n");
318 #endif
319 #endif
320 #ifndef O_BINARY
321 printf("#define O_BINARY 0\n");
322 #endif
323 #ifdef O_CLOEXEC
324 printf("#define O_cloexec O_CLOEXEC\n");
325 #else
326 printf("#define O_cloexec 0\n");
327 #endif
328 #ifndef O_TEMPORARY
329 printf("#define O_TEMPORARY 0\n");
330 #endif
331 #ifndef O_TEXT
332 printf("#define O_TEXT 0\n");
333 #endif
334 #if NEED_F || NEED_O
335 printf("\n");
336 #if NEED_F
337 printf("extern int fcntl(int, int, ...);\n");
338 #endif
339 #if NEED_O
340 printf("extern int open(const char*, int, ...);\n");
341 #endif
342 #endif
343 printf("\n");
344 printf("#include <ast_fs.h>\n");
345 printf("#if _typ_off64_t\n");
346 printf("#undef off_t\n");
347 printf("#define off_t off64_t\n");
348 printf("#endif\n");
349 printf("#if _lib_fstat64\n");
350 printf("#define fstat fstat64\n");
351 printf("#endif\n");
352 printf("#if _lib_lstat64\n");
353 printf("#define lstat lstat64\n");
354 printf("#endif\n");
355 printf("#if _lib_stat64\n");
356 printf("#define stat stat64\n");
357 printf("#endif\n");
358 printf("#if _lib_creat64\n");
359 printf("#define creat creat64\n");
360 printf("#endif\n");
361 printf("#if _lib_mmap64\n");
362 printf("#define mmap mmap64\n");
363 printf("#endif\n");
364 printf("#if _lib_open64\n");
365 printf("#undef open\n");
366 printf("#define open open64\n");
367 printf("#endif\n");
368
369 return 0;
370 }
371