1/***********************************************************************
2*                                                                      *
3*               This software is part of the ast package               *
4*          Copyright (c) 1985-2011 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
67int
68main()
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