integrate cfgperl contents into mainline
[p5sagit/p5-mst-13.2.git] / ext / Fcntl / Fcntl.xs
index 251f3f4..b597e03 100644 (file)
@@ -1,3 +1,4 @@
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
@@ -5,7 +6,17 @@
 #ifdef VMS
 #  include <file.h>
 #else
+#if defined(__GNUC__) && defined(__cplusplus) && defined(WIN32)
+#define _NO_OLDNAMES
+#endif 
 #  include <fcntl.h>
+#if defined(__GNUC__) && defined(__cplusplus) && defined(WIN32)
+#undef _NO_OLDNAMES
+#endif 
+#endif
+
+#ifdef I_UNISTD
+#include <unistd.h>
 #endif
 
 /* This comment is a kludge to get metaconfig to see the symbols
@@ -34,41 +45,109 @@ constant(char *name, int arg)
 {
     errno = 0;
     switch (*name) {
+    case '_':
+       if (strEQ(name, "_S_IFMT")) /* Yes, on name _S_IFMT return S_IFMT. */
+#ifdef S_IFMT
+         return S_IFMT;
+#else
+         goto not_there;
+#endif
+       break;
     case 'F':
        if (strnEQ(name, "F_", 2)) {
+           if (strEQ(name, "F_ALLOCSP"))
+#ifdef F_ALLOCSP
+               return F_ALLOCSP;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_ALLOCSP64"))
+#ifdef F_ALLOCSP64
+               return F_ALLOCSP64;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_COMPAT"))
+#ifdef F_COMPAT
+               return F_COMPAT;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_DUP2FD"))
+#ifdef F_DUP2FD
+               return F_DUP2FD;
+#else
+               goto not_there;
+#endif
            if (strEQ(name, "F_DUPFD"))
 #ifdef F_DUPFD
                return F_DUPFD;
 #else
                goto not_there;
 #endif
+           if (strEQ(name, "F_EXLCK"))
+#ifdef F_EXLCK
+               return F_EXLCK;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_FREESP"))
+#ifdef F_FREESP
+               return F_FREESP;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_FREESP64"))
+#ifdef F_FREESP64
+               return F_FREESP64;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_FSYNC"))
+#ifdef F_FSYNC
+               return F_FSYNC;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_FSYNC64"))
+#ifdef F_FSYNC64
+               return F_FSYNC64;
+#else
+               goto not_there;
+#endif
            if (strEQ(name, "F_GETFD"))
 #ifdef F_GETFD
                return F_GETFD;
 #else
                goto not_there;
 #endif
+           if (strEQ(name, "F_GETFL"))
+#ifdef F_GETFL
+               return F_GETFL;
+#else
+               goto not_there;
+#endif
            if (strEQ(name, "F_GETLK"))
 #ifdef F_GETLK
                return F_GETLK;
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "F_GETOWN"))
-#ifdef F_GETOWN
-               return F_GETOWN;
+           if (strEQ(name, "F_GETLK64"))
+#ifdef F_GETLK64
+               return F_GETLK64;
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "F_SETFD"))
-#ifdef F_SETFD
-               return F_SETFD;
+           if (strEQ(name, "F_GETOWN"))
+#ifdef F_GETOWN
+               return F_GETOWN;
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "F_GETFL"))
-#ifdef F_GETFL
-               return F_GETFL;
+           if (strEQ(name, "F_NODNY"))
+#ifdef F_NODNY
+               return F_NODNY;
 #else
                goto not_there;
 #endif
@@ -78,6 +157,42 @@ constant(char *name, int arg)
 #else
                goto not_there;
 #endif
+           if (strEQ(name, "F_RDACC"))
+#ifdef F_RDACC
+               return F_RDACC;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_RDDNY"))
+#ifdef F_RDDNY
+               return F_RDDNY;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_RDLCK"))
+#ifdef F_RDLCK
+               return F_RDLCK;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_RWACC"))
+#ifdef F_RWACC
+               return F_RWACC;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_RWDNY"))
+#ifdef F_RWDNY
+               return F_RWDNY;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_SETFD"))
+#ifdef F_SETFD
+               return F_SETFD;
+#else
+               goto not_there;
+#endif
            if (strEQ(name, "F_SETFL"))
 #ifdef F_SETFL
                return F_SETFL;
@@ -90,21 +205,39 @@ constant(char *name, int arg)
 #else
                goto not_there;
 #endif
+           if (strEQ(name, "F_SETLK64"))
+#ifdef F_SETLK64
+               return F_SETLK64;
+#else
+               goto not_there;
+#endif
            if (strEQ(name, "F_SETLKW"))
 #ifdef F_SETLKW
                return F_SETLKW;
 #else
                goto not_there;
 #endif
+           if (strEQ(name, "F_SETLKW64"))
+#ifdef F_SETLKW64
+               return F_SETLKW64;
+#else
+               goto not_there;
+#endif
            if (strEQ(name, "F_SETOWN"))
 #ifdef F_SETOWN
                return F_SETOWN;
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "F_RDLCK"))
-#ifdef F_RDLCK
-               return F_RDLCK;
+           if (strEQ(name, "F_SHARE"))
+#ifdef F_SHARE
+               return F_SHARE;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_SHLCK"))
+#ifdef F_SHLCK
+               return F_SHLCK;
 #else
                goto not_there;
 #endif
