1 /***********************************************************************
2 * *
3 * This software is part of the ast package *
4 * Copyright (c) 1985-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
8 * *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
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
223 #ifndef O_APPEND
224 #define NEED_O 1
225 #else
226 if (O_APPEND > o_local) o_local = O_APPEND;
227 #endif
228 #ifndef O_CREAT
229 #define NEED_O 1
230 #else
231 if (O_CREAT > o_local) o_local = O_CREAT;
232 #endif
233 #ifndef O_EXCL
234 #define NEED_O 1
235 #else
236 if (O_EXCL > o_local) o_local = O_EXCL;
237 #endif
238 #ifndef O_NOCTTY
239 #ifdef TIOCNOTTY
240 #define NEED_O 1
241 #endif
242 #else
243 if (O_NOCTTY > o_local) o_local = O_NOCTTY;
244 #endif
245 #ifndef O_NONBLOCK
246 #ifndef O_NDELAY
247 #define NEED_O 1
248 #endif
249 #else
250 if (O_NONBLOCK > o_local) o_local = O_NONBLOCK;
251 #endif
252 #ifndef O_RDONLY
253 #define NEED_O 1
254 #endif
255 #ifndef O_RDWR
256 #define NEED_O 1
257 #endif
258 #ifndef O_TRUNC
259 #define NEED_O 1
260 #else
261 if (O_TRUNC > o_local) o_local = O_TRUNC;
262 #endif
263 #ifndef O_WRONLY
264 #define NEED_O 1
265 #endif
266
267 #if NEED_O
268 printf("#define open _ast_open\n");
269 printf("#define _ast_O_LOCAL 0%o\n", o_local<<1);
270 #ifndef O_RDONLY
271 printf("#define O_RDONLY 0\n");
272 #endif
273 #ifndef O_WRONLY
274 printf("#define O_WRONLY 1\n");
275 #endif
276 #ifndef O_RDWR
277 printf("#define O_RDWR 2\n");
278 #endif
279 #ifndef O_APPEND
280 printf("#define O_APPEND 0%o\n", o_local <<= 1);
281 #endif
282 #ifndef O_CREAT
283 printf("#define O_CREAT 0%o\n", o_local <<= 1);
284 #endif
285 #ifndef O_EXCL
286 printf("#define O_EXCL 0%o\n", o_local <<= 1);
287 #endif
288 #ifndef O_NOCTTY
289 #ifdef TIOCNOTTY
290 printf("#define O_NOCTTY 0%o\n", o_local <<= 1);
291 #endif
292 #endif
293 #ifndef O_NONBLOCK
294 #ifndef O_NDELAY
295 printf("#define O_NONBLOCK 0%o\n", o_local <<= 1);
296 #endif
297 #endif
298 #ifndef O_TRUNC
299 printf("#define O_TRUNC 0%o\n", o_local <<= 1);
300 #endif
301 #endif
302 #ifndef O_ACCMODE
303 printf("#define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)\n");
304 #endif
305 #ifndef O_NOCTTY
306 #ifndef TIOCNOTTY
307 printf("#define O_NOCTTY 0\n");
308 #endif
309 #endif
310 #ifndef O_NONBLOCK
311 #ifdef O_NDELAY
312 printf("#define O_NONBLOCK O_NDELAY\n");
313 #endif
314 #endif
315 #ifndef O_BINARY
316 printf("#define O_BINARY 0\n");
317 #endif
318 #ifndef O_TEMPORARY
319 printf("#define O_TEMPORARY 0\n");
320 #endif
321 #ifndef O_TEXT
322 printf("#define O_TEXT 0\n");
323 #endif
324 #if NEED_F || NEED_O
325 printf("\n");
326 #if NEED_F
327 printf("extern int fcntl(int, int, ...);\n");
328 #endif
329 #if NEED_O
330 printf("extern int open(const char*, int, ...);\n");
331 #endif
332 #endif
333 printf("\n");
334 printf("#include <ast_fs.h>\n");
335 printf("#if _typ_off64_t\n");
336 printf("#undef off_t\n");
337 printf("#define off_t off64_t\n");
338 printf("#endif\n");
339 printf("#if _lib_fstat64\n");
340 printf("#define fstat fstat64\n");
341 printf("#endif\n");
342 printf("#if _lib_lstat64\n");
343 printf("#define lstat lstat64\n");
344 printf("#endif\n");
345 printf("#if _lib_stat64\n");
346 printf("#define stat stat64\n");
347 printf("#endif\n");
348 printf("#if _lib_creat64\n");
349 printf("#define creat creat64\n");
350 printf("#endif\n");
351 printf("#if _lib_mmap64\n");
352 printf("#define mmap mmap64\n");
353 printf("#endif\n");
354 printf("#if _lib_open64\n");
355 printf("#undef open\n");
356 printf("#define open open64\n");
357 printf("#endif\n");
358
359 return 0;
360 }
361