diff options
Diffstat (limited to 'usr/src/lib/libast/common/features/fcntl.c')
-rw-r--r-- | usr/src/lib/libast/common/features/fcntl.c | 360 |
1 files changed, 360 insertions, 0 deletions
diff --git a/usr/src/lib/libast/common/features/fcntl.c b/usr/src/lib/libast/common/features/fcntl.c new file mode 100644 index 0000000000..a022e5c451 --- /dev/null +++ b/usr/src/lib/libast/common/features/fcntl.c @@ -0,0 +1,360 @@ +/*********************************************************************** +* * +* This software is part of the ast package * +* Copyright (c) 1985-2007 AT&T Knowledge Ventures * +* and is licensed under the * +* Common Public License, Version 1.0 * +* by AT&T Knowledge Ventures * +* * +* A copy of the License is available at * +* http://www.opensource.org/licenses/cpl1.0.txt * +* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * +* * +* Information and Software Systems Research * +* AT&T Research * +* Florham Park NJ * +* * +* Glenn Fowler <gsf@research.att.com> * +* David Korn <dgk@research.att.com> * +* Phong Vo <kpv@research.att.com> * +* * +***********************************************************************/ +#pragma prototyped +/* + * Glenn Fowler + * AT&T Research + * + * generate POSIX fcntl.h + */ + +#include <sys/types.h> + +#include "FEATURE/lib" + +#define getdtablesize ______getdtablesize +#define getpagesize ______getpagesize +#define ioctl ______ioctl + +#if _typ_off64_t +#undef off_t +#ifdef __STDC__ +#define off_t off_t +#endif +#endif + +#if _hdr_fcntl +#include <fcntl.h> +#endif +#if _hdr_unistd +#include <unistd.h> +#endif + +#include <sys/stat.h> + +#include "FEATURE/fs" + +#undef getdtablesize +#undef getpagesize +#undef ioctl + +#include "FEATURE/tty" + +#if _typ_off64_t +#undef off_t +#define off_t off64_t +#endif + +int +main() +{ + int f_local = 0; + int f_lck = 0; + int o_local = 2; + + printf("#pragma prototyped\n"); + printf("\n"); + printf("#if _typ_off64_t\n"); + printf("#undef off_t\n"); + printf("#ifdef __STDC__\n"); + printf("#define off_t off_t\n"); + printf("#endif\n"); + printf("#endif\n"); + printf("\n"); + printf("#include <ast_fs.h>\n"); + printf("\n"); + printf("#if _typ_off64_t\n"); + printf("#undef off_t\n"); + printf("#ifdef __STDC__\n"); + printf("#define off_t off_t\n"); + printf("#endif\n"); + printf("#endif\n"); + printf("\n"); + printf("#include <fcntl.h>\n"); +#if _hdr_mman + printf("#include <mman.h>\n"); +#else +#if _sys_mman + printf("#include <sys/mman.h>\n"); +#endif +#endif + printf("\n"); +#ifndef FD_CLOEXEC + printf("#define FD_CLOEXEC 1\n"); + printf("\n"); +#endif + +#ifndef F_DUPFD +#define NEED_F 1 +#else + if (F_DUPFD > f_local) f_local = F_DUPFD; +#endif +#ifndef F_GETFD +#define NEED_F 1 +#else + if (F_GETFD > f_local) f_local = F_GETFD; +#endif +#ifndef F_GETFL +#define NEED_F 1 +#else + if (F_GETFL > f_local) f_local = F_GETFL; +#endif +#ifndef F_GETLK +#define NEED_F 1 +#else + if (F_GETLK > f_local) f_local = F_GETLK; +#endif +#ifndef F_RDLCK +#define NEED_F 1 +#define NEED_LCK 1 +#else + if (F_RDLCK > f_lck) f_lck = F_RDLCK; +#endif +#ifndef F_SETFD +#define NEED_F 1 +#else + if (F_SETFD > f_local) f_local = F_SETFD; +#endif +#ifndef F_SETFL +#define NEED_F 1 +#else + if (F_SETFL > f_local) f_local = F_SETFL; +#endif +#ifndef F_SETLK +#define NEED_F 1 +#else + if (F_SETLK > f_local) f_local = F_SETLK; +#endif +#ifndef F_SETLKW +#define NEED_F 1 +#else + if (F_SETLKW > f_local) f_local = F_SETLKW; +#endif +#ifndef F_UNLCK +#define NEED_F 1 +#define NEED_LCK 1 +#else + if (F_UNLCK > f_lck) f_lck = F_UNLCK; +#endif +#ifndef F_WRLCK +#define NEED_F 1 +#define NEED_LCK 1 +#else + if (F_WRLCK > f_lck) f_lck = F_WRLCK; +#endif + +#if NEED_F + printf("#define fcntl _ast_fcntl\n"); +#if _lib_fcntl + printf("#define _lib_fcntl 1\n"); +#endif + printf("#define _ast_F_LOCAL %d\n", f_local + 1); +#ifndef F_DUPFD + printf("#define F_DUPFD %d\n", ++f_local); +#endif +#ifndef F_GETFD + printf("#define F_GETFD %d\n", ++f_local); +#endif +#ifndef F_GETFL + printf("#define F_GETFL %d\n", ++f_local); +#endif +#ifndef F_GETLK + printf("#define F_GETLK %d\n", ++f_local); +#endif +#ifndef F_SETFD + printf("#define F_SETFD %d\n", ++f_local); +#endif +#ifndef F_SETFL + printf("#define F_SETFL %d\n", ++f_local); +#endif +#ifndef F_SETLK + printf("#define F_SETLK %d\n", ++f_local); +#endif +#ifndef F_SETLKW + printf("#define F_SETLKW %d\n", ++f_local); +#endif +#if NEED_LCK + printf("\n"); +#ifndef F_RDLCK + printf("#define F_RDLCK %d\n", f_lck++); +#endif +#ifndef F_WRLCK + printf("#define F_WRLCK %d\n", f_lck++); +#endif +#ifndef F_UNLCK + printf("#define F_UNLCK %d\n", f_lck++); +#endif +#endif + printf("\n"); + if (f_lck == 3) + { + printf("struct flock\n"); + printf("{\n"); + printf(" short l_type;\n"); + printf(" short l_whence;\n"); + printf(" off_t l_start;\n"); + printf(" off_t l_len;\n"); + printf(" short l_pid;\n"); + printf("};\n"); + printf("\n"); + } + printf("\n"); +#endif + +#ifndef O_APPEND +#define NEED_O 1 +#else + if (O_APPEND > o_local) o_local = O_APPEND; +#endif +#ifndef O_CREAT +#define NEED_O 1 +#else + if (O_CREAT > o_local) o_local = O_CREAT; +#endif +#ifndef O_EXCL +#define NEED_O 1 +#else + if (O_EXCL > o_local) o_local = O_EXCL; +#endif +#ifndef O_NOCTTY +#ifdef TIOCNOTTY +#define NEED_O 1 +#endif +#else + if (O_NOCTTY > o_local) o_local = O_NOCTTY; +#endif +#ifndef O_NONBLOCK +#ifndef O_NDELAY +#define NEED_O 1 +#endif +#else + if (O_NONBLOCK > o_local) o_local = O_NONBLOCK; +#endif +#ifndef O_RDONLY +#define NEED_O 1 +#endif +#ifndef O_RDWR +#define NEED_O 1 +#endif +#ifndef O_TRUNC +#define NEED_O 1 +#else + if (O_TRUNC > o_local) o_local = O_TRUNC; +#endif +#ifndef O_WRONLY +#define NEED_O 1 +#endif + +#if NEED_O + printf("#define open _ast_open\n"); + printf("#define _ast_O_LOCAL 0%o\n", o_local<<1); +#ifndef O_RDONLY + printf("#define O_RDONLY 0\n"); +#endif +#ifndef O_WRONLY + printf("#define O_WRONLY 1\n"); +#endif +#ifndef O_RDWR + printf("#define O_RDWR 2\n"); +#endif +#ifndef O_APPEND + printf("#define O_APPEND 0%o\n", o_local <<= 1); +#endif +#ifndef O_CREAT + printf("#define O_CREAT 0%o\n", o_local <<= 1); +#endif +#ifndef O_EXCL + printf("#define O_EXCL 0%o\n", o_local <<= 1); +#endif +#ifndef O_NOCTTY +#ifdef TIOCNOTTY + printf("#define O_NOCTTY 0%o\n", o_local <<= 1); +#endif +#endif +#ifndef O_NONBLOCK +#ifndef O_NDELAY + printf("#define O_NONBLOCK 0%o\n", o_local <<= 1); +#endif +#endif +#ifndef O_TRUNC + printf("#define O_TRUNC 0%o\n", o_local <<= 1); +#endif +#endif +#ifndef O_ACCMODE + printf("#define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)\n"); +#endif +#ifndef O_NOCTTY +#ifndef TIOCNOTTY + printf("#define O_NOCTTY 0\n"); +#endif +#endif +#ifndef O_NONBLOCK +#ifdef O_NDELAY + printf("#define O_NONBLOCK O_NDELAY\n"); +#endif +#endif +#ifndef O_BINARY + printf("#define O_BINARY 0\n"); +#endif +#ifndef O_TEMPORARY + printf("#define O_TEMPORARY 0\n"); +#endif +#ifndef O_TEXT + printf("#define O_TEXT 0\n"); +#endif +#if NEED_F || NEED_O + printf("\n"); +#if NEED_F + printf("extern int fcntl(int, int, ...);\n"); +#endif +#if NEED_O + printf("extern int open(const char*, int, ...);\n"); +#endif +#endif + printf("\n"); + printf("#include <ast_fs.h>\n"); + printf("#if _typ_off64_t\n"); + printf("#undef off_t\n"); + printf("#define off_t off64_t\n"); + printf("#endif\n"); + printf("#if _lib_fstat64\n"); + printf("#define fstat fstat64\n"); + printf("#endif\n"); + printf("#if _lib_lstat64\n"); + printf("#define lstat lstat64\n"); + printf("#endif\n"); + printf("#if _lib_stat64\n"); + printf("#define stat stat64\n"); + printf("#endif\n"); + printf("#if _lib_creat64\n"); + printf("#define creat creat64\n"); + printf("#endif\n"); + printf("#if _lib_mmap64\n"); + printf("#define mmap mmap64\n"); + printf("#endif\n"); + printf("#if _lib_open64\n"); + printf("#undef open\n"); + printf("#define open open64\n"); + printf("#endif\n"); + + return 0; +} |