@@ -114,6 +247,24 @@ constant(char *name, int arg)
 #else
                goto not_there;
 #endif
+           if (strEQ(name, "F_UNSHARE"))
+#ifdef F_UNSHARE
+               return F_UNSHARE;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_WRACC"))
+#ifdef F_WRACC
+               return F_WRACC;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "F_WRDNY"))
+#ifdef F_WRDNY
+               return F_WRDNY;
+#else
+               goto not_there;
+#endif
            if (strEQ(name, "F_WRLCK"))
 #ifdef F_WRLCK
                return F_WRLCK;
@@ -147,12 +298,30 @@ constant(char *name, int arg)
 #else
            goto not_there;
 #endif
+       if (strEQ(name, "FDEFER"))
+#ifdef FDEFER
+           return FDEFER;
+#else
+           goto not_there;
+#endif
+        if (strEQ(name, "FDSYNC"))
+#ifdef FDSYNC
+            return FDSYNC;
+#else
+            goto not_there;
+#endif
         if (strEQ(name, "FEXCL"))
 #ifdef FEXCL
             return FEXCL;
 #else
             goto not_there;
 #endif
+        if (strEQ(name, "FLARGEFILE"))
+#ifdef FLARGEFILE
+            return FLARGEFILE;
+#else
+            goto not_there;
+#endif
         if (strEQ(name, "FNDELAY"))
 #ifdef FNDELAY
             return FNDELAY;
@@ -165,6 +334,12 @@ constant(char *name, int arg)
 #else
             goto not_there;
 #endif
+        if (strEQ(name, "FRSYNC"))
+#ifdef FRSYNC
+            return FRSYNC;
+#else
+            goto not_there;
+#endif
         if (strEQ(name, "FSYNC"))
 #ifdef FSYNC
             return FSYNC;
@@ -211,33 +386,99 @@ constant(char *name, int arg)
        break;
     case 'O':
        if (strnEQ(name, "O_", 2)) {
+           if (strEQ(name, "O_ACCMODE"))
+#ifdef O_ACCMODE
+               return O_ACCMODE;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "O_APPEND"))
+#ifdef O_APPEND
+               return O_APPEND;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "O_ASYNC"))
+#ifdef O_ASYNC
+               return O_ASYNC;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "O_BINARY"))
+#ifdef O_BINARY
+               return O_BINARY;
+#else
+               goto not_there;
+#endif
            if (strEQ(name, "O_CREAT"))
 #ifdef O_CREAT
                return O_CREAT;
 #else
                goto not_there;
 #endif
+           if (strEQ(name, "O_DEFER"))
+#ifdef O_DEFER
+               return O_DEFER;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "O_DIRECT"))
+#ifdef O_DIRECT
+               return O_DIRECT;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "O_DIRECTORY"))
+#ifdef O_DIRECTORY
+               return O_DIRECTORY;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "O_DSYNC"))
+#ifdef O_DSYNC
+               return O_DSYNC;
+#else
+               goto not_there;
+#endif
            if (strEQ(name, "O_EXCL"))
 #ifdef O_EXCL
                return O_EXCL;
 #else
                goto not_there;
 #endif
+           if (strEQ(name, "O_EXLOCK"))
+#ifdef O_EXLOCK
+               return O_EXLOCK;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "O_LARGEFILE"))
+#ifdef O_LARGEFILE
+               return O_LARGEFILE;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "O_NDELAY"))
+#ifdef O_NDELAY
+               return O_NDELAY;
+#else
+               goto not_there;
+#endif
            if (strEQ(name, "O_NOCTTY"))
 #ifdef O_NOCTTY
                return O_NOCTTY;
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "O_TRUNC"))
-#ifdef O_TRUNC
-               return O_TRUNC;
+           if (strEQ(name, "O_NOFOLLOW"))
+#ifdef O_NOFOLLOW
+               return O_NOFOLLOW;
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "O_APPEND"))
-#ifdef O_APPEND
-               return O_APPEND;
+           if (strEQ(name, "O_NOINHERIT"))
+#ifdef O_NOINHERIT
+               return O_NOINHERIT;
 #else
                goto not_there;
 #endif
@@ -247,9 +488,15 @@ constant(char *name, int arg)
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "O_NDELAY"))
-#ifdef O_NDELAY
-               return O_NDELAY;
+           if (strEQ(name, "O_RANDOM"))
+#ifdef O_RANDOM
+               return O_RANDOM;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "O_RAW"))
+#ifdef O_RAW
+               return O_RAW;
 #else
                goto not_there;
 #endif
