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] == '_') {
1487 if (strEQ(name, "S_ISBLK")) return S_ISBLK(arg);
1490 if (strEQ(name, "S_ISCHR")) return S_ISCHR(arg);
1493 if (strEQ(name, "S_ISDIR")) return S_ISDIR(arg);
1496 if (strEQ(name, "S_ISFIFO")) return S_ISFIFO(arg);
1499 if (strEQ(name, "S_ISREG")) return S_ISREG(arg);
1501 if (strEQ(name, "S_ISGID"))
1507 if (strEQ(name, "S_ISUID"))
1513 if (strEQ(name, "S_IRGRP"))
1519 if (strEQ(name, "S_IROTH"))
1525 if (strEQ(name, "S_IRUSR"))
1531 if (strEQ(name, "S_IRWXG"))
1537 if (strEQ(name, "S_IRWXO"))
1543 if (strEQ(name, "S_IRWXU"))
1549 if (strEQ(name, "S_IWGRP"))
1555 if (strEQ(name, "S_IWOTH"))
1561 if (strEQ(name, "S_IWUSR"))
1567 if (strEQ(name, "S_IXGRP"))
1573 if (strEQ(name, "S_IXOTH"))
1579 if (strEQ(name, "S_IXUSR"))
1587 if (strEQ(name, "SEEK_CUR"))
1593 if (strEQ(name, "SEEK_END"))
1599 if (strEQ(name, "SEEK_SET"))
1605 if (strEQ(name, "STREAM_MAX"))
1611 if (strEQ(name, "SHRT_MAX"))
1617 if (strEQ(name, "SHRT_MIN"))
1623 if (strEQ(name, "SA_NOCLDSTOP"))
1625 return SA_NOCLDSTOP;
1629 if (strEQ(name, "SCHAR_MAX"))
1635 if (strEQ(name, "SCHAR_MIN"))
1641 if (strEQ(name, "SSIZE_MAX"))
1647 if (strEQ(name, "STDIN_FILENO"))
1649 return STDIN_FILENO;
1653 if (strEQ(name, "STDOUT_FILENO"))
1654 #ifdef STDOUT_FILENO
1655 return STDOUT_FILENO;
1659 if (strEQ(name, "STRERR_FILENO"))
1660 #ifdef STRERR_FILENO
1661 return STRERR_FILENO;
1667 if (strEQ(name, "TCIFLUSH"))
1673 if (strEQ(name, "TCIOFF"))
1679 if (strEQ(name, "TCIOFLUSH"))
1685 if (strEQ(name, "TCION"))
1691 if (strEQ(name, "TCOFLUSH"))
1697 if (strEQ(name, "TCOOFF"))
1703 if (strEQ(name, "TCOON"))
1709 if (strEQ(name, "TCSADRAIN"))
1715 if (strEQ(name, "TCSAFLUSH"))
1721 if (strEQ(name, "TCSANOW"))
1727 if (strEQ(name, "TMP_MAX"))
1733 if (strEQ(name, "TOSTOP"))
1739 if (strEQ(name, "TZNAME_MAX"))
1747 if (strEQ(name, "UCHAR_MAX"))
1753 if (strEQ(name, "UINT_MAX"))
1759 if (strEQ(name, "ULONG_MAX"))
1765 if (strEQ(name, "USHRT_MAX"))
1773 if (strEQ(name, "VEOF"))
1779 if (strEQ(name, "VEOL"))
1785 if (strEQ(name, "VERASE"))
1791 if (strEQ(name, "VINTR"))
1797 if (strEQ(name, "VKILL"))
1803 if (strEQ(name, "VMIN"))
1809 if (strEQ(name, "VQUIT"))
1815 if (strEQ(name, "VSTART"))
1821 if (strEQ(name, "VSTOP"))
1827 if (strEQ(name, "VSUSP"))
1833 if (strEQ(name, "VTIME"))
1841 if (strEQ(name, "W_OK"))
1848 if (strEQ(name, "WEXITSTATUS")) return WEXITSTATUS(arg);
1851 if (strEQ(name, "WIFEXITED")) return WIFEXITED(arg);
1854 if (strEQ(name, "WIFSIGNALED")) return WIFSIGNALED(arg);
1857 if (strEQ(name, "WIFSTOPPED")) return WIFSTOPPED(arg);
1859 if (strEQ(name, "WNOHANG"))
1866 if (strEQ(name, "WSTOPSIG")) return WSTOPSIG(arg);
1869 if (strEQ(name, "WTERMSIG")) return WTERMSIG(arg);
1871 if (strEQ(name, "WUNTRACED"))
1879 if (strEQ(name, "X_OK"))
1887 if (strnEQ(name, "_PC_", 4)) {
1888 if (strEQ(name, "_PC_CHOWN_RESTRICTED"))
1889 #ifdef _PC_CHOWN_RESTRICTED
1890 return _PC_CHOWN_RESTRICTED;
1894 if (strEQ(name, "_PC_LINK_MAX"))
1896 return _PC_LINK_MAX;
1900 if (strEQ(name, "_PC_MAX_CANON"))
1901 #ifdef _PC_MAX_CANON
1902 return _PC_MAX_CANON;
1906 if (strEQ(name, "_PC_MAX_INPUT"))
1907 #ifdef _PC_MAX_INPUT
1908 return _PC_MAX_INPUT;
1912 if (strEQ(name, "_PC_NAME_MAX"))
1914 return _PC_NAME_MAX;
1918 if (strEQ(name, "_PC_NO_TRUNC"))
1920 return _PC_NO_TRUNC;
1924 if (strEQ(name, "_PC_PATH_MAX"))
1926 return _PC_PATH_MAX;
1930 if (strEQ(name, "_PC_PIPE_BUF"))
1932 return _PC_PIPE_BUF;
1936 if (strEQ(name, "_PC_VDISABLE"))
1938 return _PC_VDISABLE;
1944 if (strnEQ(name, "_POSIX_", 7)) {
1945 if (strEQ(name, "_POSIX_ARG_MAX"))
1946 #ifdef _POSIX_ARG_MAX
1947 return _POSIX_ARG_MAX;
1951 if (strEQ(name, "_POSIX_CHILD_MAX"))
1952 #ifdef _POSIX_CHILD_MAX
1953 return _POSIX_CHILD_MAX;
1957 if (strEQ(name, "_POSIX_CHOWN_RESTRICTED"))
1958 #ifdef _POSIX_CHOWN_RESTRICTED
1959 return _POSIX_CHOWN_RESTRICTED;
1963 if (strEQ(name, "_POSIX_JOB_CONTROL"))
1964 #ifdef _POSIX_JOB_CONTROL
1965 return _POSIX_JOB_CONTROL;
1969 if (strEQ(name, "_POSIX_LINK_MAX"))
1970 #ifdef _POSIX_LINK_MAX
1971 return _POSIX_LINK_MAX;
1975 if (strEQ(name, "_POSIX_MAX_CANON"))
1976 #ifdef _POSIX_MAX_CANON
1977 return _POSIX_MAX_CANON;
1981 if (strEQ(name, "_POSIX_MAX_INPUT"))
1982 #ifdef _POSIX_MAX_INPUT
1983 return _POSIX_MAX_INPUT;
1987 if (strEQ(name, "_POSIX_NAME_MAX"))
1988 #ifdef _POSIX_NAME_MAX
1989 return _POSIX_NAME_MAX;
1993 if (strEQ(name, "_POSIX_NGROUPS_MAX"))
1994 #ifdef _POSIX_NGROUPS_MAX
1995 return _POSIX_NGROUPS_MAX;
1999 if (strEQ(name, "_POSIX_NO_TRUNC"))
2000 #ifdef _POSIX_NO_TRUNC
2001 return _POSIX_NO_TRUNC;
2005 if (strEQ(name, "_POSIX_OPEN_MAX"))
2006 #ifdef _POSIX_OPEN_MAX
2007 return _POSIX_OPEN_MAX;
2011 if (strEQ(name, "_POSIX_PATH_MAX"))
2012 #ifdef _POSIX_PATH_MAX
2013 return _POSIX_PATH_MAX;
2017 if (strEQ(name, "_POSIX_PIPE_BUF"))
2018 #ifdef _POSIX_PIPE_BUF
2019 return _POSIX_PIPE_BUF;
2023 if (strEQ(name, "_POSIX_SAVED_IDS"))
2024 #ifdef _POSIX_SAVED_IDS
2025 return _POSIX_SAVED_IDS;
2029 if (strEQ(name, "_POSIX_SSIZE_MAX"))
2030 #ifdef _POSIX_SSIZE_MAX
2031 return _POSIX_SSIZE_MAX;
2035 if (strEQ(name, "_POSIX_STREAM_MAX"))
2036 #ifdef _POSIX_STREAM_MAX
2037 return _POSIX_STREAM_MAX;
2041 if (strEQ(name, "_POSIX_TZNAME_MAX"))
2042 #ifdef _POSIX_TZNAME_MAX
2043 return _POSIX_TZNAME_MAX;
2047 if (strEQ(name, "_POSIX_VDISABLE"))
2048 #ifdef _POSIX_VDISABLE
2049 return _POSIX_VDISABLE;
2053 if (strEQ(name, "_POSIX_VERSION"))
2054 #ifdef _POSIX_VERSION
2055 return _POSIX_VERSION;
2061 if (strnEQ(name, "_SC_", 4)) {
2062 if (strEQ(name, "_SC_ARG_MAX"))
2068 if (strEQ(name, "_SC_CHILD_MAX"))
2069 #ifdef _SC_CHILD_MAX
2070 return _SC_CHILD_MAX;
2074 if (strEQ(name, "_SC_CLK_TCK"))
2080 if (strEQ(name, "_SC_JOB_CONTROL"))
2081 #ifdef _SC_JOB_CONTROL
2082 return _SC_JOB_CONTROL;
2086 if (strEQ(name, "_SC_NGROUPS_MAX"))
2087 #ifdef _SC_NGROUPS_MAX
2088 return _SC_NGROUPS_MAX;
2092 if (strEQ(name, "_SC_OPEN_MAX"))
2094 return _SC_OPEN_MAX;
2098 if (strEQ(name, "_SC_SAVED_IDS"))
2099 #ifdef _SC_SAVED_IDS
2100 return _SC_SAVED_IDS;
2104 if (strEQ(name, "_SC_STREAM_MAX"))
2105 #ifdef _SC_STREAM_MAX
2106 return _SC_STREAM_MAX;
2110 if (strEQ(name, "_SC_TZNAME_MAX"))
2111 #ifdef _SC_TZNAME_MAX
2112 return _SC_TZNAME_MAX;
2116 if (strEQ(name, "_SC_VERSION"))
2124 if (strEQ(name, "_IOFBF"))
2130 if (strEQ(name, "_IOLBF"))
2136 if (strEQ(name, "_IONBF"))
2152 MODULE = SigSet PACKAGE = POSIX::SigSet PREFIX = sig
2155 new(packname = "POSIX::SigSet", ...)
2160 RETVAL = (sigset_t*)safemalloc(sizeof(sigset_t));
2161 sigemptyset(RETVAL);
2162 for (i = 1; i < items; i++)
2163 sigaddset(RETVAL, SvIV(ST(i)));
2170 POSIX::SigSet sigset
2172 safefree((char *)sigset);
2175 sigaddset(sigset, sig)
2176 POSIX::SigSet sigset
2180 sigdelset(sigset, sig)
2181 POSIX::SigSet sigset
2186 POSIX::SigSet sigset
2190 POSIX::SigSet sigset
2193 sigismember(sigset, sig)
2194 POSIX::SigSet sigset
2198 MODULE = Termios PACKAGE = POSIX::Termios PREFIX = cf
2201 new(packname = "POSIX::Termios", ...)
2206 RETVAL = (struct termios*)safemalloc(sizeof(struct termios));
2208 not_here("termios");
2215 DESTROY(termios_ref)
2216 POSIX::Termios termios_ref
2219 safefree((char *)termios_ref);
2221 not_here("termios");
2225 getattr(termios_ref, fd = 0)
2226 POSIX::Termios termios_ref
2229 RETVAL = tcgetattr(fd, termios_ref);
2234 setattr(termios_ref, fd = 0, optional_actions = 0)
2235 POSIX::Termios termios_ref
2237 int optional_actions
2239 RETVAL = tcsetattr(fd, optional_actions, termios_ref);
2244 cfgetispeed(termios_ref)
2245 POSIX::Termios termios_ref
2248 cfgetospeed(termios_ref)
2249 POSIX::Termios termios_ref
2252 getiflag(termios_ref)
2253 POSIX::Termios termios_ref
2255 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2256 RETVAL = termios_ref->c_iflag;
2258 not_here("getiflag");
2264 getoflag(termios_ref)
2265 POSIX::Termios termios_ref
2267 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2268 RETVAL = termios_ref->c_oflag;
2270 not_here("getoflag");
2276 getcflag(termios_ref)
2277 POSIX::Termios termios_ref
2279 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2280 RETVAL = termios_ref->c_cflag;
2282 not_here("getcflag");
2288 getlflag(termios_ref)
2289 POSIX::Termios termios_ref
2291 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2292 RETVAL = termios_ref->c_lflag;
2294 not_here("getlflag");
2300 getcc(termios_ref, ccix)
2301 POSIX::Termios termios_ref
2304 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2306 croak("Bad getcc subscript");
2307 RETVAL = termios_ref->c_cc[ccix];
2315 cfsetispeed(termios_ref, speed)
2316 POSIX::Termios termios_ref
2320 cfsetospeed(termios_ref, speed)
2321 POSIX::Termios termios_ref
2325 setiflag(termios_ref, iflag)
2326 POSIX::Termios termios_ref
2329 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2330 termios_ref->c_iflag = iflag;
2332 not_here("setiflag");
2336 setoflag(termios_ref, oflag)
2337 POSIX::Termios termios_ref
2340 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2341 termios_ref->c_oflag = oflag;
2343 not_here("setoflag");
2347 setcflag(termios_ref, cflag)
2348 POSIX::Termios termios_ref
2351 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2352 termios_ref->c_cflag = cflag;
2354 not_here("setcflag");
2358 setlflag(termios_ref, lflag)
2359 POSIX::Termios termios_ref
2362 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2363 termios_ref->c_lflag = lflag;
2365 not_here("setlflag");
2369 setcc(termios_ref, ccix, cc)
2370 POSIX::Termios termios_ref
2374 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2376 croak("Bad setcc subscript");
2377 termios_ref->c_cc[ccix] = cc;
2384 MODULE = FileHandle PACKAGE = FileHandle PREFIX = f
2392 fgetpos(handle, &pos);
2393 ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t)));
2397 fsetpos(handle, pos)
2401 RETVAL = fsetpos(handle, (Fpos_t*)SvPVX(pos));
2410 RETVAL = ungetc(c, handle);
2415 new_tmpfile(packname = "FileHandle")
2433 char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0;
2436 setvbuf(handle, buf, type, size)
2438 char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
2442 MODULE = POSIX PACKAGE = POSIX
2455 for (s = charstring; *s && RETVAL; s++)
2467 for (s = charstring; *s && RETVAL; s++)
2479 for (s = charstring; *s && RETVAL; s++)
2491 for (s = charstring; *s && RETVAL; s++)
2503 for (s = charstring; *s && RETVAL; s++)
2515 for (s = charstring; *s && RETVAL; s++)
2527 for (s = charstring; *s && RETVAL; s++)
2539 for (s = charstring; *s && RETVAL; s++)
2551 for (s = charstring; *s && RETVAL; s++)
2563 for (s = charstring; *s && RETVAL; s++)
2570 isxdigit(charstring)
2575 for (s = charstring; *s && RETVAL; s++)
2582 open(filename, flags = O_RDONLY, mode = 0666)
2587 if (flags & (O_APPEND|O_CREAT|O_TRUNC|O_RDWR|O_WRONLY|O_EXCL))
2588 TAINT_PROPER("open");
2589 RETVAL = open(filename, flags, mode);
2597 #ifdef HAS_LOCALECONV
2598 struct lconv *lcbuf;
2600 if (lcbuf = localeconv()) {
2602 if (lcbuf->decimal_point && *lcbuf->decimal_point)
2603 hv_store(RETVAL, "decimal_point", 13,
2604 newSVpv(lcbuf->decimal_point, 0), 0);
2605 if (lcbuf->thousands_sep && *lcbuf->thousands_sep)
2606 hv_store(RETVAL, "thousands_sep", 13,
2607 newSVpv(lcbuf->thousands_sep, 0), 0);
2608 if (lcbuf->grouping && *lcbuf->grouping)
2609 hv_store(RETVAL, "grouping", 8,
2610 newSVpv(lcbuf->grouping, 0), 0);
2611 if (lcbuf->int_curr_symbol && *lcbuf->int_curr_symbol)
2612 hv_store(RETVAL, "int_curr_symbol", 15,
2613 newSVpv(lcbuf->int_curr_symbol, 0), 0);
2614 if (lcbuf->currency_symbol && *lcbuf->currency_symbol)
2615 hv_store(RETVAL, "currency_symbol", 15,
2616 newSVpv(lcbuf->currency_symbol, 0), 0);
2617 if (lcbuf->mon_decimal_point && *lcbuf->mon_decimal_point)
2618 hv_store(RETVAL, "mon_decimal_point", 17,
2619 newSVpv(lcbuf->mon_decimal_point, 0), 0);
2620 if (lcbuf->mon_thousands_sep && *lcbuf->mon_thousands_sep)
2621 hv_store(RETVAL, "mon_thousands_sep", 17,
2622 newSVpv(lcbuf->mon_thousands_sep, 0), 0);
2623 if (lcbuf->mon_grouping && *lcbuf->mon_grouping)
2624 hv_store(RETVAL, "mon_grouping", 12,
2625 newSVpv(lcbuf->mon_grouping, 0), 0);
2626 if (lcbuf->positive_sign && *lcbuf->positive_sign)
2627 hv_store(RETVAL, "positive_sign", 13,
2628 newSVpv(lcbuf->positive_sign, 0), 0);
2629 if (lcbuf->negative_sign && *lcbuf->negative_sign)
2630 hv_store(RETVAL, "negative_sign", 13,
2631 newSVpv(lcbuf->negative_sign, 0), 0);
2633 if (lcbuf->int_frac_digits != CHAR_MAX)
2634 hv_store(RETVAL, "int_frac_digits", 15,
2635 newSViv(lcbuf->int_frac_digits), 0);
2636 if (lcbuf->frac_digits != CHAR_MAX)
2637 hv_store(RETVAL, "frac_digits", 11,
2638 newSViv(lcbuf->frac_digits), 0);
2639 if (lcbuf->p_cs_precedes != CHAR_MAX)
2640 hv_store(RETVAL, "p_cs_precedes", 13,
2641 newSViv(lcbuf->p_cs_precedes), 0);
2642 if (lcbuf->p_sep_by_space != CHAR_MAX)
2643 hv_store(RETVAL, "p_sep_by_space", 14,
2644 newSViv(lcbuf->p_sep_by_space), 0);
2645 if (lcbuf->n_cs_precedes != CHAR_MAX)
2646 hv_store(RETVAL, "n_cs_precedes", 13,
2647 newSViv(lcbuf->n_cs_precedes), 0);
2648 if (lcbuf->n_sep_by_space != CHAR_MAX)
2649 hv_store(RETVAL, "n_sep_by_space", 14,
2650 newSViv(lcbuf->n_sep_by_space), 0);
2651 if (lcbuf->p_sign_posn != CHAR_MAX)
2652 hv_store(RETVAL, "p_sign_posn", 11,
2653 newSViv(lcbuf->p_sign_posn), 0);
2654 if (lcbuf->n_sign_posn != CHAR_MAX)
2655 hv_store(RETVAL, "n_sign_posn", 11,
2656 newSViv(lcbuf->n_sign_posn), 0);
2659 localeconv(); /* A stub to call not_here(). */
2665 setlocale(category, locale)
2703 /* (We already know stack is long enough.) */
2704 PUSHs(sv_2mortal(newSVnv(frexp(x,&expvar))));
2705 PUSHs(sv_2mortal(newSViv(expvar)));
2721 /* (We already know stack is long enough.) */
2722 PUSHs(sv_2mortal(newSVnv(modf(x,&intvar))));
2723 PUSHs(sv_2mortal(newSVnv(intvar)));
2738 sigaction(sig, action, oldaction = 0)
2740 POSIX::SigAction action
2741 POSIX::SigAction oldaction
2744 # This code is really grody because we're trying to make the signal
2745 # interface look beautiful, which is hard.
2748 gv_fetchpv("SIG", TRUE, SVt_PVHV);
2751 struct sigaction act;
2752 struct sigaction oact;
2753 POSIX__SigSet sigset;
2755 SV** sigsvp = hv_fetch(GvHVn(siggv),
2757 strlen(sig_name[sig]),
2760 /* Remember old handler name if desired. */
2762 char *hand = SvPVx(*sigsvp, na);
2763 svp = hv_fetch(oldaction, "HANDLER", 7, TRUE);
2764 sv_setpv(*svp, *hand ? hand : "DEFAULT");
2768 /* Vector new handler through %SIG. (We always use sighandler
2769 for the C signal handler, which reads %SIG to dispatch.) */
2770 svp = hv_fetch(action, "HANDLER", 7, FALSE);
2772 croak("Can't supply an action without a HANDLER");
2773 sv_setpv(*sigsvp, SvPV(*svp, na));
2774 mg_set(*sigsvp); /* handles DEFAULT and IGNORE */
2775 act.sa_handler = sighandler;
2777 /* Set up any desired mask. */
2778 svp = hv_fetch(action, "MASK", 4, FALSE);
2779 if (svp && sv_isa(*svp, "POSIX::SigSet")) {
2781 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2782 sigset = (sigset_t*) tmp;
2783 act.sa_mask = *sigset;
2786 sigemptyset(& act.sa_mask);
2788 /* Set up any desired flags. */
2789 svp = hv_fetch(action, "FLAGS", 5, FALSE);
2790 act.sa_flags = svp ? SvIV(*svp) : 0;
2793 /* Now work around sigaction oddities */
2794 if (action && oldaction)
2795 RETVAL = sigaction(sig, & act, & oact);
2797 RETVAL = sigaction(sig, & act, (struct sigaction*)0);
2799 RETVAL = sigaction(sig, (struct sigaction*)0, & oact);
2804 /* Get back the mask. */
2805 svp = hv_fetch(oldaction, "MASK", 4, TRUE);
2806 if (sv_isa(*svp, "POSIX::SigSet")) {
2808 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2809 sigset = (sigset_t*) tmp;
2812 sigset = (sigset_t*)safemalloc(sizeof(sigset_t));
2813 sv_setptrobj(*svp, sigset, "POSIX::SigSet");
2815 *sigset = oact.sa_mask;
2817 /* Get back the flags. */
2818 svp = hv_fetch(oldaction, "FLAGS", 5, TRUE);
2819 sv_setiv(*svp, oact.sa_flags);
2827 POSIX::SigSet sigset
2830 sigprocmask(how, sigset, oldsigset = 0)
2832 POSIX::SigSet sigset
2833 POSIX::SigSet oldsigset
2836 sigsuspend(signal_mask)
2837 POSIX::SigSet signal_mask
2857 lseek(fd, offset, whence)
2870 if (pipe(fds) != -1) {
2872 PUSHs(sv_2mortal(newSViv(fds[0])));
2873 PUSHs(sv_2mortal(newSViv(fds[1])));
2877 read(fd, buffer, nbytes)
2879 char * buffer = sv_grow(ST(1),SvIV(ST(2))+1);
2883 SvCUR(ST(1)) = RETVAL;
2885 *SvEND(ST(1)) = '\0';
2887 sv_magic(ST(1), 0, 't', 0, 0);
2911 tcsetpgrp(fd, pgrp_id)
2920 if (uname(&buf) >= 0) {
2922 PUSHs(sv_2mortal(newSVpv(buf.sysname, 0)));
2923 PUSHs(sv_2mortal(newSVpv(buf.nodename, 0)));
2924 PUSHs(sv_2mortal(newSVpv(buf.release, 0)));
2925 PUSHs(sv_2mortal(newSVpv(buf.version, 0)));
2926 PUSHs(sv_2mortal(newSVpv(buf.machine, 0)));
2929 uname((char *) 0); /* A stub to call not_here(). */
2933 write(fd, buffer, nbytes)
2951 mbstowcs(s, pwcs, n)
2963 wcstombs(s, pwcs, n)
2985 char *p = SvPV(src,srclen);
2987 ST(0) = sv_2mortal(NEWSV(800,srclen));
2988 dstlen = strxfrm(SvPVX(ST(0)), p, (size_t)srclen);
2989 if (dstlen > srclen) {
2991 SvGROW(ST(0), dstlen);
2992 strxfrm(SvPVX(ST(0)), p, (size_t)dstlen);
2995 SvCUR(ST(0)) = dstlen;
3000 mkfifo(filename, mode)
3004 TAINT_PROPER("mkfifo");
3005 RETVAL = mkfifo(filename, mode);
3021 tcflush(fd, queue_selector)
3026 tcsendbreak(fd, duration)
3031 asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3046 mytm.tm_hour = hour;
3047 mytm.tm_mday = mday;
3049 mytm.tm_year = year;
3050 mytm.tm_wday = wday;
3051 mytm.tm_yday = yday;
3052 mytm.tm_isdst = isdst;
3053 RETVAL = asctime(&mytm);
3066 difftime(time1, time2)
3071 mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3086 mytm.tm_hour = hour;
3087 mytm.tm_mday = mday;
3089 mytm.tm_year = year;
3090 mytm.tm_wday = wday;
3091 mytm.tm_yday = yday;
3092 mytm.tm_isdst = isdst;
3093 RETVAL = mktime(&mytm);
3099 strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3117 mytm.tm_hour = hour;
3118 mytm.tm_mday = mday;
3120 mytm.tm_year = year;
3121 mytm.tm_wday = wday;
3122 mytm.tm_yday = yday;
3123 mytm.tm_isdst = isdst;
3124 len = strftime(tmpbuf, sizeof tmpbuf, fmt, &mytm);
3125 ST(0) = sv_2mortal(newSVpv(tmpbuf, len));
3135 PUSHs(sv_2mortal(newSVpv(tzname[0],strlen(tzname[0]))));
3136 PUSHs(sv_2mortal(newSVpv(tzname[1],strlen(tzname[1]))));
3139 access(filename, mode)
3157 pathconf(filename, name)