xref: /titanic_50/usr/src/lib/libast/common/features/fcntl.c (revision 074bb90d80fdbeb2d04a8450a55ecbc96de28785)
1 /***********************************************************************
2 *                                                                      *
3 *               This software is part of the ast package               *
4 *          Copyright (c) 1985-2009 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
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