summaryrefslogtreecommitdiff
path: root/ext/POSIX/POSIX.xs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/POSIX/POSIX.xs')
-rw-r--r--ext/POSIX/POSIX.xs3148
1 files changed, 3148 insertions, 0 deletions
diff --git a/ext/POSIX/POSIX.xs b/ext/POSIX/POSIX.xs
new file mode 100644
index 0000000000..941e59a795
--- /dev/null
+++ b/ext/POSIX/POSIX.xs
@@ -0,0 +1,3148 @@
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+#include <ctype.h>
+#ifdef I_DIRENT /* XXX maybe better to just rely on perl.h? */
+#include <dirent.h>
+#endif
+#include <errno.h>
+#include <fcntl.h>
+#ifdef I_FLOAT
+#include <float.h>
+#endif
+#include <grp.h>
+#ifdef I_LIMITS
+#include <limits.h>
+#endif
+#include <locale.h>
+#include <math.h>
+#ifdef I_PWD
+#include <pwd.h>
+#endif
+#include <setjmp.h>
+#include <signal.h>
+#ifdef I_STDARG
+#include <stdarg.h>
+#endif
+#ifdef I_STDDEF
+#include <stddef.h>
+#endif
+/* XXX This comment is just to make I_TERMIO and I_SGTTY visible to
+ metaconfig for future extension writers. We don't use them in POSIX.
+ (This is really sneaky :-) --AD
+*/
+#if defined(I_TERMIOS)
+#include <termios.h>
+#endif
+#include <stdio.h>
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/times.h>
+#include <sys/types.h>
+#ifdef HAS_UNAME
+#include <sys/utsname.h>
+#endif
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+#ifdef I_UTIME
+#include <utime.h>
+#endif
+
+typedef FILE * InputStream;
+typedef FILE * OutputStream;
+typedef int SysRet;
+typedef long SysRetLong;
+typedef sigset_t* POSIX__SigSet;
+typedef HV* POSIX__SigAction;
+#ifdef I_TERMIOS
+typedef struct termios* POSIX__Termios;
+#else /* Define termios types to int, and call not_here for the functions.*/
+#define POSIX__Termios int
+#define speed_t int
+#define tcflag_t int
+#define cc_t int
+#define cfgetispeed(x) not_here("cfgetispeed")
+#define cfgetospeed(x) not_here("cfgetospeed")
+#define tcdrain(x) not_here("tcdrain")
+#define tcflush(x,y) not_here("tcflush")
+#define tcsendbreak(x,y) not_here("tcsendbreak")
+#define cfsetispeed(x,y) not_here("cfsetispeed")
+#define cfsetospeed(x,y) not_here("cfsetospeed")
+#define ctermid(x) (char *) not_here("ctermid")
+#define tcflow(x,y) not_here("tcflow")
+#define tcgetattr(x,y) not_here("tcgetattr")
+#define tcsetattr(x,y,z) not_here("tcsetattr")
+#endif
+
+/* Possibly needed prototypes */
+char *cuserid _((char *));
+
+#ifndef HAS_CUSERID
+#define cuserid(a) (char *) not_here("cuserid")
+#endif
+#ifndef HAS_DIFFTIME
+#ifndef difftime
+#define difftime(a,b) not_here("difftime")
+#endif
+#endif
+#ifndef HAS_FPATHCONF
+#define fpathconf(f,n) (SysRetLong) not_here("fpathconf")
+#endif
+#ifndef HAS_MKTIME
+#define mktime(a) not_here("mktime")
+#endif
+#ifndef HAS_NICE
+#define nice(a) not_here("nice")
+#endif
+#ifndef HAS_PATHCONF
+#define pathconf(f,n) (SysRetLong) not_here("pathconf")
+#endif
+#ifndef HAS_SYSCONF
+#define sysconf(n) (SysRetLong) not_here("sysconf")
+#endif
+#ifndef HAS_READLINK
+#define readlink(a,b,c) not_here("readlink")
+#endif
+#ifndef HAS_SETPGID
+#define setpgid(a,b) not_here("setpgid")
+#endif
+#ifndef HAS_SETSID
+#define setsid() not_here("setsid")
+#endif
+#ifndef HAS_STRCOLL
+#define strcoll(s1,s2) not_here("strcoll")
+#endif
+#ifndef HAS_STRXFRM
+#define strxfrm(s1,s2,n) not_here("strxfrm")
+#endif
+#ifndef HAS_TCGETPGRP
+#define tcgetpgrp(a) not_here("tcgetpgrp")
+#endif
+#ifndef HAS_TCSETPGRP
+#define tcsetpgrp(a,b) not_here("tcsetpgrp")
+#endif
+#ifndef HAS_TIMES
+#define times(a) not_here("times")
+#endif
+#ifndef HAS_UNAME
+#define uname(a) not_here("uname")
+#endif
+#ifndef HAS_WAITPID
+#define waitpid(a,b,c) not_here("waitpid")
+#endif
+
+#ifndef HAS_FGETPOS
+#define fgetpos(a,b) not_here("fgetpos")
+#endif
+#ifndef HAS_FSETPOS
+#define fsetpos(a,b) not_here("fsetpos")
+#endif
+
+#ifndef HAS_MBLEN
+#ifndef mblen
+#define mblen(a,b) not_here("mblen")
+#endif
+#endif
+#ifndef HAS_MBSTOWCS
+#define mbstowcs(s, pwcs, n) not_here("mbstowcs")
+#endif
+#ifndef HAS_MBTOWC
+#define mbtowc(pwc, s, n) not_here("mbtowc")
+#endif
+#ifndef HAS_WCSTOMBS
+#define wcstombs(s, pwcs, n) not_here("wcstombs")
+#endif
+#ifndef HAS_WCTOMB
+#define wctomb(s, wchar) not_here("wcstombs")
+#endif
+#if !defined(HAS_MBLEN) && !defined(HAS_MBSTOWCS) && !defined(HAS_MBTOWC) && !defined(HAS_WCSTOMBS) && !defined(HAS_WCTOMB)
+/* If we don't have these functions, then we wouldn't have gotten a typedef
+ for wchar_t, the wide character type. Defining wchar_t allows the
+ functions referencing it to compile. Its actual type is then meaningless,
+ since without the above functions, all sections using it end up calling
+ not_here() and croak. --Kaveh Ghazi (ghazi@noc.rutgers.edu) 9/18/94. */
+#ifndef wchar_t
+#define wchar_t char
+#endif
+#endif
+
+#ifndef HAS_LOCALECONV
+#define localeconv() not_here("localeconv")
+#endif
+
+#ifdef HAS_TZNAME
+extern char *tzname[];
+#else
+char *tzname[] = { "" , "" };
+#endif
+
+#ifndef HAS_LONG_DOUBLE /* XXX What to do about long doubles? */
+#ifdef LDBL_MAX
+#undef LDBL_MAX
+#endif
+#ifdef LDBL_MIN
+#undef LDBL_MIN
+#endif
+#ifdef LDBL_EPSILON
+#undef LDBL_EPSILON
+#endif
+#endif
+
+static int
+not_here(s)
+char *s;
+{
+ croak("POSIX::%s not implemented on this architecture", s);
+ return -1;
+}
+
+static double
+constant(name, arg)
+char *name;
+int arg;
+{
+ errno = 0;
+ switch (*name) {
+ case 'A':
+ if (strEQ(name, "ARG_MAX"))
+#ifdef ARG_MAX
+ return ARG_MAX;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'B':
+ if (strEQ(name, "BUFSIZ"))
+#ifdef BUFSIZ
+ return BUFSIZ;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "BRKINT"))
+#ifdef BRKINT
+ return BRKINT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B9600"))
+#ifdef B9600
+ return B9600;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B19200"))
+#ifdef B19200
+ return B19200;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B38400"))
+#ifdef B38400
+ return B38400;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B0"))
+#ifdef B0
+ return B0;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B110"))
+#ifdef B110
+ return B110;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B1200"))
+#ifdef B1200
+ return B1200;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B134"))
+#ifdef B134
+ return B134;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B150"))
+#ifdef B150
+ return B150;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B1800"))
+#ifdef B1800
+ return B1800;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B200"))
+#ifdef B200
+ return B200;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B2400"))
+#ifdef B2400
+ return B2400;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B300"))
+#ifdef B300
+ return B300;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B4800"))
+#ifdef B4800
+ return B4800;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B50"))
+#ifdef B50
+ return B50;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B600"))
+#ifdef B600
+ return B600;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "B75"))
+#ifdef B75
+ return B75;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'C':
+ if (strEQ(name, "CHAR_BIT"))
+#ifdef CHAR_BIT
+ return CHAR_BIT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CHAR_MAX"))
+#ifdef CHAR_MAX
+ return CHAR_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CHAR_MIN"))
+#ifdef CHAR_MIN
+ return CHAR_MIN;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CHILD_MAX"))
+#ifdef CHILD_MAX
+ return CHILD_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CLK_TCK"))
+#ifdef CLK_TCK
+ return CLK_TCK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CLOCAL"))
+#ifdef CLOCAL
+ return CLOCAL;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CLOCKS_PER_SEC"))
+#ifdef CLOCKS_PER_SEC
+ return CLOCKS_PER_SEC;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CREAD"))
+#ifdef CREAD
+ return CREAD;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CS5"))
+#ifdef CS5
+ return CS5;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CS6"))
+#ifdef CS6
+ return CS6;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CS7"))
+#ifdef CS7
+ return CS7;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CS8"))
+#ifdef CS8
+ return CS8;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CSIZE"))
+#ifdef CSIZE
+ return CSIZE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "CSTOPB"))
+#ifdef CSTOPB
+ return CSTOPB;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'D':
+ if (strEQ(name, "DBL_MAX"))
+#ifdef DBL_MAX
+ return DBL_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "DBL_MIN"))
+#ifdef DBL_MIN
+ return DBL_MIN;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "DBL_DIG"))
+#ifdef DBL_DIG
+ return DBL_DIG;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "DBL_EPSILON"))
+#ifdef DBL_EPSILON
+ return DBL_EPSILON;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "DBL_MANT_DIG"))
+#ifdef DBL_MANT_DIG
+ return DBL_MANT_DIG;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "DBL_MAX_10_EXP"))
+#ifdef DBL_MAX_10_EXP
+ return DBL_MAX_10_EXP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "DBL_MAX_EXP"))
+#ifdef DBL_MAX_EXP
+ return DBL_MAX_EXP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "DBL_MIN_10_EXP"))
+#ifdef DBL_MIN_10_EXP
+ return DBL_MIN_10_EXP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "DBL_MIN_EXP"))
+#ifdef DBL_MIN_EXP
+ return DBL_MIN_EXP;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'E':
+ switch (name[1]) {
+ case 'A':
+ if (strEQ(name, "EACCES"))
+#ifdef EACCES
+ return EACCES;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "EAGAIN"))
+#ifdef EAGAIN
+ return EAGAIN;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'B':
+ if (strEQ(name, "EBADF"))
+#ifdef EBADF
+ return EBADF;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "EBUSY"))
+#ifdef EBUSY
+ return EBUSY;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'C':
+ if (strEQ(name, "ECHILD"))
+#ifdef ECHILD
+ return ECHILD;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ECHO"))
+#ifdef ECHO
+ return ECHO;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ECHOE"))
+#ifdef ECHOE
+ return ECHOE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ECHOK"))
+#ifdef ECHOK
+ return ECHOK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ECHONL"))
+#ifdef ECHONL
+ return ECHONL;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'D':
+ if (strEQ(name, "EDEADLK"))
+#ifdef EDEADLK
+ return EDEADLK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "EDOM"))
+#ifdef EDOM
+ return EDOM;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'E':
+ if (strEQ(name, "EEXIST"))
+#ifdef EEXIST
+ return EEXIST;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'F':
+ if (strEQ(name, "EFAULT"))
+#ifdef EFAULT
+ return EFAULT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "EFBIG"))
+#ifdef EFBIG
+ return EFBIG;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'I':
+ if (strEQ(name, "EINTR"))
+#ifdef EINTR
+ return EINTR;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "EINVAL"))
+#ifdef EINVAL
+ return EINVAL;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "EIO"))
+#ifdef EIO
+ return EIO;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "EISDIR"))
+#ifdef EISDIR
+ return EISDIR;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'M':
+ if (strEQ(name, "EMFILE"))
+#ifdef EMFILE
+ return EMFILE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "EMLINK"))
+#ifdef EMLINK
+ return EMLINK;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'N':
+ if (strEQ(name, "ENOMEM"))
+#ifdef ENOMEM
+ return ENOMEM;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ENOSPC"))
+#ifdef ENOSPC
+ return ENOSPC;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ENOEXEC"))
+#ifdef ENOEXEC
+ return ENOEXEC;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ENOTTY"))
+#ifdef ENOTTY
+ return ENOTTY;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ENOTDIR"))
+#ifdef ENOTDIR
+ return ENOTDIR;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ENOTEMPTY"))
+#ifdef ENOTEMPTY
+ return ENOTEMPTY;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ENFILE"))
+#ifdef ENFILE
+ return ENFILE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ENODEV"))
+#ifdef ENODEV
+ return ENODEV;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ENOENT"))
+#ifdef ENOENT
+ return ENOENT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ENOLCK"))
+#ifdef ENOLCK
+ return ENOLCK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ENOSYS"))
+#ifdef ENOSYS
+ return ENOSYS;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ENXIO"))
+#ifdef ENXIO
+ return ENXIO;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ENAMETOOLONG"))
+#ifdef ENAMETOOLONG
+ return ENAMETOOLONG;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'O':
+ if (strEQ(name, "EOF"))
+#ifdef EOF
+ return EOF;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'P':
+ if (strEQ(name, "EPERM"))
+#ifdef EPERM
+ return EPERM;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "EPIPE"))
+#ifdef EPIPE
+ return EPIPE;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'R':
+ if (strEQ(name, "ERANGE"))
+#ifdef ERANGE
+ return ERANGE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "EROFS"))
+#ifdef EROFS
+ return EROFS;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'S':
+ if (strEQ(name, "ESPIPE"))
+#ifdef ESPIPE
+ return ESPIPE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ESRCH"))
+#ifdef ESRCH
+ return ESRCH;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'X':
+ if (strEQ(name, "EXIT_FAILURE"))
+#ifdef EXIT_FAILURE
+ return EXIT_FAILURE;
+#else
+ return 1;
+#endif
+ if (strEQ(name, "EXIT_SUCCESS"))
+#ifdef EXIT_SUCCESS
+ return EXIT_SUCCESS;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "EXDEV"))
+#ifdef EXDEV
+ return EXDEV;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ if (strEQ(name, "E2BIG"))
+#ifdef E2BIG
+ return E2BIG;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'F':
+ if (strnEQ(name, "FLT_", 4)) {
+ if (strEQ(name, "FLT_MAX"))
+#ifdef FLT_MAX
+ return FLT_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "FLT_MIN"))
+#ifdef FLT_MIN
+ return FLT_MIN;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "FLT_ROUNDS"))
+#ifdef FLT_ROUNDS
+ return FLT_ROUNDS;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "FLT_DIG"))
+#ifdef FLT_DIG
+ return FLT_DIG;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "FLT_EPSILON"))
+#ifdef FLT_EPSILON
+ return FLT_EPSILON;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "FLT_MANT_DIG"))
+#ifdef FLT_MANT_DIG
+ return FLT_MANT_DIG;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "FLT_MAX_10_EXP"))
+#ifdef FLT_MAX_10_EXP
+ return FLT_MAX_10_EXP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "FLT_MAX_EXP"))
+#ifdef FLT_MAX_EXP
+ return FLT_MAX_EXP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "FLT_MIN_10_EXP"))
+#ifdef FLT_MIN_10_EXP
+ return FLT_MIN_10_EXP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "FLT_MIN_EXP"))
+#ifdef FLT_MIN_EXP
+ return FLT_MIN_EXP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "FLT_RADIX"))
+#ifdef FLT_RADIX
+ return FLT_RADIX;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ if (strnEQ(name, "F_", 2)) {
+ if (strEQ(name, "F_DUPFD"))
+#ifdef F_DUPFD
+ return F_DUPFD;
+#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_OK"))
+#ifdef F_OK
+ return F_OK;
+#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_SETFD"))
+#ifdef F_SETFD
+ return F_SETFD;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "F_SETFL"))
+#ifdef F_SETFL
+ return F_SETFL;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "F_SETLK"))
+#ifdef F_SETLK
+ return F_SETLK;
+#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_UNLCK"))
+#ifdef F_UNLCK
+ return F_UNLCK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "F_WRLCK"))
+#ifdef F_WRLCK
+ return F_WRLCK;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ if (strEQ(name, "FD_CLOEXEC")) return FD_CLOEXEC;
+ if (strEQ(name, "FILENAME_MAX"))
+#ifdef FILENAME_MAX
+ return FILENAME_MAX;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'H':
+ if (strEQ(name, "HUGE_VAL"))
+#ifdef HUGE_VAL
+ return HUGE_VAL;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "HUPCL"))
+#ifdef HUPCL
+ return HUPCL;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'I':
+ if (strEQ(name, "INT_MAX"))
+#ifdef INT_MAX
+ return INT_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "INT_MIN"))
+#ifdef INT_MIN
+ return INT_MIN;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ICANON"))
+#ifdef ICANON
+ return ICANON;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ICRNL"))
+#ifdef ICRNL
+ return ICRNL;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "IEXTEN"))
+#ifdef IEXTEN
+ return IEXTEN;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "IGNBRK"))
+#ifdef IGNBRK
+ return IGNBRK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "IGNCR"))
+#ifdef IGNCR
+ return IGNCR;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "IGNPAR"))
+#ifdef IGNPAR
+ return IGNPAR;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "INLCR"))
+#ifdef INLCR
+ return INLCR;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "INPCK"))
+#ifdef INPCK
+ return INPCK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ISIG"))
+#ifdef ISIG
+ return ISIG;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ISTRIP"))
+#ifdef ISTRIP
+ return ISTRIP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "IXOFF"))
+#ifdef IXOFF
+ return IXOFF;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "IXON"))
+#ifdef IXON
+ return IXON;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'L':
+ if (strnEQ(name, "LC_", 3)) {
+ if (strEQ(name, "LC_ALL"))
+#ifdef LC_ALL
+ return LC_ALL;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LC_COLLATE"))
+#ifdef LC_COLLATE
+ return LC_COLLATE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LC_CTYPE"))
+#ifdef LC_CTYPE
+ return LC_CTYPE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LC_MONETARY"))
+#ifdef LC_MONETARY
+ return LC_MONETARY;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LC_NUMERIC"))
+#ifdef LC_NUMERIC
+ return LC_NUMERIC;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LC_TIME"))
+#ifdef LC_TIME
+ return LC_TIME;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ if (strnEQ(name, "LDBL_", 5)) {
+ if (strEQ(name, "LDBL_MAX"))
+#ifdef LDBL_MAX
+ return LDBL_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LDBL_MIN"))
+#ifdef LDBL_MIN
+ return LDBL_MIN;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LDBL_DIG"))
+#ifdef LDBL_DIG
+ return LDBL_DIG;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LDBL_EPSILON"))
+#ifdef LDBL_EPSILON
+ return LDBL_EPSILON;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LDBL_MANT_DIG"))
+#ifdef LDBL_MANT_DIG
+ return LDBL_MANT_DIG;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LDBL_MAX_10_EXP"))
+#ifdef LDBL_MAX_10_EXP
+ return LDBL_MAX_10_EXP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LDBL_MAX_EXP"))
+#ifdef LDBL_MAX_EXP
+ return LDBL_MAX_EXP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LDBL_MIN_10_EXP"))
+#ifdef LDBL_MIN_10_EXP
+ return LDBL_MIN_10_EXP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LDBL_MIN_EXP"))
+#ifdef LDBL_MIN_EXP
+ return LDBL_MIN_EXP;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ if (strnEQ(name, "L_", 2)) {
+ if (strEQ(name, "L_ctermid"))
+#ifdef L_ctermid
+ return L_ctermid;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "L_cuserid"))
+#ifdef L_cuserid
+ return L_cuserid;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "L_tmpname"))
+#ifdef L_tmpname
+ return L_tmpname;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ if (strEQ(name, "LONG_MAX"))
+#ifdef LONG_MAX
+ return LONG_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LONG_MIN"))
+#ifdef LONG_MIN
+ return LONG_MIN;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "LINK_MAX"))
+#ifdef LINK_MAX
+ return LINK_MAX;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'M':
+ if (strEQ(name, "MAX_CANON"))
+#ifdef MAX_CANON
+ return MAX_CANON;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "MAX_INPUT"))
+#ifdef MAX_INPUT
+ return MAX_INPUT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "MB_CUR_MAX"))
+#ifdef MB_CUR_MAX
+ return MB_CUR_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "MB_LEN_MAX"))
+#ifdef MB_LEN_MAX
+ return MB_LEN_MAX;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'N':
+ if (strEQ(name, "NULL")) return 0;
+ if (strEQ(name, "NAME_MAX"))
+#ifdef NAME_MAX
+ return NAME_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "NCCS"))
+#ifdef NCCS
+ return NCCS;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "NGROUPS_MAX"))
+#ifdef NGROUPS_MAX
+ return NGROUPS_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "NOFLSH"))
+#ifdef NOFLSH
+ return NOFLSH;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'O':
+ if (strnEQ(name, "O_", 2)) {
+ if (strEQ(name, "O_APPEND"))
+#ifdef O_APPEND
+ return O_APPEND;
+#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_TRUNC"))
+#ifdef O_TRUNC
+ return O_TRUNC;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "O_RDONLY"))
+#ifdef O_RDONLY
+ return O_RDONLY;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "O_RDWR"))
+#ifdef O_RDWR
+ return O_RDWR;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "O_WRONLY"))
+#ifdef O_WRONLY
+ return O_WRONLY;
+#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_NOCTTY"))
+#ifdef O_NOCTTY
+ return O_NOCTTY;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "O_NONBLOCK"))
+#ifdef O_NONBLOCK
+ return O_NONBLOCK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "O_ACCMODE"))
+#ifdef O_ACCMODE
+ return O_ACCMODE;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ if (strEQ(name, "OPEN_MAX"))
+#ifdef OPEN_MAX
+ return OPEN_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "OPOST"))
+#ifdef OPOST
+ return OPOST;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'P':
+ if (strEQ(name, "PATH_MAX"))
+#ifdef PATH_MAX
+ return PATH_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "PARENB"))
+#ifdef PARENB
+ return PARENB;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "PARMRK"))
+#ifdef PARMRK
+ return PARMRK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "PARODD"))
+#ifdef PARODD
+ return PARODD;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "PIPE_BUF"))
+#ifdef PIPE_BUF
+ return PIPE_BUF;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'R':
+ if (strEQ(name, "RAND_MAX"))
+#ifdef RAND_MAX
+ return RAND_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "R_OK"))
+#ifdef R_OK
+ return R_OK;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'S':
+ if (strnEQ(name, "SIG", 3)) {
+ if (name[3] == '_') {
+ if (strEQ(name, "SIG_BLOCK"))
+#ifdef SIG_BLOCK
+ return SIG_BLOCK;
+#else
+ goto not_there;
+#endif
+#ifdef SIG_DFL
+ if (strEQ(name, "SIG_DFL")) return (int)SIG_DFL;
+#endif
+#ifdef SIG_ERR
+ if (strEQ(name, "SIG_ERR")) return (int)SIG_ERR;
+#endif
+#ifdef SIG_IGN
+ if (strEQ(name, "SIG_IGN")) return (int)SIG_IGN;
+#endif
+ if (strEQ(name, "SIG_SETMASK"))
+#ifdef SIG_SETMASK
+ return SIG_SETMASK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIG_UNBLOCK"))
+#ifdef SIG_UNBLOCK
+ return SIG_UNBLOCK;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ if (strEQ(name, "SIGABRT"))
+#ifdef SIGABRT
+ return SIGABRT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGALRM"))
+#ifdef SIGALRM
+ return SIGALRM;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGCHLD"))
+#ifdef SIGCHLD
+ return SIGCHLD;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGCONT"))
+#ifdef SIGCONT
+ return SIGCONT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGFPE"))
+#ifdef SIGFPE
+ return SIGFPE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGHUP"))
+#ifdef SIGHUP
+ return SIGHUP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGILL"))
+#ifdef SIGILL
+ return SIGILL;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGINT"))
+#ifdef SIGINT
+ return SIGINT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGKILL"))
+#ifdef SIGKILL
+ return SIGKILL;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGPIPE"))
+#ifdef SIGPIPE
+ return SIGPIPE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGQUIT"))
+#ifdef SIGQUIT
+ return SIGQUIT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGSEGV"))
+#ifdef SIGSEGV
+ return SIGSEGV;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGSTOP"))
+#ifdef SIGSTOP
+ return SIGSTOP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGTERM"))
+#ifdef SIGTERM
+ return SIGTERM;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGTSTP"))
+#ifdef SIGTSTP
+ return SIGTSTP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGTTIN"))
+#ifdef SIGTTIN
+ return SIGTTIN;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGTTOU"))
+#ifdef SIGTTOU
+ return SIGTTOU;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGUSR1"))
+#ifdef SIGUSR1
+ return SIGUSR1;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SIGUSR2"))
+#ifdef SIGUSR2
+ return SIGUSR2;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ if (name[1] == '_') {
+#ifdef S_ISBLK
+ if (strEQ(name, "S_ISBLK")) return S_ISBLK(arg);
+#endif
+#ifdef S_ISCHR
+ if (strEQ(name, "S_ISCHR")) return S_ISCHR(arg);
+#endif
+#ifdef S_ISDIR
+ if (strEQ(name, "S_ISDIR")) return S_ISDIR(arg);
+#endif
+#ifdef S_ISFIFO
+ if (strEQ(name, "S_ISFIFO")) return S_ISFIFO(arg);
+#endif
+#ifdef S_ISREG
+ if (strEQ(name, "S_ISREG")) return S_ISREG(arg);
+#endif
+ if (strEQ(name, "S_ISGID"))
+#ifdef S_ISGID
+ return S_ISGID;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "S_ISUID"))
+#ifdef S_ISUID
+ return S_ISUID;
+#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_IROTH"))
+#ifdef S_IROTH
+ return S_IROTH;
+#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_IRWXG"))
+#ifdef S_IRWXG
+ return S_IRWXG;
+#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_IRWXU"))
+#ifdef S_IRWXU
+ return S_IRWXU;
+#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_IWOTH"))
+#ifdef S_IWOTH
+ return S_IWOTH;
+#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_IXGRP"))
+#ifdef S_IXGRP
+ return S_IXGRP;
+#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_IXUSR"))
+#ifdef S_IXUSR
+ return S_IXUSR;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ if (strEQ(name, "SEEK_CUR"))
+#ifdef SEEK_CUR
+ return SEEK_CUR;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SEEK_END"))
+#ifdef SEEK_END
+ return SEEK_END;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SEEK_SET"))
+#ifdef SEEK_SET
+ return SEEK_SET;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "STREAM_MAX"))
+#ifdef STREAM_MAX
+ return STREAM_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SHRT_MAX"))
+#ifdef SHRT_MAX
+ return SHRT_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SHRT_MIN"))
+#ifdef SHRT_MIN
+ return SHRT_MIN;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SA_NOCLDSTOP"))
+#ifdef SA_NOCLDSTOP
+ return SA_NOCLDSTOP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SCHAR_MAX"))
+#ifdef SCHAR_MAX
+ return SCHAR_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SCHAR_MIN"))
+#ifdef SCHAR_MIN
+ return SCHAR_MIN;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "SSIZE_MAX"))
+#ifdef SSIZE_MAX
+ return SSIZE_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "STDIN_FILENO"))
+#ifdef STDIN_FILENO
+ return STDIN_FILENO;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "STDOUT_FILENO"))
+#ifdef STDOUT_FILENO
+ return STDOUT_FILENO;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "STRERR_FILENO"))
+#ifdef STRERR_FILENO
+ return STRERR_FILENO;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'T':
+ if (strEQ(name, "TCIFLUSH"))
+#ifdef TCIFLUSH
+ return TCIFLUSH;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "TCIOFF"))
+#ifdef TCIOFF
+ return TCIOFF;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "TCIOFLUSH"))
+#ifdef TCIOFLUSH
+ return TCIOFLUSH;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "TCION"))
+#ifdef TCION
+ return TCION;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "TCOFLUSH"))
+#ifdef TCOFLUSH
+ return TCOFLUSH;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "TCOOFF"))
+#ifdef TCOOFF
+ return TCOOFF;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "TCOON"))
+#ifdef TCOON
+ return TCOON;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "TCSADRAIN"))
+#ifdef TCSADRAIN
+ return TCSADRAIN;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "TCSAFLUSH"))
+#ifdef TCSAFLUSH
+ return TCSAFLUSH;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "TCSANOW"))
+#ifdef TCSANOW
+ return TCSANOW;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "TMP_MAX"))
+#ifdef TMP_MAX
+ return TMP_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "TOSTOP"))
+#ifdef TOSTOP
+ return TOSTOP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "TZNAME_MAX"))
+#ifdef TZNAME_MAX
+ return TZNAME_MAX;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'U':
+ if (strEQ(name, "UCHAR_MAX"))
+#ifdef UCHAR_MAX
+ return UCHAR_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "UINT_MAX"))
+#ifdef UINT_MAX
+ return UINT_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "ULONG_MAX"))
+#ifdef ULONG_MAX
+ return ULONG_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "USHRT_MAX"))
+#ifdef USHRT_MAX
+ return USHRT_MAX;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'V':
+ if (strEQ(name, "VEOF"))
+#ifdef VEOF
+ return VEOF;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "VEOL"))
+#ifdef VEOL
+ return VEOL;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "VERASE"))
+#ifdef VERASE
+ return VERASE;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "VINTR"))
+#ifdef VINTR
+ return VINTR;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "VKILL"))
+#ifdef VKILL
+ return VKILL;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "VMIN"))
+#ifdef VMIN
+ return VMIN;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "VQUIT"))
+#ifdef VQUIT
+ return VQUIT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "VSTART"))
+#ifdef VSTART
+ return VSTART;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "VSTOP"))
+#ifdef VSTOP
+ return VSTOP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "VSUSP"))
+#ifdef VSUSP
+ return VSUSP;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "VTIME"))
+#ifdef VTIME
+ return VTIME;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'W':
+ if (strEQ(name, "W_OK"))
+#ifdef W_OK
+ return W_OK;
+#else
+ goto not_there;
+#endif
+#ifdef WEXITSTATUS
+ if (strEQ(name, "WEXITSTATUS")) return WEXITSTATUS(arg);
+#endif
+#ifdef WIFEXITED
+ if (strEQ(name, "WIFEXITED")) return WIFEXITED(arg);
+#endif
+#ifdef WIFSIGNALED
+ if (strEQ(name, "WIFSIGNALED")) return WIFSIGNALED(arg);
+#endif
+#ifdef WIFSTOPPED
+ if (strEQ(name, "WIFSTOPPED")) return WIFSTOPPED(arg);
+#endif
+ if (strEQ(name, "WNOHANG"))
+#ifdef WNOHANG
+ return WNOHANG;
+#else
+ goto not_there;
+#endif
+#ifdef WSTOPSIG
+ if (strEQ(name, "WSTOPSIG")) return WSTOPSIG(arg);
+#endif
+#ifdef WTERMSIG
+ if (strEQ(name, "WTERMSIG")) return WTERMSIG(arg);
+#endif
+ if (strEQ(name, "WUNTRACED"))
+#ifdef WUNTRACED
+ return WUNTRACED;
+#else
+ goto not_there;
+#endif
+ break;
+ case 'X':
+ if (strEQ(name, "X_OK"))
+#ifdef X_OK
+ return X_OK;
+#else
+ goto not_there;
+#endif
+ break;
+ case '_':
+ if (strnEQ(name, "_PC_", 4)) {
+ if (strEQ(name, "_PC_CHOWN_RESTRICTED"))
+#ifdef _PC_CHOWN_RESTRICTED
+ return _PC_CHOWN_RESTRICTED;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_PC_LINK_MAX"))
+#ifdef _PC_LINK_MAX
+ return _PC_LINK_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_PC_MAX_CANON"))
+#ifdef _PC_MAX_CANON
+ return _PC_MAX_CANON;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_PC_MAX_INPUT"))
+#ifdef _PC_MAX_INPUT
+ return _PC_MAX_INPUT;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_PC_NAME_MAX"))
+#ifdef _PC_NAME_MAX
+ return _PC_NAME_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_PC_NO_TRUNC"))
+#ifdef _PC_NO_TRUNC
+ return _PC_NO_TRUNC;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_PC_PATH_MAX"))
+#ifdef _PC_PATH_MAX
+ return _PC_PATH_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_PC_PIPE_BUF"))
+#ifdef _PC_PIPE_BUF
+ return _PC_PIPE_BUF;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_PC_VDISABLE"))
+#ifdef _PC_VDISABLE
+ return _PC_VDISABLE;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ if (strnEQ(name, "_POSIX_", 7)) {
+ if (strEQ(name, "_POSIX_ARG_MAX"))
+#ifdef _POSIX_ARG_MAX
+ return _POSIX_ARG_MAX;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_CHILD_MAX"))
+#ifdef _POSIX_CHILD_MAX
+ return _POSIX_CHILD_MAX;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_CHOWN_RESTRICTED"))
+#ifdef _POSIX_CHOWN_RESTRICTED
+ return _POSIX_CHOWN_RESTRICTED;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_JOB_CONTROL"))
+#ifdef _POSIX_JOB_CONTROL
+ return _POSIX_JOB_CONTROL;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_LINK_MAX"))
+#ifdef _POSIX_LINK_MAX
+ return _POSIX_LINK_MAX;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_MAX_CANON"))
+#ifdef _POSIX_MAX_CANON
+ return _POSIX_MAX_CANON;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_MAX_INPUT"))
+#ifdef _POSIX_MAX_INPUT
+ return _POSIX_MAX_INPUT;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_NAME_MAX"))
+#ifdef _POSIX_NAME_MAX
+ return _POSIX_NAME_MAX;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_NGROUPS_MAX"))
+#ifdef _POSIX_NGROUPS_MAX
+ return _POSIX_NGROUPS_MAX;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_NO_TRUNC"))
+#ifdef _POSIX_NO_TRUNC
+ return _POSIX_NO_TRUNC;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_OPEN_MAX"))
+#ifdef _POSIX_OPEN_MAX
+ return _POSIX_OPEN_MAX;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_PATH_MAX"))
+#ifdef _POSIX_PATH_MAX
+ return _POSIX_PATH_MAX;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_PIPE_BUF"))
+#ifdef _POSIX_PIPE_BUF
+ return _POSIX_PIPE_BUF;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_SAVED_IDS"))
+#ifdef _POSIX_SAVED_IDS
+ return _POSIX_SAVED_IDS;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_SSIZE_MAX"))
+#ifdef _POSIX_SSIZE_MAX
+ return _POSIX_SSIZE_MAX;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_STREAM_MAX"))
+#ifdef _POSIX_STREAM_MAX
+ return _POSIX_STREAM_MAX;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_TZNAME_MAX"))
+#ifdef _POSIX_TZNAME_MAX
+ return _POSIX_TZNAME_MAX;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_VDISABLE"))
+#ifdef _POSIX_VDISABLE
+ return _POSIX_VDISABLE;
+#else
+ return 0;
+#endif
+ if (strEQ(name, "_POSIX_VERSION"))
+#ifdef _POSIX_VERSION
+ return _POSIX_VERSION;
+#else
+ return 0;
+#endif
+ break;
+ }
+ if (strnEQ(name, "_SC_", 4)) {
+ if (strEQ(name, "_SC_ARG_MAX"))
+#ifdef _SC_ARG_MAX
+ return _SC_ARG_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_SC_CHILD_MAX"))
+#ifdef _SC_CHILD_MAX
+ return _SC_CHILD_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_SC_CLK_TCK"))
+#ifdef _SC_CLK_TCK
+ return _SC_CLK_TCK;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_SC_JOB_CONTROL"))
+#ifdef _SC_JOB_CONTROL
+ return _SC_JOB_CONTROL;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_SC_NGROUPS_MAX"))
+#ifdef _SC_NGROUPS_MAX
+ return _SC_NGROUPS_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_SC_OPEN_MAX"))
+#ifdef _SC_OPEN_MAX
+ return _SC_OPEN_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_SC_SAVED_IDS"))
+#ifdef _SC_SAVED_IDS
+ return _SC_SAVED_IDS;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_SC_STREAM_MAX"))
+#ifdef _SC_STREAM_MAX
+ return _SC_STREAM_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_SC_TZNAME_MAX"))
+#ifdef _SC_TZNAME_MAX
+ return _SC_TZNAME_MAX;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_SC_VERSION"))
+#ifdef _SC_VERSION
+ return _SC_VERSION;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ if (strEQ(name, "_IOFBF"))
+#ifdef _IOFBF
+ return _IOFBF;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_IOLBF"))
+#ifdef _IOLBF
+ return _IOLBF;
+#else
+ goto not_there;
+#endif
+ if (strEQ(name, "_IONBF"))
+#ifdef _IONBF
+ return _IONBF;
+#else
+ goto not_there;
+#endif
+ break;
+ }
+ errno = EINVAL;
+ return 0;
+
+not_there:
+ errno = ENOENT;
+ return 0;
+}
+
+MODULE = SigSet PACKAGE = POSIX::SigSet PREFIX = sig
+
+POSIX::SigSet
+new(packname = "POSIX::SigSet", ...)
+ char * packname
+ CODE:
+ {
+ int i;
+ RETVAL = (sigset_t*)safemalloc(sizeof(sigset_t));
+ sigemptyset(RETVAL);
+ for (i = 1; i < items; i++)
+ sigaddset(RETVAL, SvIV(ST(i)));
+ }
+ OUTPUT:
+ RETVAL
+
+void
+DESTROY(sigset)
+ POSIX::SigSet sigset
+ CODE:
+ safefree((char *)sigset);
+
+SysRet
+sigaddset(sigset, sig)
+ POSIX::SigSet sigset
+ int sig
+
+SysRet
+sigdelset(sigset, sig)
+ POSIX::SigSet sigset
+ int sig
+
+SysRet
+sigemptyset(sigset)
+ POSIX::SigSet sigset
+
+SysRet
+sigfillset(sigset)
+ POSIX::SigSet sigset
+
+int
+sigismember(sigset, sig)
+ POSIX::SigSet sigset
+ int sig
+
+
+MODULE = Termios PACKAGE = POSIX::Termios PREFIX = cf
+
+POSIX::Termios
+new(packname = "POSIX::Termios", ...)
+ char * packname
+ CODE:
+ {
+#ifdef I_TERMIOS
+ RETVAL = (struct termios*)safemalloc(sizeof(struct termios));
+#else
+ not_here("termios");
+#endif
+ }
+ OUTPUT:
+ RETVAL
+
+void
+DESTROY(termios_ref)
+ POSIX::Termios termios_ref
+ CODE:
+#ifdef I_TERMIOS
+ safefree((char *)termios_ref);
+#else
+ not_here("termios");
+#endif
+
+SysRet
+getattr(termios_ref, fd = 0)
+ POSIX::Termios termios_ref
+ int fd
+ CODE:
+ RETVAL = tcgetattr(fd, termios_ref);
+ OUTPUT:
+ RETVAL
+
+SysRet
+setattr(termios_ref, fd = 0, optional_actions = 0)
+ POSIX::Termios termios_ref
+ int fd
+ int optional_actions
+ CODE:
+ RETVAL = tcsetattr(fd, optional_actions, termios_ref);
+ OUTPUT:
+ RETVAL
+
+speed_t
+cfgetispeed(termios_ref)
+ POSIX::Termios termios_ref
+
+speed_t
+cfgetospeed(termios_ref)
+ POSIX::Termios termios_ref
+
+tcflag_t
+getiflag(termios_ref)
+ POSIX::Termios termios_ref
+ CODE:
+#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
+ RETVAL = termios_ref->c_iflag;
+#else
+ not_here("getiflag");
+#endif
+ OUTPUT:
+ RETVAL
+
+tcflag_t
+getoflag(termios_ref)
+ POSIX::Termios termios_ref
+ CODE:
+#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
+ RETVAL = termios_ref->c_oflag;
+#else
+ not_here("getoflag");
+#endif
+ OUTPUT:
+ RETVAL
+
+tcflag_t
+getcflag(termios_ref)
+ POSIX::Termios termios_ref
+ CODE:
+#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
+ RETVAL = termios_ref->c_cflag;
+#else
+ not_here("getcflag");
+#endif
+ OUTPUT:
+ RETVAL
+
+tcflag_t
+getlflag(termios_ref)
+ POSIX::Termios termios_ref
+ CODE:
+#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
+ RETVAL = termios_ref->c_lflag;
+#else
+ not_here("getlflag");
+#endif
+ OUTPUT:
+ RETVAL
+
+cc_t
+getcc(termios_ref, ccix)
+ POSIX::Termios termios_ref
+ int ccix
+ CODE:
+#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
+ if (ccix >= NCCS)
+ croak("Bad getcc subscript");
+ RETVAL = termios_ref->c_cc[ccix];
+#else
+ not_here("getcc");
+#endif
+ OUTPUT:
+ RETVAL
+
+SysRet
+cfsetispeed(termios_ref, speed)
+ POSIX::Termios termios_ref
+ speed_t speed
+
+SysRet
+cfsetospeed(termios_ref, speed)
+ POSIX::Termios termios_ref
+ speed_t speed
+
+void
+setiflag(termios_ref, iflag)
+ POSIX::Termios termios_ref
+ tcflag_t iflag
+ CODE:
+#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
+ termios_ref->c_iflag = iflag;
+#else
+ not_here("setiflag");
+#endif
+
+void
+setoflag(termios_ref, oflag)
+ POSIX::Termios termios_ref
+ tcflag_t oflag
+ CODE:
+#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
+ termios_ref->c_oflag = oflag;
+#else
+ not_here("setoflag");
+#endif
+
+void
+setcflag(termios_ref, cflag)
+ POSIX::Termios termios_ref
+ tcflag_t cflag
+ CODE:
+#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
+ termios_ref->c_cflag = cflag;
+#else
+ not_here("setcflag");
+#endif
+
+void
+setlflag(termios_ref, lflag)
+ POSIX::Termios termios_ref
+ tcflag_t lflag
+ CODE:
+#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
+ termios_ref->c_lflag = lflag;
+#else
+ not_here("setlflag");
+#endif
+
+void
+setcc(termios_ref, ccix, cc)
+ POSIX::Termios termios_ref
+ int ccix
+ cc_t cc
+ CODE:
+#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
+ if (ccix >= NCCS)
+ croak("Bad setcc subscript");
+ termios_ref->c_cc[ccix] = cc;
+#else
+ not_here("setcc");
+#endif
+
+
+
+MODULE = FileHandle PACKAGE = FileHandle PREFIX = f
+
+SV *
+fgetpos(handle)
+ InputStream handle
+ CODE:
+ {
+ Fpos_t pos;
+ fgetpos(handle, &pos);
+ ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t)));
+ }
+
+SysRet
+fsetpos(handle, pos)
+ InputStream handle
+ SV * pos
+ CODE:
+ RETVAL = fsetpos(handle, (Fpos_t*)SvPVX(pos));
+ OUTPUT:
+ RETVAL
+
+int
+ungetc(handle, c)
+ InputStream handle
+ int c
+ CODE:
+ RETVAL = ungetc(c, handle);
+ OUTPUT:
+ RETVAL
+
+OutputStream
+new_tmpfile()
+ CODE:
+ RETVAL = tmpfile();
+ OUTPUT:
+ RETVAL
+
+int
+ferror(handle)
+ InputStream handle
+
+SysRet
+fflush(handle)
+ OutputStream handle
+
+void
+setbuf(handle, buf)
+ OutputStream handle
+ char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0;
+
+SysRet
+setvbuf(handle, buf, type, size)
+ OutputStream handle
+ char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
+ int type
+ int size
+
+MODULE = POSIX PACKAGE = POSIX
+
+double
+constant(name,arg)
+ char * name
+ int arg
+
+int
+isalnum(charstring)
+ char * charstring
+ CODE:
+ char *s;
+ RETVAL = 1;
+ for (s = charstring; *s && RETVAL; s++)
+ if (!isalnum(*s))
+ RETVAL = 0;
+ OUTPUT:
+ RETVAL
+
+int
+isalpha(charstring)
+ char * charstring
+ CODE:
+ char *s;
+ RETVAL = 1;
+ for (s = charstring; *s && RETVAL; s++)
+ if (!isalpha(*s))
+ RETVAL = 0;
+ OUTPUT:
+ RETVAL
+
+int
+iscntrl(charstring)
+ char * charstring
+ CODE:
+ char *s;
+ RETVAL = 1;
+ for (s = charstring; *s && RETVAL; s++)
+ if (!iscntrl(*s))
+ RETVAL = 0;
+ OUTPUT:
+ RETVAL
+
+int
+isdigit(charstring)
+ char * charstring
+ CODE:
+ char *s;
+ RETVAL = 1;
+ for (s = charstring; *s && RETVAL; s++)
+ if (!isdigit(*s))
+ RETVAL = 0;
+ OUTPUT:
+ RETVAL
+
+int
+isgraph(charstring)
+ char * charstring
+ CODE:
+ char *s;
+ RETVAL = 1;
+ for (s = charstring; *s && RETVAL; s++)
+ if (!isgraph(*s))
+ RETVAL = 0;
+ OUTPUT:
+ RETVAL
+
+int
+islower(charstring)
+ char * charstring
+ CODE:
+ char *s;
+ RETVAL = 1;
+ for (s = charstring; *s && RETVAL; s++)
+ if (!islower(*s))
+ RETVAL = 0;
+ OUTPUT:
+ RETVAL
+
+int
+isprint(charstring)
+ char * charstring
+ CODE:
+ char *s;
+ RETVAL = 1;
+ for (s = charstring; *s && RETVAL; s++)
+ if (!isprint(*s))
+ RETVAL = 0;
+ OUTPUT:
+ RETVAL
+
+int
+ispunct(charstring)
+ char * charstring
+ CODE:
+ char *s;
+ RETVAL = 1;
+ for (s = charstring; *s && RETVAL; s++)
+ if (!ispunct(*s))
+ RETVAL = 0;
+ OUTPUT:
+ RETVAL
+
+int
+isspace(charstring)
+ char * charstring
+ CODE:
+ char *s;
+ RETVAL = 1;
+ for (s = charstring; *s && RETVAL; s++)
+ if (!isspace(*s))
+ RETVAL = 0;
+ OUTPUT:
+ RETVAL
+
+int
+isupper(charstring)
+ char * charstring
+ CODE:
+ char *s;
+ RETVAL = 1;
+ for (s = charstring; *s && RETVAL; s++)
+ if (!isupper(*s))
+ RETVAL = 0;
+ OUTPUT:
+ RETVAL
+
+int
+isxdigit(charstring)
+ char * charstring
+ CODE:
+ char *s;
+ RETVAL = 1;
+ for (s = charstring; *s && RETVAL; s++)
+ if (!isxdigit(*s))
+ RETVAL = 0;
+ OUTPUT:
+ RETVAL
+
+SysRet
+open(filename, flags = O_RDONLY, mode = 0666)
+ char * filename
+ int flags
+ Mode_t mode
+
+HV *
+localeconv()
+ CODE:
+#ifdef HAS_LOCALECONV
+ struct lconv *lcbuf;
+ RETVAL = newHV();
+ if (lcbuf = localeconv()) {
+ /* the strings */
+ if (lcbuf->decimal_point && *lcbuf->decimal_point)
+ hv_store(RETVAL, "decimal_point", 13,
+ newSVpv(lcbuf->decimal_point, 0), 0);
+ if (lcbuf->thousands_sep && *lcbuf->thousands_sep)
+ hv_store(RETVAL, "thousands_sep", 13,
+ newSVpv(lcbuf->thousands_sep, 0), 0);
+ if (lcbuf->grouping && *lcbuf->grouping)
+ hv_store(RETVAL, "grouping", 8,
+ newSVpv(lcbuf->grouping, 0), 0);
+ if (lcbuf->int_curr_symbol && *lcbuf->int_curr_symbol)
+ hv_store(RETVAL, "int_curr_symbol", 15,
+ newSVpv(lcbuf->int_curr_symbol, 0), 0);
+ if (lcbuf->currency_symbol && *lcbuf->currency_symbol)
+ hv_store(RETVAL, "currency_symbol", 15,
+ newSVpv(lcbuf->currency_symbol, 0), 0);
+ if (lcbuf->mon_decimal_point && *lcbuf->mon_decimal_point)
+ hv_store(RETVAL, "mon_decimal_point", 17,
+ newSVpv(lcbuf->mon_decimal_point, 0), 0);
+ if (lcbuf->mon_thousands_sep && *lcbuf->mon_thousands_sep)
+ hv_store(RETVAL, "mon_thousands_sep", 17,
+ newSVpv(lcbuf->mon_thousands_sep, 0), 0);
+ if (lcbuf->mon_grouping && *lcbuf->mon_grouping)
+ hv_store(RETVAL, "mon_grouping", 12,
+ newSVpv(lcbuf->mon_grouping, 0), 0);
+ if (lcbuf->positive_sign && *lcbuf->positive_sign)
+ hv_store(RETVAL, "positive_sign", 13,
+ newSVpv(lcbuf->positive_sign, 0), 0);
+ if (lcbuf->negative_sign && *lcbuf->negative_sign)
+ hv_store(RETVAL, "negative_sign", 13,
+ newSVpv(lcbuf->negative_sign, 0), 0);
+ /* the integers */
+ if (lcbuf->int_frac_digits != CHAR_MAX)
+ hv_store(RETVAL, "int_frac_digits", 15,
+ newSViv(lcbuf->int_frac_digits), 0);
+ if (lcbuf->frac_digits != CHAR_MAX)
+ hv_store(RETVAL, "frac_digits", 11,
+ newSViv(lcbuf->frac_digits), 0);
+ if (lcbuf->p_cs_precedes != CHAR_MAX)
+ hv_store(RETVAL, "p_cs_precedes", 13,
+ newSViv(lcbuf->p_cs_precedes), 0);
+ if (lcbuf->p_sep_by_space != CHAR_MAX)
+ hv_store(RETVAL, "p_sep_by_space", 14,
+ newSViv(lcbuf->p_sep_by_space), 0);
+ if (lcbuf->n_cs_precedes != CHAR_MAX)
+ hv_store(RETVAL, "n_cs_precedes", 13,
+ newSViv(lcbuf->n_cs_precedes), 0);
+ if (lcbuf->n_sep_by_space != CHAR_MAX)
+ hv_store(RETVAL, "n_sep_by_space", 14,
+ newSViv(lcbuf->n_sep_by_space), 0);
+ if (lcbuf->p_sign_posn != CHAR_MAX)
+ hv_store(RETVAL, "p_sign_posn", 11,
+ newSViv(lcbuf->p_sign_posn), 0);
+ if (lcbuf->n_sign_posn != CHAR_MAX)
+ hv_store(RETVAL, "n_sign_posn", 11,
+ newSViv(lcbuf->n_sign_posn), 0);
+ }
+#else
+ localeconv(); /* A stub to call not_here(). */
+#endif
+ OUTPUT:
+ RETVAL
+
+char *
+setlocale(category, locale)
+ int category
+ char * locale
+
+double
+acos(x)
+ double x
+
+double
+asin(x)
+ double x
+
+double
+atan(x)
+ double x
+
+double
+ceil(x)
+ double x
+
+double
+cosh(x)
+ double x
+
+double
+floor(x)
+ double x
+
+double
+fmod(x,y)
+ double x
+ double y
+
+void
+frexp(x)
+ double x
+ PPCODE:
+ int expvar;
+ /* (We already know stack is long enough.) */
+ PUSHs(sv_2mortal(newSVnv(frexp(x,&expvar))));
+ PUSHs(sv_2mortal(newSViv(expvar)));
+
+double
+ldexp(x,exp)
+ double x
+ int exp
+
+double
+log10(x)
+ double x
+
+void
+modf(x)
+ double x
+ PPCODE:
+ double intvar;
+ /* (We already know stack is long enough.) */
+ PUSHs(sv_2mortal(newSVnv(modf(x,&intvar))));
+ PUSHs(sv_2mortal(newSVnv(intvar)));
+
+double
+sinh(x)
+ double x
+
+double
+tanh(x)
+ double x
+
+SysRet
+sigaction(sig, action, oldaction = 0)
+ int sig
+ POSIX::SigAction action
+ POSIX::SigAction oldaction
+ CODE:
+
+# This code is really grody because we're trying to make the signal
+# interface look beautiful, which is hard.
+
+ if (!siggv)
+ gv_fetchpv("SIG", TRUE, SVt_PVHV);
+
+ {
+ struct sigaction act;
+ struct sigaction oact;
+ POSIX__SigSet sigset;
+ SV** svp;
+ SV** sigsvp = hv_fetch(GvHVn(siggv),
+ sig_name[sig],
+ strlen(sig_name[sig]),
+ TRUE);
+
+ /* Remember old handler name if desired. */
+ if (oldaction) {
+ char *hand = SvPVx(*sigsvp, na);
+ svp = hv_fetch(oldaction, "HANDLER", 7, TRUE);
+ sv_setpv(*svp, *hand ? hand : "DEFAULT");
+ }
+
+ if (action) {
+ /* Vector new handler through %SIG. (We always use sighandler
+ for the C signal handler, which reads %SIG to dispatch.) */
+ svp = hv_fetch(action, "HANDLER", 7, FALSE);
+ if (!svp)
+ croak("Can't supply an action without a HANDLER");
+ sv_setpv(*sigsvp, SvPV(*svp, na));
+ mg_set(*sigsvp); /* handles DEFAULT and IGNORE */
+ act.sa_handler = sighandler;
+
+ /* Set up any desired mask. */
+ svp = hv_fetch(action, "MASK", 4, FALSE);
+ if (svp && sv_isa(*svp, "POSIX::SigSet")) {
+ unsigned long tmp;
+ tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
+ sigset = (sigset_t*) tmp;
+ act.sa_mask = *sigset;
+ }
+ else
+ sigemptyset(& act.sa_mask);
+
+ /* Set up any desired flags. */
+ svp = hv_fetch(action, "FLAGS", 5, FALSE);
+ act.sa_flags = svp ? SvIV(*svp) : 0;
+ }
+
+ /* Now work around sigaction oddities */
+ if (action && oldaction)
+ RETVAL = sigaction(sig, & act, & oact);
+ else if (action)
+ RETVAL = sigaction(sig, & act, (struct sigaction*)0);
+ else if (oldaction)
+ RETVAL = sigaction(sig, (struct sigaction*)0, & oact);
+ else
+ RETVAL = -1;
+
+ if (oldaction) {
+ /* Get back the mask. */
+ svp = hv_fetch(oldaction, "MASK", 4, TRUE);
+ if (sv_isa(*svp, "POSIX::SigSet")) {
+ unsigned long tmp;
+ tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
+ sigset = (sigset_t*) tmp;
+ }
+ else {
+ sigset = (sigset_t*)safemalloc(sizeof(sigset_t));
+ sv_setptrobj(*svp, sigset, "POSIX::SigSet");
+ }
+ *sigset = oact.sa_mask;
+
+ /* Get back the flags. */
+ svp = hv_fetch(oldaction, "FLAGS", 5, TRUE);
+ sv_setiv(*svp, oact.sa_flags);
+ }
+ }
+ OUTPUT:
+ RETVAL
+
+SysRet
+sigpending(sigset)
+ POSIX::SigSet sigset
+
+SysRet
+sigprocmask(how, sigset, oldsigset = 0)
+ int how
+ POSIX::SigSet sigset
+ POSIX::SigSet oldsigset
+
+SysRet
+sigsuspend(signal_mask)
+ POSIX::SigSet signal_mask
+
+void
+_exit(status)
+ int status
+
+SysRet
+close(fd)
+ int fd
+
+SysRet
+dup(fd)
+ int fd
+
+SysRet
+dup2(fd1, fd2)
+ int fd1
+ int fd2
+
+SysRet
+lseek(fd, offset, whence)
+ int fd
+ Off_t offset
+ int whence
+
+SysRet
+nice(incr)
+ int incr
+
+int
+pipe()
+ PPCODE:
+ int fds[2];
+ if (pipe(fds) != -1) {
+ EXTEND(sp,2);
+ PUSHs(sv_2mortal(newSViv(fds[0])));
+ PUSHs(sv_2mortal(newSViv(fds[1])));
+ }
+
+SysRet
+read(fd, buffer, nbytes)
+ int fd
+ char * buffer = sv_grow(ST(1),SvIV(ST(2))+1);
+ size_t nbytes
+ CLEANUP:
+ if (RETVAL >= 0) {
+ SvCUR(ST(1)) = RETVAL;
+ SvPOK_only(ST(1));
+ *SvEND(ST(1)) = '\0';
+ if (tainting)
+ sv_magic(ST(1), 0, 't', 0, 0);
+ }
+
+SysRet
+setgid(gid)
+ Gid_t gid
+
+SysRet
+setpgid(pid, pgid)
+ pid_t pid
+ pid_t pgid
+
+pid_t
+setsid()
+
+SysRet
+setuid(uid)
+ Uid_t uid
+
+pid_t
+tcgetpgrp(fd)
+ int fd
+
+SysRet
+tcsetpgrp(fd, pgrp_id)
+ int fd
+ pid_t pgrp_id
+
+int
+uname()
+ PPCODE:
+#ifdef HAS_UNAME
+ struct utsname buf;
+ if (uname(&buf) >= 0) {
+ EXTEND(sp, 5);
+ PUSHs(sv_2mortal(newSVpv(buf.sysname, 0)));
+ PUSHs(sv_2mortal(newSVpv(buf.nodename, 0)));
+ PUSHs(sv_2mortal(newSVpv(buf.release, 0)));
+ PUSHs(sv_2mortal(newSVpv(buf.version, 0)));
+ PUSHs(sv_2mortal(newSVpv(buf.machine, 0)));
+ }
+#else
+ uname((char *) 0); /* A stub to call not_here(). */
+#endif
+
+SysRet
+write(fd, buffer, nbytes)
+ int fd
+ char * buffer
+ size_t nbytes
+
+char *
+tmpnam(s = 0)
+ char * s = 0;
+
+void
+abort()
+
+int
+mblen(s, n)
+ char * s
+ size_t n
+
+size_t
+mbstowcs(s, pwcs, n)
+ wchar_t * s
+ char * pwcs
+ size_t n
+
+int
+mbtowc(pwc, s, n)
+ wchar_t * pwc
+ char * s
+ size_t n
+
+int
+wcstombs(s, pwcs, n)
+ char * s
+ wchar_t * pwcs
+ size_t n
+
+int
+wctomb(s, wchar)
+ char * s
+ wchar_t wchar
+
+int
+strcoll(s1, s2)
+ char * s1
+ char * s2
+
+SV *
+strxfrm(src)
+ SV * src
+ CODE:
+ {
+ STRLEN srclen;
+ STRLEN dstlen;
+ char *p = SvPV(src,srclen);
+ srclen++;
+ ST(0) = sv_2mortal(newSV(srclen));
+ dstlen = strxfrm(SvPVX(ST(0)), p, (size_t)srclen);
+ if (dstlen > srclen) {
+ dstlen++;
+ SvGROW(ST(0), dstlen);
+ strxfrm(SvPVX(ST(0)), p, (size_t)dstlen);
+ dstlen--;
+ }
+ SvCUR(ST(0)) = dstlen;
+ SvPOK_only(ST(0));
+ }
+
+SysRet
+mkfifo(filename, mode)
+ char * filename
+ Mode_t mode
+
+SysRet
+tcdrain(fd)
+ int fd
+
+
+SysRet
+tcflow(fd, action)
+ int fd
+ int action
+
+
+SysRet
+tcflush(fd, queue_selector)
+ int fd
+ int queue_selector
+
+SysRet
+tcsendbreak(fd, duration)
+ int fd
+ int duration
+
+char *
+asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
+ int sec
+ int min
+ int hour
+ int mday
+ int mon
+ int year
+ int wday
+ int yday
+ int isdst
+ CODE:
+ {
+ struct tm mytm;
+ mytm.tm_sec = sec;
+ mytm.tm_min = min;
+ mytm.tm_hour = hour;
+ mytm.tm_mday = mday;
+ mytm.tm_mon = mon;
+ mytm.tm_year = year;
+ mytm.tm_wday = wday;
+ mytm.tm_yday = yday;
+ mytm.tm_isdst = isdst;
+ RETVAL = asctime(&mytm);
+ }
+ OUTPUT:
+ RETVAL
+
+long
+clock()
+
+char *
+ctime(time)
+ Time_t * time
+
+double
+difftime(time1, time2)
+ Time_t time1
+ Time_t time2
+
+SysRetLong
+mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
+ int sec
+ int min
+ int hour
+ int mday
+ int mon
+ int year
+ int wday
+ int yday
+ int isdst
+ CODE:
+ {
+ struct tm mytm;
+ mytm.tm_sec = sec;
+ mytm.tm_min = min;
+ mytm.tm_hour = hour;
+ mytm.tm_mday = mday;
+ mytm.tm_mon = mon;
+ mytm.tm_year = year;
+ mytm.tm_wday = wday;
+ mytm.tm_yday = yday;
+ mytm.tm_isdst = isdst;
+ RETVAL = mktime(&mytm);
+ }
+ OUTPUT:
+ RETVAL
+
+char *
+strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
+ char * fmt
+ int sec
+ int min
+ int hour
+ int mday
+ int mon
+ int year
+ int wday
+ int yday
+ int isdst
+ CODE:
+ {
+ char tmpbuf[128];
+ struct tm mytm;
+ int len;
+ mytm.tm_sec = sec;
+ mytm.tm_min = min;
+ mytm.tm_hour = hour;
+ mytm.tm_mday = mday;
+ mytm.tm_mon = mon;
+ mytm.tm_year = year;
+ mytm.tm_wday = wday;
+ mytm.tm_yday = yday;
+ mytm.tm_isdst = isdst;
+ len = strftime(tmpbuf, sizeof tmpbuf, fmt, &mytm);
+ ST(0) = sv_2mortal(newSVpv(tmpbuf, len));
+ }
+
+void
+tzset()
+
+void
+tzname()
+ PPCODE:
+ EXTEND(sp,2);
+ PUSHs(sv_2mortal(newSVpv(tzname[0],strlen(tzname[0]))));
+ PUSHs(sv_2mortal(newSVpv(tzname[1],strlen(tzname[1]))));
+
+SysRet
+access(filename, mode)
+ char * filename
+ Mode_t mode
+
+char *
+ctermid(s = 0)
+ char * s = 0;
+
+char *
+cuserid(s = 0)
+ char * s = 0;
+
+SysRetLong
+fpathconf(fd, name)
+ int fd
+ int name
+
+SysRetLong
+pathconf(filename, name)
+ char * filename
+ int name
+
+SysRet
+pause()
+
+SysRetLong
+sysconf(name)
+ int name
+
+char *
+ttyname(fd)
+ int fd