@@ -265,21 +512,15 @@ constant(char *name, int arg)
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "O_WRONLY"))
-#ifdef O_WRONLY
-               return O_WRONLY;
+           if (strEQ(name, "O_RSYNC"))
+#ifdef O_RSYNC
+               return O_RSYNC;
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "O_BINARY"))
-#ifdef O_BINARY
-               return O_BINARY;
-#else
-               goto not_there;
-#endif
-           if (strEQ(name, "O_EXLOCK"))
-#ifdef O_EXLOCK
-               return O_EXLOCK;
+           if (strEQ(name, "O_SEQUENTIAL"))
+#ifdef O_SEQUENTIAL
+               return O_SEQUENTIAL;
 #else
                goto not_there;
 #endif
@@ -289,39 +530,244 @@ constant(char *name, int arg)
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "O_ASYNC"))
-#ifdef O_ASYNC
-               return O_ASYNC;
+           if (strEQ(name, "O_SYNC"))
+#ifdef O_SYNC
+               return O_SYNC;
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "O_DSYNC"))
-#ifdef O_DSYNC
-               return O_DSYNC;
+           if (strEQ(name, "O_TEMPORARY"))
+#ifdef O_TEMPORARY
+               return O_TEMPORARY;
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "O_RSYNC"))
-#ifdef O_RSYNC
-               return O_RSYNC;
+           if (strEQ(name, "O_TEXT"))
+#ifdef O_TEXT
+               return O_TEXT;
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "O_SYNC"))
-#ifdef O_SYNC
-               return O_SYNC;
+           if (strEQ(name, "O_TRUNC"))
+#ifdef O_TRUNC
+               return O_TRUNC;
 #else
                goto not_there;
 #endif
-           if (strEQ(name, "O_DEFER"))
-#ifdef O_DEFER
-               return O_DEFER;
+           if (strEQ(name, "O_WRONLY"))
+#ifdef O_WRONLY
+               return O_WRONLY;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "O_ALIAS"))
+#ifdef O_ALIAS
+               return O_ALIAS;
+#else
+               goto not_there;
+#endif
+           if (strEQ(name, "O_RSRC"))
+#ifdef O_RSRC
+               return O_RSRC;
 #else
                goto not_there;
 #endif
        } else
          goto not_there;
        break;
+    case 'S':
+      switch (name[1]) {
+      case '_':
+       if (strEQ(name, "S_ISUID"))
+#ifdef S_ISUID
+         return S_ISUID;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_ISGID"))
+#ifdef S_ISGID
+         return S_ISGID;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_ISVTX"))
+#ifdef S_ISVTX
+         return S_ISVTX;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_ISTXT"))
+#ifdef S_ISTXT
+         return S_ISTXT;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IFREG"))
+#ifdef S_IFREG
+         return S_IFREG;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IFDIR"))
+#ifdef S_IFDIR
+         return S_IFDIR;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IFLNK"))
+#ifdef S_IFLNK
+         return S_IFLNK;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IFSOCK"))
+#ifdef S_IFSOCK
+         return S_IFSOCK;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IFBLK"))
+#ifdef S_IFBLK
+         return S_IFBLK;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IFCHR"))
+#ifdef S_IFCHR
+         return S_IFCHR;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IFIFO"))
+#ifdef S_IFIFO
+         return S_IFIFO;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IFWHT"))
+#ifdef S_IFWHT
+         return S_IFWHT;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_ENFMT"))
+#ifdef S_ENFMT
+         return S_ENFMT;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IRUSR"))
+#ifdef S_IRUSR
+         return S_IRUSR;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IWUSR"))
+#ifdef S_IWUSR
+         return S_IWUSR;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IXUSR"))
+#ifdef S_IXUSR
+         return S_IXUSR;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IRWXU"))
+#ifdef S_IRWXU
+         return S_IRWXU;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IRGRP"))
+#ifdef S_IRGRP
+         return S_IRGRP;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IWGRP"))
+#ifdef S_IWGRP
+         return S_IWGRP;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IXGRP"))
+#ifdef S_IXGRP
+         return S_IXGRP;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IRWXG"))
+#ifdef S_IRWXG
+         return S_IRWXG;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IROTH"))
+#ifdef S_IROTH
+         return S_IROTH;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IWOTH"))
+#ifdef S_IWOTH
+         return S_IWOTH;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IXOTH"))
+#ifdef S_IXOTH
+         return S_IXOTH;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IRWXO"))
+#ifdef S_IRWXO
+         return S_IRWXO;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IREAD"))
+#ifdef S_IREAD
+         return S_IREAD;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IWRITE"))
+#ifdef S_IWRITE
+         return S_IWRITE;
+#else
+         goto not_there;
+#endif
+       if (strEQ(name, "S_IEXEC"))
+#ifdef S_IEXEC
+         return S_IEXEC;
+#else
+         goto not_there;
+#endif
+       break;
+      case 'E':
+         if (strEQ(name, "SEEK_CUR"))
+#ifdef SEEK_CUR
+           return SEEK_CUR;
+#else
+           return 1;
+#endif
+       if (strEQ(name, "SEEK_END"))
+#ifdef SEEK_END
+           return SEEK_END;
+#else
+           return 2;
+#endif
+       if (strEQ(name, "SEEK_SET"))
+#ifdef SEEK_SET
+           return SEEK_SET;
+#else
+           return 0;
+#endif
+       break;
+      }    
     }
     errno = EINVAL;
     return 0;