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