Logo Search packages:      
Sourcecode: ksh version File versions

fcntl.c

/***********************************************************************
*                                                                      *
*               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;
}

Generated by  Doxygen 1.6.0   Back to index