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"))
917 if (strEQ(name, "FILENAME_MAX"))
925 if (strEQ(name, "HUGE_VAL"))
931 if (strEQ(name, "HUPCL"))
939 if (strEQ(name, "INT_MAX"))
945 if (strEQ(name, "INT_MIN"))
951 if (strEQ(name, "ICANON"))
957 if (strEQ(name, "ICRNL"))
963 if (strEQ(name, "IEXTEN"))
969 if (strEQ(name, "IGNBRK"))
975 if (strEQ(name, "IGNCR"))
981 if (strEQ(name, "IGNPAR"))
987 if (strEQ(name, "INLCR"))
993 if (strEQ(name, "INPCK"))
999 if (strEQ(name, "ISIG"))
1005 if (strEQ(name, "ISTRIP"))
1011 if (strEQ(name, "IXOFF"))
1017 if (strEQ(name, "IXON"))
1025 if (strnEQ(name, "LC_", 3)) {
1026 if (strEQ(name, "LC_ALL"))
1032 if (strEQ(name, "LC_COLLATE"))
1038 if (strEQ(name, "LC_CTYPE"))
1044 if (strEQ(name, "LC_MONETARY"))
1050 if (strEQ(name, "LC_NUMERIC"))
1056 if (strEQ(name, "LC_TIME"))
1064 if (strnEQ(name, "LDBL_", 5)) {
1065 if (strEQ(name, "LDBL_MAX"))
1071 if (strEQ(name, "LDBL_MIN"))
1077 if (strEQ(name, "LDBL_DIG"))
1083 if (strEQ(name, "LDBL_EPSILON"))
1085 return LDBL_EPSILON;
1089 if (strEQ(name, "LDBL_MANT_DIG"))
1090 #ifdef LDBL_MANT_DIG
1091 return LDBL_MANT_DIG;
1095 if (strEQ(name, "LDBL_MAX_10_EXP"))
1096 #ifdef LDBL_MAX_10_EXP
1097 return LDBL_MAX_10_EXP;
1101 if (strEQ(name, "LDBL_MAX_EXP"))
1103 return LDBL_MAX_EXP;
1107 if (strEQ(name, "LDBL_MIN_10_EXP"))
1108 #ifdef LDBL_MIN_10_EXP
1109 return LDBL_MIN_10_EXP;
1113 if (strEQ(name, "LDBL_MIN_EXP"))
1115 return LDBL_MIN_EXP;
1121 if (strnEQ(name, "L_", 2)) {
1122 if (strEQ(name, "L_ctermid"))
1128 if (strEQ(name, "L_cuserid"))
1134 if (strEQ(name, "L_tmpname"))
1142 if (strEQ(name, "LONG_MAX"))
1148 if (strEQ(name, "LONG_MIN"))
1154 if (strEQ(name, "LINK_MAX"))
1162 if (strEQ(name, "MAX_CANON"))
1168 if (strEQ(name, "MAX_INPUT"))
1174 if (strEQ(name, "MB_CUR_MAX"))
1180 if (strEQ(name, "MB_LEN_MAX"))
1188 if (strEQ(name, "NULL")) return 0;
1189 if (strEQ(name, "NAME_MAX"))
1195 if (strEQ(name, "NCCS"))
1201 if (strEQ(name, "NGROUPS_MAX"))
1207 if (strEQ(name, "NOFLSH"))
1215 if (strnEQ(name, "O_", 2)) {
1216 if (strEQ(name, "O_APPEND"))
1222 if (strEQ(name, "O_CREAT"))
1228 if (strEQ(name, "O_TRUNC"))
1234 if (strEQ(name, "O_RDONLY"))
1240 if (strEQ(name, "O_RDWR"))
1246 if (strEQ(name, "O_WRONLY"))
1252 if (strEQ(name, "O_EXCL"))
1258 if (strEQ(name, "O_NOCTTY"))
1264 if (strEQ(name, "O_NONBLOCK"))
1270 if (strEQ(name, "O_ACCMODE"))
1278 if (strEQ(name, "OPEN_MAX"))
1284 if (strEQ(name, "OPOST"))
1292 if (strEQ(name, "PATH_MAX"))
1298 if (strEQ(name, "PARENB"))
1304 if (strEQ(name, "PARMRK"))
1310 if (strEQ(name, "PARODD"))
1316 if (strEQ(name, "PIPE_BUF"))
1324 if (strEQ(name, "RAND_MAX"))
1330 if (strEQ(name, "R_OK"))
1338 if (strnEQ(name, "SIG", 3)) {
1339 if (name[3] == '_') {
1340 if (strEQ(name, "SIG_BLOCK"))
1347 if (strEQ(name, "SIG_DFL")) return (int)SIG_DFL;
1350 if (strEQ(name, "SIG_ERR")) return (int)SIG_ERR;
1353 if (strEQ(name, "SIG_IGN")) return (int)SIG_IGN;
1355 if (strEQ(name, "SIG_SETMASK"))
1361 if (strEQ(name, "SIG_UNBLOCK"))
1369 if (strEQ(name, "SIGABRT"))
1375 if (strEQ(name, "SIGALRM"))
1381 if (strEQ(name, "SIGCHLD"))
1387 if (strEQ(name, "SIGCONT"))
1393 if (strEQ(name, "SIGFPE"))
1399 if (strEQ(name, "SIGHUP"))
1405 if (strEQ(name, "SIGILL"))
1411 if (strEQ(name, "SIGINT"))
1417 if (strEQ(name, "SIGKILL"))
1423 if (strEQ(name, "SIGPIPE"))
1429 if (strEQ(name, "SIGQUIT"))
1435 if (strEQ(name, "SIGSEGV"))
1441 if (strEQ(name, "SIGSTOP"))
1447 if (strEQ(name, "SIGTERM"))
1453 if (strEQ(name, "SIGTSTP"))
1459 if (strEQ(name, "SIGTTIN"))
1465 if (strEQ(name, "SIGTTOU"))
1471 if (strEQ(name, "SIGUSR1"))
1477 if (strEQ(name, "SIGUSR2"))
1485 if (name[1] == '_') {
1486 if (strEQ(name, "S_ISGID"))
1492 if (strEQ(name, "S_ISUID"))
1498 if (strEQ(name, "S_IRGRP"))
1504 if (strEQ(name, "S_IROTH"))
1510 if (strEQ(name, "S_IRUSR"))
1516 if (strEQ(name, "S_IRWXG"))
1522 if (strEQ(name, "S_IRWXO"))
1528 if (strEQ(name, "S_IRWXU"))
1534 if (strEQ(name, "S_IWGRP"))
1540 if (strEQ(name, "S_IWOTH"))
1546 if (strEQ(name, "S_IWUSR"))
1552 if (strEQ(name, "S_IXGRP"))
1558 if (strEQ(name, "S_IXOTH"))
1564 if (strEQ(name, "S_IXUSR"))
1570 errno = EAGAIN; /* the following aren't constants */
1572 if (strEQ(name, "S_ISBLK")) return S_ISBLK(arg);
1575 if (strEQ(name, "S_ISCHR")) return S_ISCHR(arg);
1578 if (strEQ(name, "S_ISDIR")) return S_ISDIR(arg);
1581 if (strEQ(name, "S_ISFIFO")) return S_ISFIFO(arg);
1584 if (strEQ(name, "S_ISREG")) return S_ISREG(arg);
1588 if (strEQ(name, "SEEK_CUR"))
1594 if (strEQ(name, "SEEK_END"))
1600 if (strEQ(name, "SEEK_SET"))
1606 if (strEQ(name, "STREAM_MAX"))
1612 if (strEQ(name, "SHRT_MAX"))
1618 if (strEQ(name, "SHRT_MIN"))
1624 if (strEQ(name, "SA_NOCLDSTOP"))
1626 return SA_NOCLDSTOP;
1630 if (strEQ(name, "SCHAR_MAX"))
1636 if (strEQ(name, "SCHAR_MIN"))
1642 if (strEQ(name, "SSIZE_MAX"))
1648 if (strEQ(name, "STDIN_FILENO"))
1650 return STDIN_FILENO;
1654 if (strEQ(name, "STDOUT_FILENO"))
1655 #ifdef STDOUT_FILENO
1656 return STDOUT_FILENO;
1660 if (strEQ(name, "STRERR_FILENO"))
1661 #ifdef STRERR_FILENO
1662 return STRERR_FILENO;
1668 if (strEQ(name, "TCIFLUSH"))
1674 if (strEQ(name, "TCIOFF"))
1680 if (strEQ(name, "TCIOFLUSH"))
1686 if (strEQ(name, "TCION"))
1692 if (strEQ(name, "TCOFLUSH"))
1698 if (strEQ(name, "TCOOFF"))
1704 if (strEQ(name, "TCOON"))
1710 if (strEQ(name, "TCSADRAIN"))
1716 if (strEQ(name, "TCSAFLUSH"))
1722 if (strEQ(name, "TCSANOW"))
1728 if (strEQ(name, "TMP_MAX"))
1734 if (strEQ(name, "TOSTOP"))
1740 if (strEQ(name, "TZNAME_MAX"))
1748 if (strEQ(name, "UCHAR_MAX"))
1754 if (strEQ(name, "UINT_MAX"))
1760 if (strEQ(name, "ULONG_MAX"))
1766 if (strEQ(name, "USHRT_MAX"))
1774 if (strEQ(name, "VEOF"))
1780 if (strEQ(name, "VEOL"))
1786 if (strEQ(name, "VERASE"))
1792 if (strEQ(name, "VINTR"))
1798 if (strEQ(name, "VKILL"))
1804 if (strEQ(name, "VMIN"))
1810 if (strEQ(name, "VQUIT"))
1816 if (strEQ(name, "VSTART"))
1822 if (strEQ(name, "VSTOP"))
1828 if (strEQ(name, "VSUSP"))
1834 if (strEQ(name, "VTIME"))
1842 if (strEQ(name, "W_OK"))
1848 if (strEQ(name, "WNOHANG"))
1854 if (strEQ(name, "WUNTRACED"))
1860 errno = EAGAIN; /* the following aren't constants */
1862 if (strEQ(name, "WEXITSTATUS")) return WEXITSTATUS(arg);
1865 if (strEQ(name, "WIFEXITED")) return WIFEXITED(arg);
1868 if (strEQ(name, "WIFSIGNALED")) return WIFSIGNALED(arg);
1871 if (strEQ(name, "WIFSTOPPED")) return WIFSTOPPED(arg);
1874 if (strEQ(name, "WSTOPSIG")) return WSTOPSIG(arg);
1877 if (strEQ(name, "WTERMSIG")) return WTERMSIG(arg);
1881 if (strEQ(name, "X_OK"))
1889 if (strnEQ(name, "_PC_", 4)) {
1890 if (strEQ(name, "_PC_CHOWN_RESTRICTED"))
1891 #ifdef _PC_CHOWN_RESTRICTED
1892 return _PC_CHOWN_RESTRICTED;
1896 if (strEQ(name, "_PC_LINK_MAX"))
1898 return _PC_LINK_MAX;
1902 if (strEQ(name, "_PC_MAX_CANON"))
1903 #ifdef _PC_MAX_CANON
1904 return _PC_MAX_CANON;
1908 if (strEQ(name, "_PC_MAX_INPUT"))
1909 #ifdef _PC_MAX_INPUT
1910 return _PC_MAX_INPUT;
1914 if (strEQ(name, "_PC_NAME_MAX"))
1916 return _PC_NAME_MAX;
1920 if (strEQ(name, "_PC_NO_TRUNC"))
1922 return _PC_NO_TRUNC;
1926 if (strEQ(name, "_PC_PATH_MAX"))
1928 return _PC_PATH_MAX;
1932 if (strEQ(name, "_PC_PIPE_BUF"))
1934 return _PC_PIPE_BUF;
1938 if (strEQ(name, "_PC_VDISABLE"))
1940 return _PC_VDISABLE;
1946 if (strnEQ(name, "_POSIX_", 7)) {
1947 if (strEQ(name, "_POSIX_ARG_MAX"))
1948 #ifdef _POSIX_ARG_MAX
1949 return _POSIX_ARG_MAX;
1953 if (strEQ(name, "_POSIX_CHILD_MAX"))
1954 #ifdef _POSIX_CHILD_MAX
1955 return _POSIX_CHILD_MAX;
1959 if (strEQ(name, "_POSIX_CHOWN_RESTRICTED"))
1960 #ifdef _POSIX_CHOWN_RESTRICTED
1961 return _POSIX_CHOWN_RESTRICTED;
1965 if (strEQ(name, "_POSIX_JOB_CONTROL"))
1966 #ifdef _POSIX_JOB_CONTROL
1967 return _POSIX_JOB_CONTROL;
1971 if (strEQ(name, "_POSIX_LINK_MAX"))
1972 #ifdef _POSIX_LINK_MAX
1973 return _POSIX_LINK_MAX;
1977 if (strEQ(name, "_POSIX_MAX_CANON"))
1978 #ifdef _POSIX_MAX_CANON
1979 return _POSIX_MAX_CANON;
1983 if (strEQ(name, "_POSIX_MAX_INPUT"))
1984 #ifdef _POSIX_MAX_INPUT
1985 return _POSIX_MAX_INPUT;
1989 if (strEQ(name, "_POSIX_NAME_MAX"))
1990 #ifdef _POSIX_NAME_MAX
1991 return _POSIX_NAME_MAX;
1995 if (strEQ(name, "_POSIX_NGROUPS_MAX"))
1996 #ifdef _POSIX_NGROUPS_MAX
1997 return _POSIX_NGROUPS_MAX;
2001 if (strEQ(name, "_POSIX_NO_TRUNC"))
2002 #ifdef _POSIX_NO_TRUNC
2003 return _POSIX_NO_TRUNC;
2007 if (strEQ(name, "_POSIX_OPEN_MAX"))
2008 #ifdef _POSIX_OPEN_MAX
2009 return _POSIX_OPEN_MAX;
2013 if (strEQ(name, "_POSIX_PATH_MAX"))
2014 #ifdef _POSIX_PATH_MAX
2015 return _POSIX_PATH_MAX;
2019 if (strEQ(name, "_POSIX_PIPE_BUF"))
2020 #ifdef _POSIX_PIPE_BUF
2021 return _POSIX_PIPE_BUF;
2025 if (strEQ(name, "_POSIX_SAVED_IDS"))
2026 #ifdef _POSIX_SAVED_IDS
2027 return _POSIX_SAVED_IDS;
2031 if (strEQ(name, "_POSIX_SSIZE_MAX"))
2032 #ifdef _POSIX_SSIZE_MAX
2033 return _POSIX_SSIZE_MAX;
2037 if (strEQ(name, "_POSIX_STREAM_MAX"))
2038 #ifdef _POSIX_STREAM_MAX
2039 return _POSIX_STREAM_MAX;
2043 if (strEQ(name, "_POSIX_TZNAME_MAX"))
2044 #ifdef _POSIX_TZNAME_MAX
2045 return _POSIX_TZNAME_MAX;
2049 if (strEQ(name, "_POSIX_VDISABLE"))
2050 #ifdef _POSIX_VDISABLE
2051 return _POSIX_VDISABLE;
2055 if (strEQ(name, "_POSIX_VERSION"))
2056 #ifdef _POSIX_VERSION
2057 return _POSIX_VERSION;
2063 if (strnEQ(name, "_SC_", 4)) {
2064 if (strEQ(name, "_SC_ARG_MAX"))
2070 if (strEQ(name, "_SC_CHILD_MAX"))
2071 #ifdef _SC_CHILD_MAX
2072 return _SC_CHILD_MAX;
2076 if (strEQ(name, "_SC_CLK_TCK"))
2082 if (strEQ(name, "_SC_JOB_CONTROL"))
2083 #ifdef _SC_JOB_CONTROL
2084 return _SC_JOB_CONTROL;
2088 if (strEQ(name, "_SC_NGROUPS_MAX"))
2089 #ifdef _SC_NGROUPS_MAX
2090 return _SC_NGROUPS_MAX;
2094 if (strEQ(name, "_SC_OPEN_MAX"))
2096 return _SC_OPEN_MAX;
2100 if (strEQ(name, "_SC_SAVED_IDS"))
2101 #ifdef _SC_SAVED_IDS
2102 return _SC_SAVED_IDS;
2106 if (strEQ(name, "_SC_STREAM_MAX"))
2107 #ifdef _SC_STREAM_MAX
2108 return _SC_STREAM_MAX;
2112 if (strEQ(name, "_SC_TZNAME_MAX"))
2113 #ifdef _SC_TZNAME_MAX
2114 return _SC_TZNAME_MAX;
2118 if (strEQ(name, "_SC_VERSION"))
2126 if (strEQ(name, "_IOFBF"))
2132 if (strEQ(name, "_IOLBF"))
2138 if (strEQ(name, "_IONBF"))
2154 MODULE = SigSet PACKAGE = POSIX::SigSet PREFIX = sig
2157 new(packname = "POSIX::SigSet", ...)
2162 RETVAL = (sigset_t*)safemalloc(sizeof(sigset_t));
2163 sigemptyset(RETVAL);
2164 for (i = 1; i < items; i++)
2165 sigaddset(RETVAL, SvIV(ST(i)));
2172 POSIX::SigSet sigset
2174 safefree((char *)sigset);
2177 sigaddset(sigset, sig)
2178 POSIX::SigSet sigset
2182 sigdelset(sigset, sig)
2183 POSIX::SigSet sigset
2188 POSIX::SigSet sigset
2192 POSIX::SigSet sigset
2195 sigismember(sigset, sig)
2196 POSIX::SigSet sigset
2200 MODULE = Termios PACKAGE = POSIX::Termios PREFIX = cf
2203 new(packname = "POSIX::Termios", ...)
2208 RETVAL = (struct termios*)safemalloc(sizeof(struct termios));
2210 not_here("termios");
2217 DESTROY(termios_ref)
2218 POSIX::Termios termios_ref
2221 safefree((char *)termios_ref);
2223 not_here("termios");
2227 getattr(termios_ref, fd = 0)
2228 POSIX::Termios termios_ref
2231 RETVAL = tcgetattr(fd, termios_ref);
2236 setattr(termios_ref, fd = 0, optional_actions = 0)
2237 POSIX::Termios termios_ref
2239 int optional_actions
2241 RETVAL = tcsetattr(fd, optional_actions, termios_ref);
2246 cfgetispeed(termios_ref)
2247 POSIX::Termios termios_ref
2250 cfgetospeed(termios_ref)
2251 POSIX::Termios termios_ref
2254 getiflag(termios_ref)
2255 POSIX::Termios termios_ref
2257 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2258 RETVAL = termios_ref->c_iflag;
2260 not_here("getiflag");
2266 getoflag(termios_ref)
2267 POSIX::Termios termios_ref
2269 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2270 RETVAL = termios_ref->c_oflag;
2272 not_here("getoflag");
2278 getcflag(termios_ref)
2279 POSIX::Termios termios_ref
2281 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2282 RETVAL = termios_ref->c_cflag;
2284 not_here("getcflag");
2290 getlflag(termios_ref)
2291 POSIX::Termios termios_ref
2293 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2294 RETVAL = termios_ref->c_lflag;
2296 not_here("getlflag");
2302 getcc(termios_ref, ccix)
2303 POSIX::Termios termios_ref
2306 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2308 croak("Bad getcc subscript");
2309 RETVAL = termios_ref->c_cc[ccix];
2317 cfsetispeed(termios_ref, speed)
2318 POSIX::Termios termios_ref
2322 cfsetospeed(termios_ref, speed)
2323 POSIX::Termios termios_ref
2327 setiflag(termios_ref, iflag)
2328 POSIX::Termios termios_ref
2331 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2332 termios_ref->c_iflag = iflag;
2334 not_here("setiflag");
2338 setoflag(termios_ref, oflag)
2339 POSIX::Termios termios_ref
2342 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2343 termios_ref->c_oflag = oflag;
2345 not_here("setoflag");
2349 setcflag(termios_ref, cflag)
2350 POSIX::Termios termios_ref
2353 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2354 termios_ref->c_cflag = cflag;
2356 not_here("setcflag");
2360 setlflag(termios_ref, lflag)
2361 POSIX::Termios termios_ref
2364 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2365 termios_ref->c_lflag = lflag;
2367 not_here("setlflag");
2371 setcc(termios_ref, ccix, cc)
2372 POSIX::Termios termios_ref
2376 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2378 croak("Bad setcc subscript");
2379 termios_ref->c_cc[ccix] = cc;
2386 MODULE = FileHandle PACKAGE = FileHandle PREFIX = f
2394 fgetpos(handle, &pos);
2395 ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t)));
2399 fsetpos(handle, pos)
2403 RETVAL = fsetpos(handle, (Fpos_t*)SvPVX(pos));
2412 RETVAL = ungetc(c, handle);
2417 new_tmpfile(packname = "FileHandle")
2435 char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0;
2438 setvbuf(handle, buf, type, size)
2440 char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
2444 MODULE = POSIX PACKAGE = POSIX
2457 for (s = charstring; *s && RETVAL; s++)
2469 for (s = charstring; *s && RETVAL; s++)
2481 for (s = charstring; *s && RETVAL; s++)
2493 for (s = charstring; *s && RETVAL; s++)
2505 for (s = charstring; *s && RETVAL; s++)
2517 for (s = charstring; *s && RETVAL; s++)
2529 for (s = charstring; *s && RETVAL; s++)
2541 for (s = charstring; *s && RETVAL; s++)
2553 for (s = charstring; *s && RETVAL; s++)
2565 for (s = charstring; *s && RETVAL; s++)
2572 isxdigit(charstring)
2577 for (s = charstring; *s && RETVAL; s++)
2584 open(filename, flags = O_RDONLY, mode = 0666)
2589 if (flags & (O_APPEND|O_CREAT|O_TRUNC|O_RDWR|O_WRONLY|O_EXCL))
2590 TAINT_PROPER("open");
2591 RETVAL = open(filename, flags, mode);
2599 #ifdef HAS_LOCALECONV
2600 struct lconv *lcbuf;
2602 if (lcbuf = localeconv()) {
2604 if (lcbuf->decimal_point && *lcbuf->decimal_point)
2605 hv_store(RETVAL, "decimal_point", 13,
2606 newSVpv(lcbuf->decimal_point, 0), 0);
2607 if (lcbuf->thousands_sep && *lcbuf->thousands_sep)
2608 hv_store(RETVAL, "thousands_sep", 13,
2609 newSVpv(lcbuf->thousands_sep, 0), 0);
2610 if (lcbuf->grouping && *lcbuf->grouping)
2611 hv_store(RETVAL, "grouping", 8,
2612 newSVpv(lcbuf->grouping, 0), 0);
2613 if (lcbuf->int_curr_symbol && *lcbuf->int_curr_symbol)
2614 hv_store(RETVAL, "int_curr_symbol", 15,
2615 newSVpv(lcbuf->int_curr_symbol, 0), 0);
2616 if (lcbuf->currency_symbol && *lcbuf->currency_symbol)
2617 hv_store(RETVAL, "currency_symbol", 15,
2618 newSVpv(lcbuf->currency_symbol, 0), 0);
2619 if (lcbuf->mon_decimal_point && *lcbuf->mon_decimal_point)
2620 hv_store(RETVAL, "mon_decimal_point", 17,
2621 newSVpv(lcbuf->mon_decimal_point, 0), 0);
2622 if (lcbuf->mon_thousands_sep && *lcbuf->mon_thousands_sep)
2623 hv_store(RETVAL, "mon_thousands_sep", 17,
2624 newSVpv(lcbuf->mon_thousands_sep, 0), 0);
2625 if (lcbuf->mon_grouping && *lcbuf->mon_grouping)
2626 hv_store(RETVAL, "mon_grouping", 12,
2627 newSVpv(lcbuf->mon_grouping, 0), 0);
2628 if (lcbuf->positive_sign && *lcbuf->positive_sign)
2629 hv_store(RETVAL, "positive_sign", 13,
2630 newSVpv(lcbuf->positive_sign, 0), 0);
2631 if (lcbuf->negative_sign && *lcbuf->negative_sign)
2632 hv_store(RETVAL, "negative_sign", 13,
2633 newSVpv(lcbuf->negative_sign, 0), 0);
2635 if (lcbuf->int_frac_digits != CHAR_MAX)
2636 hv_store(RETVAL, "int_frac_digits", 15,
2637 newSViv(lcbuf->int_frac_digits), 0);
2638 if (lcbuf->frac_digits != CHAR_MAX)
2639 hv_store(RETVAL, "frac_digits", 11,
2640 newSViv(lcbuf->frac_digits), 0);
2641 if (lcbuf->p_cs_precedes != CHAR_MAX)
2642 hv_store(RETVAL, "p_cs_precedes", 13,
2643 newSViv(lcbuf->p_cs_precedes), 0);
2644 if (lcbuf->p_sep_by_space != CHAR_MAX)
2645 hv_store(RETVAL, "p_sep_by_space", 14,
2646 newSViv(lcbuf->p_sep_by_space), 0);
2647 if (lcbuf->n_cs_precedes != CHAR_MAX)
2648 hv_store(RETVAL, "n_cs_precedes", 13,
2649 newSViv(lcbuf->n_cs_precedes), 0);
2650 if (lcbuf->n_sep_by_space != CHAR_MAX)
2651 hv_store(RETVAL, "n_sep_by_space", 14,
2652 newSViv(lcbuf->n_sep_by_space), 0);
2653 if (lcbuf->p_sign_posn != CHAR_MAX)
2654 hv_store(RETVAL, "p_sign_posn", 11,
2655 newSViv(lcbuf->p_sign_posn), 0);
2656 if (lcbuf->n_sign_posn != CHAR_MAX)
2657 hv_store(RETVAL, "n_sign_posn", 11,
2658 newSViv(lcbuf->n_sign_posn), 0);
2661 localeconv(); /* A stub to call not_here(). */
2667 setlocale(category, locale)
2705 /* (We already know stack is long enough.) */
2706 PUSHs(sv_2mortal(newSVnv(frexp(x,&expvar))));
2707 PUSHs(sv_2mortal(newSViv(expvar)));
2723 /* (We already know stack is long enough.) */
2724 PUSHs(sv_2mortal(newSVnv(modf(x,&intvar))));
2725 PUSHs(sv_2mortal(newSVnv(intvar)));
2740 sigaction(sig, action, oldaction = 0)
2742 POSIX::SigAction action
2743 POSIX::SigAction oldaction
2746 # This code is really grody because we're trying to make the signal
2747 # interface look beautiful, which is hard.
2750 gv_fetchpv("SIG", TRUE, SVt_PVHV);
2753 struct sigaction act;
2754 struct sigaction oact;
2755 POSIX__SigSet sigset;
2757 SV** sigsvp = hv_fetch(GvHVn(siggv),
2759 strlen(sig_name[sig]),
2762 /* Remember old handler name if desired. */
2764 char *hand = SvPVx(*sigsvp, na);
2765 svp = hv_fetch(oldaction, "HANDLER", 7, TRUE);
2766 sv_setpv(*svp, *hand ? hand : "DEFAULT");
2770 /* Vector new handler through %SIG. (We always use sighandler
2771 for the C signal handler, which reads %SIG to dispatch.) */
2772 svp = hv_fetch(action, "HANDLER", 7, FALSE);
2774 croak("Can't supply an action without a HANDLER");
2775 sv_setpv(*sigsvp, SvPV(*svp, na));
2776 mg_set(*sigsvp); /* handles DEFAULT and IGNORE */
2777 act.sa_handler = sighandler;
2779 /* Set up any desired mask. */
2780 svp = hv_fetch(action, "MASK", 4, FALSE);
2781 if (svp && sv_isa(*svp, "POSIX::SigSet")) {
2783 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2784 sigset = (sigset_t*) tmp;
2785 act.sa_mask = *sigset;
2788 sigemptyset(& act.sa_mask);
2790 /* Set up any desired flags. */
2791 svp = hv_fetch(action, "FLAGS", 5, FALSE);
2792 act.sa_flags = svp ? SvIV(*svp) : 0;
2795 /* Now work around sigaction oddities */
2796 if (action && oldaction)
2797 RETVAL = sigaction(sig, & act, & oact);
2799 RETVAL = sigaction(sig, & act, (struct sigaction*)0);
2801 RETVAL = sigaction(sig, (struct sigaction*)0, & oact);
2806 /* Get back the mask. */
2807 svp = hv_fetch(oldaction, "MASK", 4, TRUE);
2808 if (sv_isa(*svp, "POSIX::SigSet")) {
2810 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2811 sigset = (sigset_t*) tmp;
2814 sigset = (sigset_t*)safemalloc(sizeof(sigset_t));
2815 sv_setptrobj(*svp, sigset, "POSIX::SigSet");
2817 *sigset = oact.sa_mask;
2819 /* Get back the flags. */
2820 svp = hv_fetch(oldaction, "FLAGS", 5, TRUE);
2821 sv_setiv(*svp, oact.sa_flags);
2829 POSIX::SigSet sigset
2832 sigprocmask(how, sigset, oldsigset = 0)
2834 POSIX::SigSet sigset
2835 POSIX::SigSet oldsigset
2838 sigsuspend(signal_mask)
2839 POSIX::SigSet signal_mask
2859 lseek(fd, offset, whence)
2872 if (pipe(fds) != -1) {
2874 PUSHs(sv_2mortal(newSViv(fds[0])));
2875 PUSHs(sv_2mortal(newSViv(fds[1])));
2879 read(fd, buffer, nbytes)
2881 char * buffer = sv_grow(ST(1),SvIV(ST(2))+1);
2885 SvCUR(ST(1)) = RETVAL;
2887 *SvEND(ST(1)) = '\0';
2889 sv_magic(ST(1), 0, 't', 0, 0);
2913 tcsetpgrp(fd, pgrp_id)
2922 if (uname(&buf) >= 0) {
2924 PUSHs(sv_2mortal(newSVpv(buf.sysname, 0)));
2925 PUSHs(sv_2mortal(newSVpv(buf.nodename, 0)));
2926 PUSHs(sv_2mortal(newSVpv(buf.release, 0)));
2927 PUSHs(sv_2mortal(newSVpv(buf.version, 0)));
2928 PUSHs(sv_2mortal(newSVpv(buf.machine, 0)));
2931 uname((char *) 0); /* A stub to call not_here(). */
2935 write(fd, buffer, nbytes)
2953 mbstowcs(s, pwcs, n)
2965 wcstombs(s, pwcs, n)
2987 char *p = SvPV(src,srclen);
2989 ST(0) = sv_2mortal(NEWSV(800,srclen));
2990 dstlen = strxfrm(SvPVX(ST(0)), p, (size_t)srclen);
2991 if (dstlen > srclen) {
2993 SvGROW(ST(0), dstlen);
2994 strxfrm(SvPVX(ST(0)), p, (size_t)dstlen);
2997 SvCUR(ST(0)) = dstlen;
3002 mkfifo(filename, mode)
3006 TAINT_PROPER("mkfifo");
3007 RETVAL = mkfifo(filename, mode);
3023 tcflush(fd, queue_selector)
3028 tcsendbreak(fd, duration)
3033 asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3048 mytm.tm_hour = hour;
3049 mytm.tm_mday = mday;
3051 mytm.tm_year = year;
3052 mytm.tm_wday = wday;
3053 mytm.tm_yday = yday;
3054 mytm.tm_isdst = isdst;
3055 RETVAL = asctime(&mytm);
3068 difftime(time1, time2)
3073 mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3088 mytm.tm_hour = hour;
3089 mytm.tm_mday = mday;
3091 mytm.tm_year = year;
3092 mytm.tm_wday = wday;
3093 mytm.tm_yday = yday;
3094 mytm.tm_isdst = isdst;
3095 RETVAL = mktime(&mytm);
3101 strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3119 mytm.tm_hour = hour;
3120 mytm.tm_mday = mday;
3122 mytm.tm_year = year;
3123 mytm.tm_wday = wday;
3124 mytm.tm_yday = yday;
3125 mytm.tm_isdst = isdst;
3126 len = strftime(tmpbuf, sizeof tmpbuf, fmt, &mytm);
3127 ST(0) = sv_2mortal(newSVpv(tmpbuf, len));
3137 PUSHs(sv_2mortal(newSVpv(tzname[0],strlen(tzname[0]))));
3138 PUSHs(sv_2mortal(newSVpv(tzname[1],strlen(tzname[1]))));
3141 access(filename, mode)
3159 pathconf(filename, name)