5 #ifdef I_DIRENT /* XXX maybe better to just rely on perl.h? */
30 /* XXX This comment is just to make I_TERMIO and I_SGTTY visible to
31 metaconfig for future extension writers. We don't use them in POSIX.
32 (This is really sneaky :-) --AD
34 #if defined(I_TERMIOS)
43 #include <sys/times.h>
44 #include <sys/types.h>
46 #include <sys/utsname.h>
55 typedef FILE * InputStream;
56 typedef FILE * OutputStream;
58 typedef long SysRetLong;
59 typedef sigset_t* POSIX__SigSet;
60 typedef HV* POSIX__SigAction;
62 typedef struct termios* POSIX__Termios;
63 #else /* Define termios types to int, and call not_here for the functions.*/
64 #define POSIX__Termios int
68 #define cfgetispeed(x) not_here("cfgetispeed")
69 #define cfgetospeed(x) not_here("cfgetospeed")
70 #define tcdrain(x) not_here("tcdrain")
71 #define tcflush(x,y) not_here("tcflush")
72 #define tcsendbreak(x,y) not_here("tcsendbreak")
73 #define cfsetispeed(x,y) not_here("cfsetispeed")
74 #define cfsetospeed(x,y) not_here("cfsetospeed")
75 #define ctermid(x) (char *) not_here("ctermid")
76 #define tcflow(x,y) not_here("tcflow")
77 #define tcgetattr(x,y) not_here("tcgetattr")
78 #define tcsetattr(x,y,z) not_here("tcsetattr")
81 /* Possibly needed prototypes */
82 char *cuserid _((char *));
85 #define cuserid(a) (char *) not_here("cuserid")
89 #define difftime(a,b) not_here("difftime")
93 #define fpathconf(f,n) (SysRetLong) not_here("fpathconf")
96 #define mktime(a) not_here("mktime")
99 #define nice(a) not_here("nice")
102 #define pathconf(f,n) (SysRetLong) not_here("pathconf")
105 #define sysconf(n) (SysRetLong) not_here("sysconf")
108 #define readlink(a,b,c) not_here("readlink")
111 #define setpgid(a,b) not_here("setpgid")
114 #define setsid() not_here("setsid")
117 #define strcoll(s1,s2) not_here("strcoll")
120 #define strxfrm(s1,s2,n) not_here("strxfrm")
122 #ifndef HAS_TCGETPGRP
123 #define tcgetpgrp(a) not_here("tcgetpgrp")
125 #ifndef HAS_TCSETPGRP
126 #define tcsetpgrp(a,b) not_here("tcsetpgrp")
129 #define times(a) not_here("times")
132 #define uname(a) not_here("uname")
135 #define waitpid(a,b,c) not_here("waitpid")
139 #define fgetpos(a,b) not_here("fgetpos")
142 #define fsetpos(a,b) not_here("fsetpos")
147 #define mblen(a,b) not_here("mblen")
151 #define mbstowcs(s, pwcs, n) not_here("mbstowcs")
154 #define mbtowc(pwc, s, n) not_here("mbtowc")
157 #define wcstombs(s, pwcs, n) not_here("wcstombs")
160 #define wctomb(s, wchar) not_here("wcstombs")
162 #if !defined(HAS_MBLEN) && !defined(HAS_MBSTOWCS) && !defined(HAS_MBTOWC) && !defined(HAS_WCSTOMBS) && !defined(HAS_WCTOMB)
163 /* If we don't have these functions, then we wouldn't have gotten a typedef
164 for wchar_t, the wide character type. Defining wchar_t allows the
165 functions referencing it to compile. Its actual type is then meaningless,
166 since without the above functions, all sections using it end up calling
167 not_here() and croak. --Kaveh Ghazi (ghazi@noc.rutgers.edu) 9/18/94. */
173 #ifndef HAS_LOCALECONV
174 #define localeconv() not_here("localeconv")
178 extern char *tzname[];
180 char *tzname[] = { "" , "" };
183 #ifndef HAS_LONG_DOUBLE /* XXX What to do about long doubles? */
199 croak("POSIX::%s not implemented on this architecture", s);
211 if (strEQ(name, "ARG_MAX"))
219 if (strEQ(name, "BUFSIZ"))
225 if (strEQ(name, "BRKINT"))
231 if (strEQ(name, "B9600"))
237 if (strEQ(name, "B19200"))
243 if (strEQ(name, "B38400"))
249 if (strEQ(name, "B0"))
255 if (strEQ(name, "B110"))
261 if (strEQ(name, "B1200"))
267 if (strEQ(name, "B134"))
273 if (strEQ(name, "B150"))
279 if (strEQ(name, "B1800"))
285 if (strEQ(name, "B200"))
291 if (strEQ(name, "B2400"))
297 if (strEQ(name, "B300"))
303 if (strEQ(name, "B4800"))
309 if (strEQ(name, "B50"))
315 if (strEQ(name, "B600"))
321 if (strEQ(name, "B75"))
329 if (strEQ(name, "CHAR_BIT"))
335 if (strEQ(name, "CHAR_MAX"))
341 if (strEQ(name, "CHAR_MIN"))
347 if (strEQ(name, "CHILD_MAX"))
353 if (strEQ(name, "CLK_TCK"))
359 if (strEQ(name, "CLOCAL"))
365 if (strEQ(name, "CLOCKS_PER_SEC"))
366 #ifdef CLOCKS_PER_SEC
367 return CLOCKS_PER_SEC;
371 if (strEQ(name, "CREAD"))
377 if (strEQ(name, "CS5"))
383 if (strEQ(name, "CS6"))
389 if (strEQ(name, "CS7"))
395 if (strEQ(name, "CS8"))
401 if (strEQ(name, "CSIZE"))
407 if (strEQ(name, "CSTOPB"))
415 if (strEQ(name, "DBL_MAX"))
421 if (strEQ(name, "DBL_MIN"))
427 if (strEQ(name, "DBL_DIG"))
433 if (strEQ(name, "DBL_EPSILON"))
439 if (strEQ(name, "DBL_MANT_DIG"))
445 if (strEQ(name, "DBL_MAX_10_EXP"))
446 #ifdef DBL_MAX_10_EXP
447 return DBL_MAX_10_EXP;
451 if (strEQ(name, "DBL_MAX_EXP"))
457 if (strEQ(name, "DBL_MIN_10_EXP"))
458 #ifdef DBL_MIN_10_EXP
459 return DBL_MIN_10_EXP;
463 if (strEQ(name, "DBL_MIN_EXP"))
473 if (strEQ(name, "EACCES"))
479 if (strEQ(name, "EAGAIN"))
487 if (strEQ(name, "EBADF"))
493 if (strEQ(name, "EBUSY"))
501 if (strEQ(name, "ECHILD"))
507 if (strEQ(name, "ECHO"))
513 if (strEQ(name, "ECHOE"))
519 if (strEQ(name, "ECHOK"))
525 if (strEQ(name, "ECHONL"))
533 if (strEQ(name, "EDEADLK"))
539 if (strEQ(name, "EDOM"))
547 if (strEQ(name, "EEXIST"))
555 if (strEQ(name, "EFAULT"))
561 if (strEQ(name, "EFBIG"))
569 if (strEQ(name, "EINTR"))
575 if (strEQ(name, "EINVAL"))
581 if (strEQ(name, "EIO"))
587 if (strEQ(name, "EISDIR"))
595 if (strEQ(name, "EMFILE"))
601 if (strEQ(name, "EMLINK"))
609 if (strEQ(name, "ENOMEM"))
615 if (strEQ(name, "ENOSPC"))
621 if (strEQ(name, "ENOEXEC"))
627 if (strEQ(name, "ENOTTY"))
633 if (strEQ(name, "ENOTDIR"))
639 if (strEQ(name, "ENOTEMPTY"))
645 if (strEQ(name, "ENFILE"))
651 if (strEQ(name, "ENODEV"))
657 if (strEQ(name, "ENOENT"))
663 if (strEQ(name, "ENOLCK"))
669 if (strEQ(name, "ENOSYS"))
675 if (strEQ(name, "ENXIO"))
681 if (strEQ(name, "ENAMETOOLONG"))
689 if (strEQ(name, "EOF"))
697 if (strEQ(name, "EPERM"))
703 if (strEQ(name, "EPIPE"))
711 if (strEQ(name, "ERANGE"))
717 if (strEQ(name, "EROFS"))
725 if (strEQ(name, "ESPIPE"))
731 if (strEQ(name, "ESRCH"))
739 if (strEQ(name, "EXIT_FAILURE"))
745 if (strEQ(name, "EXIT_SUCCESS"))
751 if (strEQ(name, "EXDEV"))
759 if (strEQ(name, "E2BIG"))
767 if (strnEQ(name, "FLT_", 4)) {
768 if (strEQ(name, "FLT_MAX"))
774 if (strEQ(name, "FLT_MIN"))
780 if (strEQ(name, "FLT_ROUNDS"))
786 if (strEQ(name, "FLT_DIG"))
792 if (strEQ(name, "FLT_EPSILON"))
798 if (strEQ(name, "FLT_MANT_DIG"))
804 if (strEQ(name, "FLT_MAX_10_EXP"))
805 #ifdef FLT_MAX_10_EXP
806 return FLT_MAX_10_EXP;
810 if (strEQ(name, "FLT_MAX_EXP"))
816 if (strEQ(name, "FLT_MIN_10_EXP"))
817 #ifdef FLT_MIN_10_EXP
818 return FLT_MIN_10_EXP;
822 if (strEQ(name, "FLT_MIN_EXP"))
828 if (strEQ(name, "FLT_RADIX"))
836 if (strnEQ(name, "F_", 2)) {
837 if (strEQ(name, "F_DUPFD"))
843 if (strEQ(name, "F_GETFD"))
849 if (strEQ(name, "F_GETFL"))
855 if (strEQ(name, "F_GETLK"))
861 if (strEQ(name, "F_OK"))
867 if (strEQ(name, "F_RDLCK"))
873 if (strEQ(name, "F_SETFD"))
879 if (strEQ(name, "F_SETFL"))
885 if (strEQ(name, "F_SETLK"))
891 if (strEQ(name, "F_SETLKW"))
897 if (strEQ(name, "F_UNLCK"))
903 if (strEQ(name, "F_WRLCK"))
911 if (strEQ(name, "FD_CLOEXEC")) return FD_CLOEXEC;
912 if (strEQ(name, "FILENAME_MAX"))
920 if (strEQ(name, "HUGE_VAL"))
926 if (strEQ(name, "HUPCL"))
934 if (strEQ(name, "INT_MAX"))
940 if (strEQ(name, "INT_MIN"))
946 if (strEQ(name, "ICANON"))
952 if (strEQ(name, "ICRNL"))
958 if (strEQ(name, "IEXTEN"))
964 if (strEQ(name, "IGNBRK"))
970 if (strEQ(name, "IGNCR"))
976 if (strEQ(name, "IGNPAR"))
982 if (strEQ(name, "INLCR"))
988 if (strEQ(name, "INPCK"))
994 if (strEQ(name, "ISIG"))
1000 if (strEQ(name, "ISTRIP"))
1006 if (strEQ(name, "IXOFF"))
1012 if (strEQ(name, "IXON"))
1020 if (strnEQ(name, "LC_", 3)) {
1021 if (strEQ(name, "LC_ALL"))
1027 if (strEQ(name, "LC_COLLATE"))
1033 if (strEQ(name, "LC_CTYPE"))
1039 if (strEQ(name, "LC_MONETARY"))
1045 if (strEQ(name, "LC_NUMERIC"))
1051 if (strEQ(name, "LC_TIME"))
1059 if (strnEQ(name, "LDBL_", 5)) {
1060 if (strEQ(name, "LDBL_MAX"))
1066 if (strEQ(name, "LDBL_MIN"))
1072 if (strEQ(name, "LDBL_DIG"))
1078 if (strEQ(name, "LDBL_EPSILON"))
1080 return LDBL_EPSILON;
1084 if (strEQ(name, "LDBL_MANT_DIG"))
1085 #ifdef LDBL_MANT_DIG
1086 return LDBL_MANT_DIG;
1090 if (strEQ(name, "LDBL_MAX_10_EXP"))
1091 #ifdef LDBL_MAX_10_EXP
1092 return LDBL_MAX_10_EXP;
1096 if (strEQ(name, "LDBL_MAX_EXP"))
1098 return LDBL_MAX_EXP;
1102 if (strEQ(name, "LDBL_MIN_10_EXP"))
1103 #ifdef LDBL_MIN_10_EXP
1104 return LDBL_MIN_10_EXP;
1108 if (strEQ(name, "LDBL_MIN_EXP"))
1110 return LDBL_MIN_EXP;
1116 if (strnEQ(name, "L_", 2)) {
1117 if (strEQ(name, "L_ctermid"))
1123 if (strEQ(name, "L_cuserid"))
1129 if (strEQ(name, "L_tmpname"))
1137 if (strEQ(name, "LONG_MAX"))
1143 if (strEQ(name, "LONG_MIN"))
1149 if (strEQ(name, "LINK_MAX"))
1157 if (strEQ(name, "MAX_CANON"))
1163 if (strEQ(name, "MAX_INPUT"))
1169 if (strEQ(name, "MB_CUR_MAX"))
1175 if (strEQ(name, "MB_LEN_MAX"))
1183 if (strEQ(name, "NULL")) return 0;
1184 if (strEQ(name, "NAME_MAX"))
1190 if (strEQ(name, "NCCS"))
1196 if (strEQ(name, "NGROUPS_MAX"))
1202 if (strEQ(name, "NOFLSH"))
1210 if (strnEQ(name, "O_", 2)) {
1211 if (strEQ(name, "O_APPEND"))
1217 if (strEQ(name, "O_CREAT"))
1223 if (strEQ(name, "O_TRUNC"))
1229 if (strEQ(name, "O_RDONLY"))
1235 if (strEQ(name, "O_RDWR"))
1241 if (strEQ(name, "O_WRONLY"))
1247 if (strEQ(name, "O_EXCL"))
1253 if (strEQ(name, "O_NOCTTY"))
1259 if (strEQ(name, "O_NONBLOCK"))
1265 if (strEQ(name, "O_ACCMODE"))
1273 if (strEQ(name, "OPEN_MAX"))
1279 if (strEQ(name, "OPOST"))
1287 if (strEQ(name, "PATH_MAX"))
1293 if (strEQ(name, "PARENB"))
1299 if (strEQ(name, "PARMRK"))
1305 if (strEQ(name, "PARODD"))
1311 if (strEQ(name, "PIPE_BUF"))
1319 if (strEQ(name, "RAND_MAX"))
1325 if (strEQ(name, "R_OK"))
1333 if (strnEQ(name, "SIG", 3)) {
1334 if (name[3] == '_') {
1335 if (strEQ(name, "SIG_BLOCK"))
1342 if (strEQ(name, "SIG_DFL")) return (int)SIG_DFL;
1345 if (strEQ(name, "SIG_ERR")) return (int)SIG_ERR;
1348 if (strEQ(name, "SIG_IGN")) return (int)SIG_IGN;
1350 if (strEQ(name, "SIG_SETMASK"))
1356 if (strEQ(name, "SIG_UNBLOCK"))
1364 if (strEQ(name, "SIGABRT"))
1370 if (strEQ(name, "SIGALRM"))
1376 if (strEQ(name, "SIGCHLD"))
1382 if (strEQ(name, "SIGCONT"))
1388 if (strEQ(name, "SIGFPE"))
1394 if (strEQ(name, "SIGHUP"))
1400 if (strEQ(name, "SIGILL"))
1406 if (strEQ(name, "SIGINT"))
1412 if (strEQ(name, "SIGKILL"))
1418 if (strEQ(name, "SIGPIPE"))
1424 if (strEQ(name, "SIGQUIT"))
1430 if (strEQ(name, "SIGSEGV"))
1436 if (strEQ(name, "SIGSTOP"))
1442 if (strEQ(name, "SIGTERM"))
1448 if (strEQ(name, "SIGTSTP"))
1454 if (strEQ(name, "SIGTTIN"))
1460 if (strEQ(name, "SIGTTOU"))
1466 if (strEQ(name, "SIGUSR1"))
1472 if (strEQ(name, "SIGUSR2"))
1480 if (name[1] == '_') {
1482 if (strEQ(name, "S_ISBLK")) return S_ISBLK(arg);
1485 if (strEQ(name, "S_ISCHR")) return S_ISCHR(arg);
1488 if (strEQ(name, "S_ISDIR")) return S_ISDIR(arg);
1491 if (strEQ(name, "S_ISFIFO")) return S_ISFIFO(arg);
1494 if (strEQ(name, "S_ISREG")) return S_ISREG(arg);
1496 if (strEQ(name, "S_ISGID"))
1502 if (strEQ(name, "S_ISUID"))
1508 if (strEQ(name, "S_IRGRP"))
1514 if (strEQ(name, "S_IROTH"))
1520 if (strEQ(name, "S_IRUSR"))
1526 if (strEQ(name, "S_IRWXG"))
1532 if (strEQ(name, "S_IRWXO"))
1538 if (strEQ(name, "S_IRWXU"))
1544 if (strEQ(name, "S_IWGRP"))
1550 if (strEQ(name, "S_IWOTH"))
1556 if (strEQ(name, "S_IWUSR"))
1562 if (strEQ(name, "S_IXGRP"))
1568 if (strEQ(name, "S_IXOTH"))
1574 if (strEQ(name, "S_IXUSR"))
1582 if (strEQ(name, "SEEK_CUR"))
1588 if (strEQ(name, "SEEK_END"))
1594 if (strEQ(name, "SEEK_SET"))
1600 if (strEQ(name, "STREAM_MAX"))
1606 if (strEQ(name, "SHRT_MAX"))
1612 if (strEQ(name, "SHRT_MIN"))
1618 if (strEQ(name, "SA_NOCLDSTOP"))
1620 return SA_NOCLDSTOP;
1624 if (strEQ(name, "SCHAR_MAX"))
1630 if (strEQ(name, "SCHAR_MIN"))
1636 if (strEQ(name, "SSIZE_MAX"))
1642 if (strEQ(name, "STDIN_FILENO"))
1644 return STDIN_FILENO;
1648 if (strEQ(name, "STDOUT_FILENO"))
1649 #ifdef STDOUT_FILENO
1650 return STDOUT_FILENO;
1654 if (strEQ(name, "STRERR_FILENO"))
1655 #ifdef STRERR_FILENO
1656 return STRERR_FILENO;
1662 if (strEQ(name, "TCIFLUSH"))
1668 if (strEQ(name, "TCIOFF"))
1674 if (strEQ(name, "TCIOFLUSH"))
1680 if (strEQ(name, "TCION"))
1686 if (strEQ(name, "TCOFLUSH"))
1692 if (strEQ(name, "TCOOFF"))
1698 if (strEQ(name, "TCOON"))
1704 if (strEQ(name, "TCSADRAIN"))
1710 if (strEQ(name, "TCSAFLUSH"))
1716 if (strEQ(name, "TCSANOW"))
1722 if (strEQ(name, "TMP_MAX"))
1728 if (strEQ(name, "TOSTOP"))
1734 if (strEQ(name, "TZNAME_MAX"))
1742 if (strEQ(name, "UCHAR_MAX"))
1748 if (strEQ(name, "UINT_MAX"))
1754 if (strEQ(name, "ULONG_MAX"))
1760 if (strEQ(name, "USHRT_MAX"))
1768 if (strEQ(name, "VEOF"))
1774 if (strEQ(name, "VEOL"))
1780 if (strEQ(name, "VERASE"))
1786 if (strEQ(name, "VINTR"))
1792 if (strEQ(name, "VKILL"))
1798 if (strEQ(name, "VMIN"))
1804 if (strEQ(name, "VQUIT"))
1810 if (strEQ(name, "VSTART"))
1816 if (strEQ(name, "VSTOP"))
1822 if (strEQ(name, "VSUSP"))
1828 if (strEQ(name, "VTIME"))
1836 if (strEQ(name, "W_OK"))
1843 if (strEQ(name, "WEXITSTATUS")) return WEXITSTATUS(arg);
1846 if (strEQ(name, "WIFEXITED")) return WIFEXITED(arg);
1849 if (strEQ(name, "WIFSIGNALED")) return WIFSIGNALED(arg);
1852 if (strEQ(name, "WIFSTOPPED")) return WIFSTOPPED(arg);
1854 if (strEQ(name, "WNOHANG"))
1861 if (strEQ(name, "WSTOPSIG")) return WSTOPSIG(arg);
1864 if (strEQ(name, "WTERMSIG")) return WTERMSIG(arg);
1866 if (strEQ(name, "WUNTRACED"))
1874 if (strEQ(name, "X_OK"))
1882 if (strnEQ(name, "_PC_", 4)) {
1883 if (strEQ(name, "_PC_CHOWN_RESTRICTED"))
1884 #ifdef _PC_CHOWN_RESTRICTED
1885 return _PC_CHOWN_RESTRICTED;
1889 if (strEQ(name, "_PC_LINK_MAX"))
1891 return _PC_LINK_MAX;
1895 if (strEQ(name, "_PC_MAX_CANON"))
1896 #ifdef _PC_MAX_CANON
1897 return _PC_MAX_CANON;
1901 if (strEQ(name, "_PC_MAX_INPUT"))
1902 #ifdef _PC_MAX_INPUT
1903 return _PC_MAX_INPUT;
1907 if (strEQ(name, "_PC_NAME_MAX"))
1909 return _PC_NAME_MAX;
1913 if (strEQ(name, "_PC_NO_TRUNC"))
1915 return _PC_NO_TRUNC;
1919 if (strEQ(name, "_PC_PATH_MAX"))
1921 return _PC_PATH_MAX;
1925 if (strEQ(name, "_PC_PIPE_BUF"))
1927 return _PC_PIPE_BUF;
1931 if (strEQ(name, "_PC_VDISABLE"))
1933 return _PC_VDISABLE;
1939 if (strnEQ(name, "_POSIX_", 7)) {
1940 if (strEQ(name, "_POSIX_ARG_MAX"))
1941 #ifdef _POSIX_ARG_MAX
1942 return _POSIX_ARG_MAX;
1946 if (strEQ(name, "_POSIX_CHILD_MAX"))
1947 #ifdef _POSIX_CHILD_MAX
1948 return _POSIX_CHILD_MAX;
1952 if (strEQ(name, "_POSIX_CHOWN_RESTRICTED"))
1953 #ifdef _POSIX_CHOWN_RESTRICTED
1954 return _POSIX_CHOWN_RESTRICTED;
1958 if (strEQ(name, "_POSIX_JOB_CONTROL"))
1959 #ifdef _POSIX_JOB_CONTROL
1960 return _POSIX_JOB_CONTROL;
1964 if (strEQ(name, "_POSIX_LINK_MAX"))
1965 #ifdef _POSIX_LINK_MAX
1966 return _POSIX_LINK_MAX;
1970 if (strEQ(name, "_POSIX_MAX_CANON"))
1971 #ifdef _POSIX_MAX_CANON
1972 return _POSIX_MAX_CANON;
1976 if (strEQ(name, "_POSIX_MAX_INPUT"))
1977 #ifdef _POSIX_MAX_INPUT
1978 return _POSIX_MAX_INPUT;
1982 if (strEQ(name, "_POSIX_NAME_MAX"))
1983 #ifdef _POSIX_NAME_MAX
1984 return _POSIX_NAME_MAX;
1988 if (strEQ(name, "_POSIX_NGROUPS_MAX"))
1989 #ifdef _POSIX_NGROUPS_MAX
1990 return _POSIX_NGROUPS_MAX;
1994 if (strEQ(name, "_POSIX_NO_TRUNC"))
1995 #ifdef _POSIX_NO_TRUNC
1996 return _POSIX_NO_TRUNC;
2000 if (strEQ(name, "_POSIX_OPEN_MAX"))
2001 #ifdef _POSIX_OPEN_MAX
2002 return _POSIX_OPEN_MAX;
2006 if (strEQ(name, "_POSIX_PATH_MAX"))
2007 #ifdef _POSIX_PATH_MAX
2008 return _POSIX_PATH_MAX;
2012 if (strEQ(name, "_POSIX_PIPE_BUF"))
2013 #ifdef _POSIX_PIPE_BUF
2014 return _POSIX_PIPE_BUF;
2018 if (strEQ(name, "_POSIX_SAVED_IDS"))
2019 #ifdef _POSIX_SAVED_IDS
2020 return _POSIX_SAVED_IDS;
2024 if (strEQ(name, "_POSIX_SSIZE_MAX"))
2025 #ifdef _POSIX_SSIZE_MAX
2026 return _POSIX_SSIZE_MAX;
2030 if (strEQ(name, "_POSIX_STREAM_MAX"))
2031 #ifdef _POSIX_STREAM_MAX
2032 return _POSIX_STREAM_MAX;
2036 if (strEQ(name, "_POSIX_TZNAME_MAX"))
2037 #ifdef _POSIX_TZNAME_MAX
2038 return _POSIX_TZNAME_MAX;
2042 if (strEQ(name, "_POSIX_VDISABLE"))
2043 #ifdef _POSIX_VDISABLE
2044 return _POSIX_VDISABLE;
2048 if (strEQ(name, "_POSIX_VERSION"))
2049 #ifdef _POSIX_VERSION
2050 return _POSIX_VERSION;
2056 if (strnEQ(name, "_SC_", 4)) {
2057 if (strEQ(name, "_SC_ARG_MAX"))
2063 if (strEQ(name, "_SC_CHILD_MAX"))
2064 #ifdef _SC_CHILD_MAX
2065 return _SC_CHILD_MAX;
2069 if (strEQ(name, "_SC_CLK_TCK"))
2075 if (strEQ(name, "_SC_JOB_CONTROL"))
2076 #ifdef _SC_JOB_CONTROL
2077 return _SC_JOB_CONTROL;
2081 if (strEQ(name, "_SC_NGROUPS_MAX"))
2082 #ifdef _SC_NGROUPS_MAX
2083 return _SC_NGROUPS_MAX;
2087 if (strEQ(name, "_SC_OPEN_MAX"))
2089 return _SC_OPEN_MAX;
2093 if (strEQ(name, "_SC_SAVED_IDS"))
2094 #ifdef _SC_SAVED_IDS
2095 return _SC_SAVED_IDS;
2099 if (strEQ(name, "_SC_STREAM_MAX"))
2100 #ifdef _SC_STREAM_MAX
2101 return _SC_STREAM_MAX;
2105 if (strEQ(name, "_SC_TZNAME_MAX"))
2106 #ifdef _SC_TZNAME_MAX
2107 return _SC_TZNAME_MAX;
2111 if (strEQ(name, "_SC_VERSION"))
2119 if (strEQ(name, "_IOFBF"))
2125 if (strEQ(name, "_IOLBF"))
2131 if (strEQ(name, "_IONBF"))
2147 MODULE = SigSet PACKAGE = POSIX::SigSet PREFIX = sig
2150 new(packname = "POSIX::SigSet", ...)
2155 RETVAL = (sigset_t*)safemalloc(sizeof(sigset_t));
2156 sigemptyset(RETVAL);
2157 for (i = 1; i < items; i++)
2158 sigaddset(RETVAL, SvIV(ST(i)));
2165 POSIX::SigSet sigset
2167 safefree((char *)sigset);
2170 sigaddset(sigset, sig)
2171 POSIX::SigSet sigset
2175 sigdelset(sigset, sig)
2176 POSIX::SigSet sigset
2181 POSIX::SigSet sigset
2185 POSIX::SigSet sigset
2188 sigismember(sigset, sig)
2189 POSIX::SigSet sigset
2193 MODULE = Termios PACKAGE = POSIX::Termios PREFIX = cf
2196 new(packname = "POSIX::Termios", ...)
2201 RETVAL = (struct termios*)safemalloc(sizeof(struct termios));
2203 not_here("termios");
2210 DESTROY(termios_ref)
2211 POSIX::Termios termios_ref
2214 safefree((char *)termios_ref);
2216 not_here("termios");
2220 getattr(termios_ref, fd = 0)
2221 POSIX::Termios termios_ref
2224 RETVAL = tcgetattr(fd, termios_ref);
2229 setattr(termios_ref, fd = 0, optional_actions = 0)
2230 POSIX::Termios termios_ref
2232 int optional_actions
2234 RETVAL = tcsetattr(fd, optional_actions, termios_ref);
2239 cfgetispeed(termios_ref)
2240 POSIX::Termios termios_ref
2243 cfgetospeed(termios_ref)
2244 POSIX::Termios termios_ref
2247 getiflag(termios_ref)
2248 POSIX::Termios termios_ref
2250 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2251 RETVAL = termios_ref->c_iflag;
2253 not_here("getiflag");
2259 getoflag(termios_ref)
2260 POSIX::Termios termios_ref
2262 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2263 RETVAL = termios_ref->c_oflag;
2265 not_here("getoflag");
2271 getcflag(termios_ref)
2272 POSIX::Termios termios_ref
2274 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2275 RETVAL = termios_ref->c_cflag;
2277 not_here("getcflag");
2283 getlflag(termios_ref)
2284 POSIX::Termios termios_ref
2286 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2287 RETVAL = termios_ref->c_lflag;
2289 not_here("getlflag");
2295 getcc(termios_ref, ccix)
2296 POSIX::Termios termios_ref
2299 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2301 croak("Bad getcc subscript");
2302 RETVAL = termios_ref->c_cc[ccix];
2310 cfsetispeed(termios_ref, speed)
2311 POSIX::Termios termios_ref
2315 cfsetospeed(termios_ref, speed)
2316 POSIX::Termios termios_ref
2320 setiflag(termios_ref, iflag)
2321 POSIX::Termios termios_ref
2324 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2325 termios_ref->c_iflag = iflag;
2327 not_here("setiflag");
2331 setoflag(termios_ref, oflag)
2332 POSIX::Termios termios_ref
2335 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2336 termios_ref->c_oflag = oflag;
2338 not_here("setoflag");
2342 setcflag(termios_ref, cflag)
2343 POSIX::Termios termios_ref
2346 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2347 termios_ref->c_cflag = cflag;
2349 not_here("setcflag");
2353 setlflag(termios_ref, lflag)
2354 POSIX::Termios termios_ref
2357 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2358 termios_ref->c_lflag = lflag;
2360 not_here("setlflag");
2364 setcc(termios_ref, ccix, cc)
2365 POSIX::Termios termios_ref
2369 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2371 croak("Bad setcc subscript");
2372 termios_ref->c_cc[ccix] = cc;
2379 MODULE = FileHandle PACKAGE = FileHandle PREFIX = f
2387 fgetpos(handle, &pos);
2388 ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t)));
2392 fsetpos(handle, pos)
2396 RETVAL = fsetpos(handle, (Fpos_t*)SvPVX(pos));
2405 RETVAL = ungetc(c, handle);
2427 char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0;
2430 setvbuf(handle, buf, type, size)
2432 char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
2436 MODULE = POSIX PACKAGE = POSIX
2449 for (s = charstring; *s && RETVAL; s++)
2461 for (s = charstring; *s && RETVAL; s++)
2473 for (s = charstring; *s && RETVAL; s++)
2485 for (s = charstring; *s && RETVAL; s++)
2497 for (s = charstring; *s && RETVAL; s++)
2509 for (s = charstring; *s && RETVAL; s++)
2521 for (s = charstring; *s && RETVAL; s++)
2533 for (s = charstring; *s && RETVAL; s++)
2545 for (s = charstring; *s && RETVAL; s++)
2557 for (s = charstring; *s && RETVAL; s++)
2564 isxdigit(charstring)
2569 for (s = charstring; *s && RETVAL; s++)
2576 open(filename, flags = O_RDONLY, mode = 0666)
2584 #ifdef HAS_LOCALECONV
2585 struct lconv *lcbuf;
2587 if (lcbuf = localeconv()) {
2589 if (lcbuf->decimal_point && *lcbuf->decimal_point)
2590 hv_store(RETVAL, "decimal_point", 13,
2591 newSVpv(lcbuf->decimal_point, 0), 0);
2592 if (lcbuf->thousands_sep && *lcbuf->thousands_sep)
2593 hv_store(RETVAL, "thousands_sep", 13,
2594 newSVpv(lcbuf->thousands_sep, 0), 0);
2595 if (lcbuf->grouping && *lcbuf->grouping)
2596 hv_store(RETVAL, "grouping", 8,
2597 newSVpv(lcbuf->grouping, 0), 0);
2598 if (lcbuf->int_curr_symbol && *lcbuf->int_curr_symbol)
2599 hv_store(RETVAL, "int_curr_symbol", 15,
2600 newSVpv(lcbuf->int_curr_symbol, 0), 0);
2601 if (lcbuf->currency_symbol && *lcbuf->currency_symbol)
2602 hv_store(RETVAL, "currency_symbol", 15,
2603 newSVpv(lcbuf->currency_symbol, 0), 0);
2604 if (lcbuf->mon_decimal_point && *lcbuf->mon_decimal_point)
2605 hv_store(RETVAL, "mon_decimal_point", 17,
2606 newSVpv(lcbuf->mon_decimal_point, 0), 0);
2607 if (lcbuf->mon_thousands_sep && *lcbuf->mon_thousands_sep)
2608 hv_store(RETVAL, "mon_thousands_sep", 17,
2609 newSVpv(lcbuf->mon_thousands_sep, 0), 0);
2610 if (lcbuf->mon_grouping && *lcbuf->mon_grouping)
2611 hv_store(RETVAL, "mon_grouping", 12,
2612 newSVpv(lcbuf->mon_grouping, 0), 0);
2613 if (lcbuf->positive_sign && *lcbuf->positive_sign)
2614 hv_store(RETVAL, "positive_sign", 13,
2615 newSVpv(lcbuf->positive_sign, 0), 0);
2616 if (lcbuf->negative_sign && *lcbuf->negative_sign)
2617 hv_store(RETVAL, "negative_sign", 13,
2618 newSVpv(lcbuf->negative_sign, 0), 0);
2620 if (lcbuf->int_frac_digits != CHAR_MAX)
2621 hv_store(RETVAL, "int_frac_digits", 15,
2622 newSViv(lcbuf->int_frac_digits), 0);
2623 if (lcbuf->frac_digits != CHAR_MAX)
2624 hv_store(RETVAL, "frac_digits", 11,
2625 newSViv(lcbuf->frac_digits), 0);
2626 if (lcbuf->p_cs_precedes != CHAR_MAX)
2627 hv_store(RETVAL, "p_cs_precedes", 13,
2628 newSViv(lcbuf->p_cs_precedes), 0);
2629 if (lcbuf->p_sep_by_space != CHAR_MAX)
2630 hv_store(RETVAL, "p_sep_by_space", 14,
2631 newSViv(lcbuf->p_sep_by_space), 0);
2632 if (lcbuf->n_cs_precedes != CHAR_MAX)
2633 hv_store(RETVAL, "n_cs_precedes", 13,
2634 newSViv(lcbuf->n_cs_precedes), 0);
2635 if (lcbuf->n_sep_by_space != CHAR_MAX)
2636 hv_store(RETVAL, "n_sep_by_space", 14,
2637 newSViv(lcbuf->n_sep_by_space), 0);
2638 if (lcbuf->p_sign_posn != CHAR_MAX)
2639 hv_store(RETVAL, "p_sign_posn", 11,
2640 newSViv(lcbuf->p_sign_posn), 0);
2641 if (lcbuf->n_sign_posn != CHAR_MAX)
2642 hv_store(RETVAL, "n_sign_posn", 11,
2643 newSViv(lcbuf->n_sign_posn), 0);
2646 localeconv(); /* A stub to call not_here(). */
2652 setlocale(category, locale)
2690 /* (We already know stack is long enough.) */
2691 PUSHs(sv_2mortal(newSVnv(frexp(x,&expvar))));
2692 PUSHs(sv_2mortal(newSViv(expvar)));
2708 /* (We already know stack is long enough.) */
2709 PUSHs(sv_2mortal(newSVnv(modf(x,&intvar))));
2710 PUSHs(sv_2mortal(newSVnv(intvar)));
2721 sigaction(sig, action, oldaction = 0)
2723 POSIX::SigAction action
2724 POSIX::SigAction oldaction
2727 # This code is really grody because we're trying to make the signal
2728 # interface look beautiful, which is hard.
2731 gv_fetchpv("SIG", TRUE, SVt_PVHV);
2734 struct sigaction act;
2735 struct sigaction oact;
2736 POSIX__SigSet sigset;
2738 SV** sigsvp = hv_fetch(GvHVn(siggv),
2740 strlen(sig_name[sig]),
2743 /* Remember old handler name if desired. */
2745 char *hand = SvPVx(*sigsvp, na);
2746 svp = hv_fetch(oldaction, "HANDLER", 7, TRUE);
2747 sv_setpv(*svp, *hand ? hand : "DEFAULT");
2751 /* Vector new handler through %SIG. (We always use sighandler
2752 for the C signal handler, which reads %SIG to dispatch.) */
2753 svp = hv_fetch(action, "HANDLER", 7, FALSE);
2755 croak("Can't supply an action without a HANDLER");
2756 sv_setpv(*sigsvp, SvPV(*svp, na));
2757 mg_set(*sigsvp); /* handles DEFAULT and IGNORE */
2758 act.sa_handler = sighandler;
2760 /* Set up any desired mask. */
2761 svp = hv_fetch(action, "MASK", 4, FALSE);
2762 if (svp && sv_isa(*svp, "POSIX::SigSet")) {
2764 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2765 sigset = (sigset_t*) tmp;
2766 act.sa_mask = *sigset;
2769 sigemptyset(& act.sa_mask);
2771 /* Set up any desired flags. */
2772 svp = hv_fetch(action, "FLAGS", 5, FALSE);
2773 act.sa_flags = svp ? SvIV(*svp) : 0;
2776 /* Now work around sigaction oddities */
2777 if (action && oldaction)
2778 RETVAL = sigaction(sig, & act, & oact);
2780 RETVAL = sigaction(sig, & act, (struct sigaction*)0);
2782 RETVAL = sigaction(sig, (struct sigaction*)0, & oact);
2787 /* Get back the mask. */
2788 svp = hv_fetch(oldaction, "MASK", 4, TRUE);
2789 if (sv_isa(*svp, "POSIX::SigSet")) {
2791 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2792 sigset = (sigset_t*) tmp;
2795 sigset = (sigset_t*)safemalloc(sizeof(sigset_t));
2796 sv_setptrobj(*svp, sigset, "POSIX::SigSet");
2798 *sigset = oact.sa_mask;
2800 /* Get back the flags. */
2801 svp = hv_fetch(oldaction, "FLAGS", 5, TRUE);
2802 sv_setiv(*svp, oact.sa_flags);
2810 POSIX::SigSet sigset
2813 sigprocmask(how, sigset, oldsigset = 0)
2815 POSIX::SigSet sigset
2816 POSIX::SigSet oldsigset
2819 sigsuspend(signal_mask)
2820 POSIX::SigSet signal_mask
2840 lseek(fd, offset, whence)
2853 if (pipe(fds) != -1) {
2855 PUSHs(sv_2mortal(newSViv(fds[0])));
2856 PUSHs(sv_2mortal(newSViv(fds[1])));
2860 read(fd, buffer, nbytes)
2862 char * buffer = sv_grow(ST(1),SvIV(ST(2))+1);
2866 SvCUR(ST(1)) = RETVAL;
2868 *SvEND(ST(1)) = '\0';
2870 sv_magic(ST(1), 0, 't', 0, 0);
2894 tcsetpgrp(fd, pgrp_id)
2903 if (uname(&buf) >= 0) {
2905 PUSHs(sv_2mortal(newSVpv(buf.sysname, 0)));
2906 PUSHs(sv_2mortal(newSVpv(buf.nodename, 0)));
2907 PUSHs(sv_2mortal(newSVpv(buf.release, 0)));
2908 PUSHs(sv_2mortal(newSVpv(buf.version, 0)));
2909 PUSHs(sv_2mortal(newSVpv(buf.machine, 0)));
2912 uname((char *) 0); /* A stub to call not_here(). */
2916 write(fd, buffer, nbytes)
2934 mbstowcs(s, pwcs, n)
2946 wcstombs(s, pwcs, n)
2968 char *p = SvPV(src,srclen);
2970 ST(0) = sv_2mortal(newSV(srclen));
2971 dstlen = strxfrm(SvPVX(ST(0)), p, (size_t)srclen);
2972 if (dstlen > srclen) {
2974 SvGROW(ST(0), dstlen);
2975 strxfrm(SvPVX(ST(0)), p, (size_t)dstlen);
2978 SvCUR(ST(0)) = dstlen;
2983 mkfifo(filename, mode)
2999 tcflush(fd, queue_selector)
3004 tcsendbreak(fd, duration)
3009 asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3024 mytm.tm_hour = hour;
3025 mytm.tm_mday = mday;
3027 mytm.tm_year = year;
3028 mytm.tm_wday = wday;
3029 mytm.tm_yday = yday;
3030 mytm.tm_isdst = isdst;
3031 RETVAL = asctime(&mytm);
3044 difftime(time1, time2)
3049 mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3064 mytm.tm_hour = hour;
3065 mytm.tm_mday = mday;
3067 mytm.tm_year = year;
3068 mytm.tm_wday = wday;
3069 mytm.tm_yday = yday;
3070 mytm.tm_isdst = isdst;
3071 RETVAL = mktime(&mytm);
3077 strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3095 mytm.tm_hour = hour;
3096 mytm.tm_mday = mday;
3098 mytm.tm_year = year;
3099 mytm.tm_wday = wday;
3100 mytm.tm_yday = yday;
3101 mytm.tm_isdst = isdst;
3102 len = strftime(tmpbuf, sizeof tmpbuf, fmt, &mytm);
3103 ST(0) = sv_2mortal(newSVpv(tmpbuf, len));
3113 PUSHs(sv_2mortal(newSVpv(tzname[0],strlen(tzname[0]))));
3114 PUSHs(sv_2mortal(newSVpv(tzname[1],strlen(tzname[1]))));
3117 access(filename, mode)
3135 pathconf(filename, name)