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);
2432 char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0;
2435 setvbuf(handle, buf, type, size)
2437 char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
2441 MODULE = POSIX PACKAGE = POSIX
2454 for (s = charstring; *s && RETVAL; s++)
2466 for (s = charstring; *s && RETVAL; s++)
2478 for (s = charstring; *s && RETVAL; s++)
2490 for (s = charstring; *s && RETVAL; s++)
2502 for (s = charstring; *s && RETVAL; s++)
2514 for (s = charstring; *s && RETVAL; s++)
2526 for (s = charstring; *s && RETVAL; s++)
2538 for (s = charstring; *s && RETVAL; s++)
2550 for (s = charstring; *s && RETVAL; s++)
2562 for (s = charstring; *s && RETVAL; s++)
2569 isxdigit(charstring)
2574 for (s = charstring; *s && RETVAL; s++)
2581 open(filename, flags = O_RDONLY, mode = 0666)
2589 #ifdef HAS_LOCALECONV
2590 struct lconv *lcbuf;
2592 if (lcbuf = localeconv()) {
2594 if (lcbuf->decimal_point && *lcbuf->decimal_point)
2595 hv_store(RETVAL, "decimal_point", 13,
2596 newSVpv(lcbuf->decimal_point, 0), 0);
2597 if (lcbuf->thousands_sep && *lcbuf->thousands_sep)
2598 hv_store(RETVAL, "thousands_sep", 13,
2599 newSVpv(lcbuf->thousands_sep, 0), 0);
2600 if (lcbuf->grouping && *lcbuf->grouping)
2601 hv_store(RETVAL, "grouping", 8,
2602 newSVpv(lcbuf->grouping, 0), 0);
2603 if (lcbuf->int_curr_symbol && *lcbuf->int_curr_symbol)
2604 hv_store(RETVAL, "int_curr_symbol", 15,
2605 newSVpv(lcbuf->int_curr_symbol, 0), 0);
2606 if (lcbuf->currency_symbol && *lcbuf->currency_symbol)
2607 hv_store(RETVAL, "currency_symbol", 15,
2608 newSVpv(lcbuf->currency_symbol, 0), 0);
2609 if (lcbuf->mon_decimal_point && *lcbuf->mon_decimal_point)
2610 hv_store(RETVAL, "mon_decimal_point", 17,
2611 newSVpv(lcbuf->mon_decimal_point, 0), 0);
2612 if (lcbuf->mon_thousands_sep && *lcbuf->mon_thousands_sep)
2613 hv_store(RETVAL, "mon_thousands_sep", 17,
2614 newSVpv(lcbuf->mon_thousands_sep, 0), 0);
2615 if (lcbuf->mon_grouping && *lcbuf->mon_grouping)
2616 hv_store(RETVAL, "mon_grouping", 12,
2617 newSVpv(lcbuf->mon_grouping, 0), 0);
2618 if (lcbuf->positive_sign && *lcbuf->positive_sign)
2619 hv_store(RETVAL, "positive_sign", 13,
2620 newSVpv(lcbuf->positive_sign, 0), 0);
2621 if (lcbuf->negative_sign && *lcbuf->negative_sign)
2622 hv_store(RETVAL, "negative_sign", 13,
2623 newSVpv(lcbuf->negative_sign, 0), 0);
2625 if (lcbuf->int_frac_digits != CHAR_MAX)
2626 hv_store(RETVAL, "int_frac_digits", 15,
2627 newSViv(lcbuf->int_frac_digits), 0);
2628 if (lcbuf->frac_digits != CHAR_MAX)
2629 hv_store(RETVAL, "frac_digits", 11,
2630 newSViv(lcbuf->frac_digits), 0);
2631 if (lcbuf->p_cs_precedes != CHAR_MAX)
2632 hv_store(RETVAL, "p_cs_precedes", 13,
2633 newSViv(lcbuf->p_cs_precedes), 0);
2634 if (lcbuf->p_sep_by_space != CHAR_MAX)
2635 hv_store(RETVAL, "p_sep_by_space", 14,
2636 newSViv(lcbuf->p_sep_by_space), 0);
2637 if (lcbuf->n_cs_precedes != CHAR_MAX)
2638 hv_store(RETVAL, "n_cs_precedes", 13,
2639 newSViv(lcbuf->n_cs_precedes), 0);
2640 if (lcbuf->n_sep_by_space != CHAR_MAX)
2641 hv_store(RETVAL, "n_sep_by_space", 14,
2642 newSViv(lcbuf->n_sep_by_space), 0);
2643 if (lcbuf->p_sign_posn != CHAR_MAX)
2644 hv_store(RETVAL, "p_sign_posn", 11,
2645 newSViv(lcbuf->p_sign_posn), 0);
2646 if (lcbuf->n_sign_posn != CHAR_MAX)
2647 hv_store(RETVAL, "n_sign_posn", 11,
2648 newSViv(lcbuf->n_sign_posn), 0);
2651 localeconv(); /* A stub to call not_here(). */
2657 setlocale(category, locale)
2695 /* (We already know stack is long enough.) */
2696 PUSHs(sv_2mortal(newSVnv(frexp(x,&expvar))));
2697 PUSHs(sv_2mortal(newSViv(expvar)));
2713 /* (We already know stack is long enough.) */
2714 PUSHs(sv_2mortal(newSVnv(modf(x,&intvar))));
2715 PUSHs(sv_2mortal(newSVnv(intvar)));
2726 sigaction(sig, action, oldaction = 0)
2728 POSIX::SigAction action
2729 POSIX::SigAction oldaction
2732 # This code is really grody because we're trying to make the signal
2733 # interface look beautiful, which is hard.
2736 gv_fetchpv("SIG", TRUE, SVt_PVHV);
2739 struct sigaction act;
2740 struct sigaction oact;
2741 POSIX__SigSet sigset;
2743 SV** sigsvp = hv_fetch(GvHVn(siggv),
2745 strlen(sig_name[sig]),
2748 /* Remember old handler name if desired. */
2750 char *hand = SvPVx(*sigsvp, na);
2751 svp = hv_fetch(oldaction, "HANDLER", 7, TRUE);
2752 sv_setpv(*svp, *hand ? hand : "DEFAULT");
2756 /* Vector new handler through %SIG. (We always use sighandler
2757 for the C signal handler, which reads %SIG to dispatch.) */
2758 svp = hv_fetch(action, "HANDLER", 7, FALSE);
2760 croak("Can't supply an action without a HANDLER");
2761 sv_setpv(*sigsvp, SvPV(*svp, na));
2762 mg_set(*sigsvp); /* handles DEFAULT and IGNORE */
2763 act.sa_handler = sighandler;
2765 /* Set up any desired mask. */
2766 svp = hv_fetch(action, "MASK", 4, FALSE);
2767 if (svp && sv_isa(*svp, "POSIX::SigSet")) {
2769 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2770 sigset = (sigset_t*) tmp;
2771 act.sa_mask = *sigset;
2774 sigemptyset(& act.sa_mask);
2776 /* Set up any desired flags. */
2777 svp = hv_fetch(action, "FLAGS", 5, FALSE);
2778 act.sa_flags = svp ? SvIV(*svp) : 0;
2781 /* Now work around sigaction oddities */
2782 if (action && oldaction)
2783 RETVAL = sigaction(sig, & act, & oact);
2785 RETVAL = sigaction(sig, & act, (struct sigaction*)0);
2787 RETVAL = sigaction(sig, (struct sigaction*)0, & oact);
2792 /* Get back the mask. */
2793 svp = hv_fetch(oldaction, "MASK", 4, TRUE);
2794 if (sv_isa(*svp, "POSIX::SigSet")) {
2796 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2797 sigset = (sigset_t*) tmp;
2800 sigset = (sigset_t*)safemalloc(sizeof(sigset_t));
2801 sv_setptrobj(*svp, sigset, "POSIX::SigSet");
2803 *sigset = oact.sa_mask;
2805 /* Get back the flags. */
2806 svp = hv_fetch(oldaction, "FLAGS", 5, TRUE);
2807 sv_setiv(*svp, oact.sa_flags);
2815 POSIX::SigSet sigset
2818 sigprocmask(how, sigset, oldsigset = 0)
2820 POSIX::SigSet sigset
2821 POSIX::SigSet oldsigset
2824 sigsuspend(signal_mask)
2825 POSIX::SigSet signal_mask
2845 lseek(fd, offset, whence)
2858 if (pipe(fds) != -1) {
2860 PUSHs(sv_2mortal(newSViv(fds[0])));
2861 PUSHs(sv_2mortal(newSViv(fds[1])));
2865 read(fd, buffer, nbytes)
2867 char * buffer = sv_grow(ST(1),SvIV(ST(2))+1);
2871 SvCUR(ST(1)) = RETVAL;
2873 *SvEND(ST(1)) = '\0';
2875 sv_magic(ST(1), 0, 't', 0, 0);
2899 tcsetpgrp(fd, pgrp_id)
2908 if (uname(&buf) >= 0) {
2910 PUSHs(sv_2mortal(newSVpv(buf.sysname, 0)));
2911 PUSHs(sv_2mortal(newSVpv(buf.nodename, 0)));
2912 PUSHs(sv_2mortal(newSVpv(buf.release, 0)));
2913 PUSHs(sv_2mortal(newSVpv(buf.version, 0)));
2914 PUSHs(sv_2mortal(newSVpv(buf.machine, 0)));
2917 uname((char *) 0); /* A stub to call not_here(). */
2921 write(fd, buffer, nbytes)
2939 mbstowcs(s, pwcs, n)
2951 wcstombs(s, pwcs, n)
2973 char *p = SvPV(src,srclen);
2975 ST(0) = sv_2mortal(newSV(srclen));
2976 dstlen = strxfrm(SvPVX(ST(0)), p, (size_t)srclen);
2977 if (dstlen > srclen) {
2979 SvGROW(ST(0), dstlen);
2980 strxfrm(SvPVX(ST(0)), p, (size_t)dstlen);
2983 SvCUR(ST(0)) = dstlen;
2988 mkfifo(filename, mode)
3004 tcflush(fd, queue_selector)
3009 tcsendbreak(fd, duration)
3014 asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3029 mytm.tm_hour = hour;
3030 mytm.tm_mday = mday;
3032 mytm.tm_year = year;
3033 mytm.tm_wday = wday;
3034 mytm.tm_yday = yday;
3035 mytm.tm_isdst = isdst;
3036 RETVAL = asctime(&mytm);
3049 difftime(time1, time2)
3054 mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3069 mytm.tm_hour = hour;
3070 mytm.tm_mday = mday;
3072 mytm.tm_year = year;
3073 mytm.tm_wday = wday;
3074 mytm.tm_yday = yday;
3075 mytm.tm_isdst = isdst;
3076 RETVAL = mktime(&mytm);
3082 strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3100 mytm.tm_hour = hour;
3101 mytm.tm_mday = mday;
3103 mytm.tm_year = year;
3104 mytm.tm_wday = wday;
3105 mytm.tm_yday = yday;
3106 mytm.tm_isdst = isdst;
3107 len = strftime(tmpbuf, sizeof tmpbuf, fmt, &mytm);
3108 ST(0) = sv_2mortal(newSVpv(tmpbuf, len));
3118 PUSHs(sv_2mortal(newSVpv(tzname[0],strlen(tzname[0]))));
3119 PUSHs(sv_2mortal(newSVpv(tzname[1],strlen(tzname[1]))));
3122 access(filename, mode)
3140 pathconf(filename, name)