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