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