X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FFcntl%2FFcntl.xs;h=251f3f4176ebc1b786742a5d0f0f9a81f5a57aed;hb=f0f333f45536802923a359d930d1dcfd5b4589ea;hp=2a360951f9b63999550d7e63342a118c9e9511b3;hpb=a0d0e21ea6ea90a22318550944fe6cb09ae10cda;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/Fcntl/Fcntl.xs b/ext/Fcntl/Fcntl.xs index 2a36095..251f3f4 100644 --- a/ext/Fcntl/Fcntl.xs +++ b/ext/Fcntl/Fcntl.xs @@ -2,20 +2,35 @@ #include "perl.h" #include "XSUB.h" -#include +#ifdef VMS +# include +#else +# include +#endif + +/* This comment is a kludge to get metaconfig to see the symbols + VAL_O_NONBLOCK + VAL_EAGAIN + RD_NODATA + EOF_NONBLOCK + and include the appropriate metaconfig unit + so that Configure will test how to turn on non-blocking I/O + for a file descriptor. See config.h for how to use these + in your extension. + + While I'm at it, I'll have metaconfig look for HAS_POLL too. + --AD October 16, 1995 +*/ static int -not_here(s) -char *s; +not_here(char *s) { croak("%s not implemented on this architecture", s); return -1; } static double -constant(name, arg) -char *name; -int arg; +constant(char *name, int arg) { errno = 0; switch (*name) { @@ -39,6 +54,12 @@ int arg; #else goto not_there; #endif + if (strEQ(name, "F_GETOWN")) +#ifdef F_GETOWN + return F_GETOWN; +#else + goto not_there; +#endif if (strEQ(name, "F_SETFD")) #ifdef F_SETFD return F_SETFD; @@ -51,9 +72,15 @@ int arg; #else goto not_there; #endif - if (strEQ(name, "SETFL")) -#ifdef SETFL - return SETFL; + if (strEQ(name, "F_POSIX")) +#ifdef F_POSIX + return F_POSIX; +#else + goto not_there; +#endif + if (strEQ(name, "F_SETFL")) +#ifdef F_SETFL + return F_SETFL; #else goto not_there; #endif @@ -69,6 +96,12 @@ int arg; #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; @@ -89,14 +122,93 @@ int arg; #endif errno = EINVAL; return 0; - } else - if (strEQ(name, "FD_CLOEXEC")) + } + if (strEQ(name, "FAPPEND")) +#ifdef FAPPEND + return FAPPEND; +#else + goto not_there; +#endif + if (strEQ(name, "FASYNC")) +#ifdef FASYNC + return FASYNC; +#else + goto not_there; +#endif + if (strEQ(name, "FCREAT")) +#ifdef FCREAT + return FCREAT; +#else + goto not_there; +#endif + if (strEQ(name, "FD_CLOEXEC")) #ifdef FD_CLOEXEC return FD_CLOEXEC; #else goto not_there; #endif + if (strEQ(name, "FEXCL")) +#ifdef FEXCL + return FEXCL; +#else + goto not_there; +#endif + if (strEQ(name, "FNDELAY")) +#ifdef FNDELAY + return FNDELAY; +#else + goto not_there; +#endif + if (strEQ(name, "FNONBLOCK")) +#ifdef FNONBLOCK + return FNONBLOCK; +#else + goto not_there; +#endif + if (strEQ(name, "FSYNC")) +#ifdef FSYNC + return FSYNC; +#else + goto not_there; +#endif + if (strEQ(name, "FTRUNC")) +#ifdef FTRUNC + return FTRUNC; +#else + goto not_there; +#endif break; + case 'L': + if (strnEQ(name, "LOCK_", 5)) { + /* We support flock() on systems which don't have it, so + always supply the constants. */ + if (strEQ(name, "LOCK_SH")) +#ifdef LOCK_SH + return LOCK_SH; +#else + return 1; +#endif + if (strEQ(name, "LOCK_EX")) +#ifdef LOCK_EX + return LOCK_EX; +#else + return 2; +#endif + if (strEQ(name, "LOCK_NB")) +#ifdef LOCK_NB + return LOCK_NB; +#else + return 4; +#endif + if (strEQ(name, "LOCK_UN")) +#ifdef LOCK_UN + return LOCK_UN; +#else + return 8; +#endif + } else + goto not_there; + break; case 'O': if (strnEQ(name, "O_", 2)) { if (strEQ(name, "O_CREAT")) @@ -159,6 +271,54 @@ int arg; #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; +#else + goto not_there; +#endif + if (strEQ(name, "O_SHLOCK")) +#ifdef O_SHLOCK + return O_SHLOCK; +#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_DSYNC")) +#ifdef O_DSYNC + return O_DSYNC; +#else + goto not_there; +#endif + if (strEQ(name, "O_RSYNC")) +#ifdef O_RSYNC + return O_RSYNC; +#else + goto not_there; +#endif + if (strEQ(name, "O_SYNC")) +#ifdef O_SYNC + return O_SYNC; +#else + goto not_there; +#endif + if (strEQ(name, "O_DEFER")) +#ifdef O_DEFER + return O_DEFER; +#else + goto not_there; +#endif } else goto not_there; break;