summaryrefslogtreecommitdiff
path: root/usr/src/lib/libast/common/features/fcntl.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libast/common/features/fcntl.c')
-rw-r--r--usr/src/lib/libast/common/features/fcntl.c360
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;
+}