2 #define PERLIO_NOT_STDIO 1
6 #ifdef I_DIRENT /* XXX maybe better to just rely on perl.h? */
29 /* XXX This comment is just to make I_TERMIO and I_SGTTY visible to
30 metaconfig for future extension writers. We don't use them in POSIX.
31 (This is really sneaky :-) --AD
33 #if defined(I_TERMIOS)
41 #include <sys/types.h>
46 #if defined(__VMS) && !defined(__POSIX_SOURCE)
47 # include <libdef.h> /* LIB$_INVARG constant */
48 # include <lib$routines.h> /* prototype for lib$ediv() */
49 # include <starlet.h> /* prototype for sys$gettim() */
51 # undef mkfifo /* #defined in perl.h */
52 # define mkfifo(a,b) (not_here("mkfifo"),-1)
53 # define tzset() not_here("tzset")
55 # if __VMS_VER < 70000000
56 /* The default VMS emulation of Unix signals isn't very POSIXish */
58 # define sigpending(a) (not_here("sigpending"),0)
60 /* sigset_t is atomic under VMS, so these routines are easy */
61 int sigemptyset(sigset_t *set) {
62 if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
65 int sigfillset(sigset_t *set) {
67 if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
68 for (i = 0; i < NSIG; i++) *set |= (1 << i);
71 int sigaddset(sigset_t *set, int sig) {
72 if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
73 if (sig > NSIG) { SETERRNO(EINVAL,LIB$_INVARG); return -1; }
74 *set |= (1 << (sig - 1));
77 int sigdelset(sigset_t *set, int sig) {
78 if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
79 if (sig > NSIG) { SETERRNO(EINVAL,LIB$_INVARG); return -1; }
80 *set &= ~(1 << (sig - 1));
83 int sigismember(sigset_t *set, int sig) {
84 if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
85 if (sig > NSIG) { SETERRNO(EINVAL,LIB$_INVARG); return -1; }
86 *set & (1 << (sig - 1));
88 /* The tools for sigprocmask() are there, just not the routine itself */
90 # define SIG_UNBLOCK 1
96 # define SIG_SETMASK 3
98 int sigprocmask(int how, sigset_t *set, sigset_t *oset) {
100 set_errno(EFAULT); set_vaxc_errno(SS$_ACCVIO);
105 *oset = sigsetmask(*set);
108 *oset = sigblock(*set);
112 sigsetmask(*oset & ~*set);
115 set_errno(EINVAL); set_vaxc_errno(LIB$_INVARG);
120 # define sigaction sigvec
121 # define sa_flags sv_onstack
122 # define sa_handler sv_handler
123 # define sa_mask sv_mask
124 # define sigsuspend(set) sigpause(*set)
126 # define HAS_TZNAME /* shows up in VMS 7.0 */
127 # endif /* __VMS_VER < 70000000 */
129 /* The POSIX notion of ttyname() is better served by getname() under VMS */
130 static char ttnambuf[64];
131 # define ttyname(fd) (isatty(fd) > 0 ? getname(fd,ttnambuf,0) : NULL)
133 /* The non-POSIX CRTL times() has void return type, so we just get the
134 current time directly */
135 clock_t vms_times(struct tms *bufptr) {
137 /* Get wall time and convert to 10 ms intervals to
138 * produce the return value that the POSIX standard expects */
139 # if defined(__DECC) && defined (__ALPHA)
142 _ckvmssts(sys$gettim(&vmstime));
144 retval = vmstime & 0x7fffffff;
146 /* (Older hw or ccs don't have an atomic 64-bit type, so we
147 * juggle 32-bit ints (and a float) to produce a time_t result
148 * with minimal loss of information.) */
149 long int vmstime[2],remainder,divisor = 100000;
150 _ckvmssts(sys$gettim((unsigned long int *)vmstime));
151 vmstime[1] &= 0x7fff; /* prevent overflow in EDIV */
152 _ckvmssts(lib$ediv(&divisor,vmstime,(long int *)&retval,&remainder));
154 /* Fill in the struct tms using the CRTL routine . . .*/
155 times((tbuffer_t *)bufptr);
156 return (clock_t) retval;
158 # define times(t) vms_times(t)
161 # include <sys/times.h>
163 # include <sys/utsname.h>
165 # include <sys/wait.h>
172 typedef long SysRetLong;
173 typedef sigset_t* POSIX__SigSet;
174 typedef HV* POSIX__SigAction;
176 typedef struct termios* POSIX__Termios;
177 #else /* Define termios types to int, and call not_here for the functions.*/
178 #define POSIX__Termios int
182 #define cfgetispeed(x) not_here("cfgetispeed")
183 #define cfgetospeed(x) not_here("cfgetospeed")
184 #define tcdrain(x) not_here("tcdrain")
185 #define tcflush(x,y) not_here("tcflush")
186 #define tcsendbreak(x,y) not_here("tcsendbreak")
187 #define cfsetispeed(x,y) not_here("cfsetispeed")
188 #define cfsetospeed(x,y) not_here("cfsetospeed")
189 #define ctermid(x) (char *) not_here("ctermid")
190 #define tcflow(x,y) not_here("tcflow")
191 #define tcgetattr(x,y) not_here("tcgetattr")
192 #define tcsetattr(x,y,z) not_here("tcsetattr")
195 /* Possibly needed prototypes */
196 char *cuserid _((char *));
197 double strtod _((const char *, char **));
198 long strtol _((const char *, char **, int));
199 unsigned long strtoul _((const char *, char **, int));
202 #define cuserid(a) (char *) not_here("cuserid")
206 #define difftime(a,b) not_here("difftime")
209 #ifndef HAS_FPATHCONF
210 #define fpathconf(f,n) (SysRetLong) not_here("fpathconf")
213 #define mktime(a) not_here("mktime")
216 #define nice(a) not_here("nice")
219 #define pathconf(f,n) (SysRetLong) not_here("pathconf")
222 #define sysconf(n) (SysRetLong) not_here("sysconf")
225 #define readlink(a,b,c) not_here("readlink")
228 #define setpgid(a,b) not_here("setpgid")
231 #define setsid() not_here("setsid")
234 #define strcoll(s1,s2) not_here("strcoll")
237 #define strtod(s1,s2) not_here("strtod")
240 #define strtol(s1,s2,b) not_here("strtol")
243 #define strtoul(s1,s2,b) not_here("strtoul")
246 #define strxfrm(s1,s2,n) not_here("strxfrm")
248 #ifndef HAS_TCGETPGRP
249 #define tcgetpgrp(a) not_here("tcgetpgrp")
251 #ifndef HAS_TCSETPGRP
252 #define tcsetpgrp(a,b) not_here("tcsetpgrp")
255 #define times(a) not_here("times")
258 #define uname(a) not_here("uname")
261 #define waitpid(a,b,c) not_here("waitpid")
266 #define mblen(a,b) not_here("mblen")
270 #define mbstowcs(s, pwcs, n) not_here("mbstowcs")
273 #define mbtowc(pwc, s, n) not_here("mbtowc")
276 #define wcstombs(s, pwcs, n) not_here("wcstombs")
279 #define wctomb(s, wchar) not_here("wcstombs")
281 #if !defined(HAS_MBLEN) && !defined(HAS_MBSTOWCS) && !defined(HAS_MBTOWC) && !defined(HAS_WCSTOMBS) && !defined(HAS_WCTOMB)
282 /* If we don't have these functions, then we wouldn't have gotten a typedef
283 for wchar_t, the wide character type. Defining wchar_t allows the
284 functions referencing it to compile. Its actual type is then meaningless,
285 since without the above functions, all sections using it end up calling
286 not_here() and croak. --Kaveh Ghazi (ghazi@noc.rutgers.edu) 9/18/94. */
292 #ifndef HAS_LOCALECONV
293 #define localeconv() not_here("localeconv")
297 extern char *tzname[];
299 char *tzname[] = { "" , "" };
302 /* XXX struct tm on some systems (SunOS4/BSD) contains extra (non POSIX)
303 * fields for which we don't have Configure support yet:
304 * char *tm_zone; -- abbreviation of timezone name
305 * long tm_gmtoff; -- offset from GMT in seconds
306 * To workaround core dumps from the uninitialised tm_zone we get the
307 * system to give us a reasonable struct to copy. This fix means that
308 * strftime uses the tm_zone and tm_gmtoff values returned by
309 * localtime(time()). That should give the desired result most of the
310 * time. But probably not always!
312 * This is a temporary workaround to be removed once Configure
313 * support is added and NETaa14816 is considered in full.
314 * It does not address tzname aspects of NETaa14816.
316 #ifdef STRUCT_TM_HASZONE
318 init_tm(ptm) /* see mktime, strftime and asctime */
323 Copy(localtime(&now), ptm, 1, struct tm);
327 # define init_tm(ptm)
331 #ifndef HAS_LONG_DOUBLE /* XXX What to do about long doubles? */
347 croak("POSIX::%s not implemented on this architecture", s);
359 if (strEQ(name, "ARG_MAX"))
367 if (strEQ(name, "BUFSIZ"))
373 if (strEQ(name, "BRKINT"))
379 if (strEQ(name, "B9600"))
385 if (strEQ(name, "B19200"))
391 if (strEQ(name, "B38400"))
397 if (strEQ(name, "B0"))
403 if (strEQ(name, "B110"))
409 if (strEQ(name, "B1200"))
415 if (strEQ(name, "B134"))
421 if (strEQ(name, "B150"))
427 if (strEQ(name, "B1800"))
433 if (strEQ(name, "B200"))
439 if (strEQ(name, "B2400"))
445 if (strEQ(name, "B300"))
451 if (strEQ(name, "B4800"))
457 if (strEQ(name, "B50"))
463 if (strEQ(name, "B600"))
469 if (strEQ(name, "B75"))
477 if (strEQ(name, "CHAR_BIT"))
483 if (strEQ(name, "CHAR_MAX"))
489 if (strEQ(name, "CHAR_MIN"))
495 if (strEQ(name, "CHILD_MAX"))
501 if (strEQ(name, "CLK_TCK"))
507 if (strEQ(name, "CLOCAL"))
513 if (strEQ(name, "CLOCKS_PER_SEC"))
514 #ifdef CLOCKS_PER_SEC
515 return CLOCKS_PER_SEC;
519 if (strEQ(name, "CREAD"))
525 if (strEQ(name, "CS5"))
531 if (strEQ(name, "CS6"))
537 if (strEQ(name, "CS7"))
543 if (strEQ(name, "CS8"))
549 if (strEQ(name, "CSIZE"))
555 if (strEQ(name, "CSTOPB"))
563 if (strEQ(name, "DBL_MAX"))
569 if (strEQ(name, "DBL_MIN"))
575 if (strEQ(name, "DBL_DIG"))
581 if (strEQ(name, "DBL_EPSILON"))
587 if (strEQ(name, "DBL_MANT_DIG"))
593 if (strEQ(name, "DBL_MAX_10_EXP"))
594 #ifdef DBL_MAX_10_EXP
595 return DBL_MAX_10_EXP;
599 if (strEQ(name, "DBL_MAX_EXP"))
605 if (strEQ(name, "DBL_MIN_10_EXP"))
606 #ifdef DBL_MIN_10_EXP
607 return DBL_MIN_10_EXP;
611 if (strEQ(name, "DBL_MIN_EXP"))
621 if (strEQ(name, "EACCES"))
627 if (strEQ(name, "EAGAIN"))
635 if (strEQ(name, "EBADF"))
641 if (strEQ(name, "EBUSY"))
649 if (strEQ(name, "ECHILD"))
655 if (strEQ(name, "ECHO"))
661 if (strEQ(name, "ECHOE"))
667 if (strEQ(name, "ECHOK"))
673 if (strEQ(name, "ECHONL"))
681 if (strEQ(name, "EDEADLK"))
687 if (strEQ(name, "EDOM"))
695 if (strEQ(name, "EEXIST"))
703 if (strEQ(name, "EFAULT"))
709 if (strEQ(name, "EFBIG"))
717 if (strEQ(name, "EINTR"))
723 if (strEQ(name, "EINVAL"))
729 if (strEQ(name, "EIO"))
735 if (strEQ(name, "EISDIR"))
743 if (strEQ(name, "EMFILE"))
749 if (strEQ(name, "EMLINK"))
757 if (strEQ(name, "ENOMEM"))
763 if (strEQ(name, "ENOSPC"))
769 if (strEQ(name, "ENOEXEC"))
775 if (strEQ(name, "ENOTTY"))
781 if (strEQ(name, "ENOTDIR"))
787 if (strEQ(name, "ENOTEMPTY"))
793 if (strEQ(name, "ENFILE"))
799 if (strEQ(name, "ENODEV"))
805 if (strEQ(name, "ENOENT"))
811 if (strEQ(name, "ENOLCK"))
817 if (strEQ(name, "ENOSYS"))
823 if (strEQ(name, "ENXIO"))
829 if (strEQ(name, "ENAMETOOLONG"))
837 if (strEQ(name, "EOF"))
845 if (strEQ(name, "EPERM"))
851 if (strEQ(name, "EPIPE"))
859 if (strEQ(name, "ERANGE"))
865 if (strEQ(name, "EROFS"))
873 if (strEQ(name, "ESPIPE"))
879 if (strEQ(name, "ESRCH"))
887 if (strEQ(name, "EXIT_FAILURE"))
893 if (strEQ(name, "EXIT_SUCCESS"))
899 if (strEQ(name, "EXDEV"))
907 if (strEQ(name, "E2BIG"))
915 if (strnEQ(name, "FLT_", 4)) {
916 if (strEQ(name, "FLT_MAX"))
922 if (strEQ(name, "FLT_MIN"))
928 if (strEQ(name, "FLT_ROUNDS"))
934 if (strEQ(name, "FLT_DIG"))
940 if (strEQ(name, "FLT_EPSILON"))
946 if (strEQ(name, "FLT_MANT_DIG"))
952 if (strEQ(name, "FLT_MAX_10_EXP"))
953 #ifdef FLT_MAX_10_EXP
954 return FLT_MAX_10_EXP;
958 if (strEQ(name, "FLT_MAX_EXP"))
964 if (strEQ(name, "FLT_MIN_10_EXP"))
965 #ifdef FLT_MIN_10_EXP
966 return FLT_MIN_10_EXP;
970 if (strEQ(name, "FLT_MIN_EXP"))
976 if (strEQ(name, "FLT_RADIX"))
984 if (strnEQ(name, "F_", 2)) {
985 if (strEQ(name, "F_DUPFD"))
991 if (strEQ(name, "F_GETFD"))
997 if (strEQ(name, "F_GETFL"))
1003 if (strEQ(name, "F_GETLK"))
1009 if (strEQ(name, "F_OK"))
1015 if (strEQ(name, "F_RDLCK"))
1021 if (strEQ(name, "F_SETFD"))
1027 if (strEQ(name, "F_SETFL"))
1033 if (strEQ(name, "F_SETLK"))
1039 if (strEQ(name, "F_SETLKW"))
1045 if (strEQ(name, "F_UNLCK"))
1051 if (strEQ(name, "F_WRLCK"))
1059 if (strEQ(name, "FD_CLOEXEC"))
1065 if (strEQ(name, "FILENAME_MAX"))
1067 return FILENAME_MAX;
1073 if (strEQ(name, "HUGE_VAL"))
1079 if (strEQ(name, "HUPCL"))
1087 if (strEQ(name, "INT_MAX"))
1093 if (strEQ(name, "INT_MIN"))
1099 if (strEQ(name, "ICANON"))
1105 if (strEQ(name, "ICRNL"))
1111 if (strEQ(name, "IEXTEN"))
1117 if (strEQ(name, "IGNBRK"))
1123 if (strEQ(name, "IGNCR"))
1129 if (strEQ(name, "IGNPAR"))
1135 if (strEQ(name, "INLCR"))
1141 if (strEQ(name, "INPCK"))
1147 if (strEQ(name, "ISIG"))
1153 if (strEQ(name, "ISTRIP"))
1159 if (strEQ(name, "IXOFF"))
1165 if (strEQ(name, "IXON"))
1173 if (strnEQ(name, "LC_", 3)) {
1174 if (strEQ(name, "LC_ALL"))
1180 if (strEQ(name, "LC_COLLATE"))
1186 if (strEQ(name, "LC_CTYPE"))
1192 if (strEQ(name, "LC_MONETARY"))
1198 if (strEQ(name, "LC_NUMERIC"))
1204 if (strEQ(name, "LC_TIME"))
1212 if (strnEQ(name, "LDBL_", 5)) {
1213 if (strEQ(name, "LDBL_MAX"))
1219 if (strEQ(name, "LDBL_MIN"))
1225 if (strEQ(name, "LDBL_DIG"))
1231 if (strEQ(name, "LDBL_EPSILON"))
1233 return LDBL_EPSILON;
1237 if (strEQ(name, "LDBL_MANT_DIG"))
1238 #ifdef LDBL_MANT_DIG
1239 return LDBL_MANT_DIG;
1243 if (strEQ(name, "LDBL_MAX_10_EXP"))
1244 #ifdef LDBL_MAX_10_EXP
1245 return LDBL_MAX_10_EXP;
1249 if (strEQ(name, "LDBL_MAX_EXP"))
1251 return LDBL_MAX_EXP;
1255 if (strEQ(name, "LDBL_MIN_10_EXP"))
1256 #ifdef LDBL_MIN_10_EXP
1257 return LDBL_MIN_10_EXP;
1261 if (strEQ(name, "LDBL_MIN_EXP"))
1263 return LDBL_MIN_EXP;
1269 if (strnEQ(name, "L_", 2)) {
1270 if (strEQ(name, "L_ctermid"))
1276 if (strEQ(name, "L_cuserid"))
1282 if (strEQ(name, "L_tmpname"))
1290 if (strEQ(name, "LONG_MAX"))
1296 if (strEQ(name, "LONG_MIN"))
1302 if (strEQ(name, "LINK_MAX"))
1310 if (strEQ(name, "MAX_CANON"))
1316 if (strEQ(name, "MAX_INPUT"))
1322 if (strEQ(name, "MB_CUR_MAX"))
1328 if (strEQ(name, "MB_LEN_MAX"))
1336 if (strEQ(name, "NULL")) return 0;
1337 if (strEQ(name, "NAME_MAX"))
1343 if (strEQ(name, "NCCS"))
1349 if (strEQ(name, "NGROUPS_MAX"))
1355 if (strEQ(name, "NOFLSH"))
1363 if (strnEQ(name, "O_", 2)) {
1364 if (strEQ(name, "O_APPEND"))
1370 if (strEQ(name, "O_CREAT"))
1376 if (strEQ(name, "O_TRUNC"))
1382 if (strEQ(name, "O_RDONLY"))
1388 if (strEQ(name, "O_RDWR"))
1394 if (strEQ(name, "O_WRONLY"))
1400 if (strEQ(name, "O_EXCL"))
1406 if (strEQ(name, "O_NOCTTY"))
1412 if (strEQ(name, "O_NONBLOCK"))
1418 if (strEQ(name, "O_ACCMODE"))
1426 if (strEQ(name, "OPEN_MAX"))
1432 if (strEQ(name, "OPOST"))
1440 if (strEQ(name, "PATH_MAX"))
1446 if (strEQ(name, "PARENB"))
1452 if (strEQ(name, "PARMRK"))
1458 if (strEQ(name, "PARODD"))
1464 if (strEQ(name, "PIPE_BUF"))
1472 if (strEQ(name, "RAND_MAX"))
1478 if (strEQ(name, "R_OK"))
1486 if (strnEQ(name, "SIG", 3)) {
1487 if (name[3] == '_') {
1488 if (strEQ(name, "SIG_BLOCK"))
1495 if (strEQ(name, "SIG_DFL")) return (int)SIG_DFL;
1498 if (strEQ(name, "SIG_ERR")) return (int)SIG_ERR;
1501 if (strEQ(name, "SIG_IGN")) return (int)SIG_IGN;
1503 if (strEQ(name, "SIG_SETMASK"))
1509 if (strEQ(name, "SIG_UNBLOCK"))
1517 if (strEQ(name, "SIGABRT"))
1523 if (strEQ(name, "SIGALRM"))
1529 if (strEQ(name, "SIGCHLD"))
1535 if (strEQ(name, "SIGCONT"))
1541 if (strEQ(name, "SIGFPE"))
1547 if (strEQ(name, "SIGHUP"))
1553 if (strEQ(name, "SIGILL"))
1559 if (strEQ(name, "SIGINT"))
1565 if (strEQ(name, "SIGKILL"))
1571 if (strEQ(name, "SIGPIPE"))
1577 if (strEQ(name, "SIGQUIT"))
1583 if (strEQ(name, "SIGSEGV"))
1589 if (strEQ(name, "SIGSTOP"))
1595 if (strEQ(name, "SIGTERM"))
1601 if (strEQ(name, "SIGTSTP"))
1607 if (strEQ(name, "SIGTTIN"))
1613 if (strEQ(name, "SIGTTOU"))
1619 if (strEQ(name, "SIGUSR1"))
1625 if (strEQ(name, "SIGUSR2"))
1633 if (name[1] == '_') {
1634 if (strEQ(name, "S_ISGID"))
1640 if (strEQ(name, "S_ISUID"))
1646 if (strEQ(name, "S_IRGRP"))
1652 if (strEQ(name, "S_IROTH"))
1658 if (strEQ(name, "S_IRUSR"))
1664 if (strEQ(name, "S_IRWXG"))
1670 if (strEQ(name, "S_IRWXO"))
1676 if (strEQ(name, "S_IRWXU"))
1682 if (strEQ(name, "S_IWGRP"))
1688 if (strEQ(name, "S_IWOTH"))
1694 if (strEQ(name, "S_IWUSR"))
1700 if (strEQ(name, "S_IXGRP"))
1706 if (strEQ(name, "S_IXOTH"))
1712 if (strEQ(name, "S_IXUSR"))
1718 errno = EAGAIN; /* the following aren't constants */
1720 if (strEQ(name, "S_ISBLK")) return S_ISBLK(arg);
1723 if (strEQ(name, "S_ISCHR")) return S_ISCHR(arg);
1726 if (strEQ(name, "S_ISDIR")) return S_ISDIR(arg);
1729 if (strEQ(name, "S_ISFIFO")) return S_ISFIFO(arg);
1732 if (strEQ(name, "S_ISREG")) return S_ISREG(arg);
1736 if (strEQ(name, "SEEK_CUR"))
1742 if (strEQ(name, "SEEK_END"))
1748 if (strEQ(name, "SEEK_SET"))
1754 if (strEQ(name, "STREAM_MAX"))
1760 if (strEQ(name, "SHRT_MAX"))
1766 if (strEQ(name, "SHRT_MIN"))
1772 if (strEQ(name, "SA_NOCLDSTOP"))
1774 return SA_NOCLDSTOP;
1778 if (strEQ(name, "SCHAR_MAX"))
1784 if (strEQ(name, "SCHAR_MIN"))
1790 if (strEQ(name, "SSIZE_MAX"))
1796 if (strEQ(name, "STDIN_FILENO"))
1798 return STDIN_FILENO;
1802 if (strEQ(name, "STDOUT_FILENO"))
1803 #ifdef STDOUT_FILENO
1804 return STDOUT_FILENO;
1808 if (strEQ(name, "STRERR_FILENO"))
1809 #ifdef STRERR_FILENO
1810 return STRERR_FILENO;
1816 if (strEQ(name, "TCIFLUSH"))
1822 if (strEQ(name, "TCIOFF"))
1828 if (strEQ(name, "TCIOFLUSH"))
1834 if (strEQ(name, "TCION"))
1840 if (strEQ(name, "TCOFLUSH"))
1846 if (strEQ(name, "TCOOFF"))
1852 if (strEQ(name, "TCOON"))
1858 if (strEQ(name, "TCSADRAIN"))
1864 if (strEQ(name, "TCSAFLUSH"))
1870 if (strEQ(name, "TCSANOW"))
1876 if (strEQ(name, "TMP_MAX"))
1882 if (strEQ(name, "TOSTOP"))
1888 if (strEQ(name, "TZNAME_MAX"))
1896 if (strEQ(name, "UCHAR_MAX"))
1902 if (strEQ(name, "UINT_MAX"))
1908 if (strEQ(name, "ULONG_MAX"))
1914 if (strEQ(name, "USHRT_MAX"))
1922 if (strEQ(name, "VEOF"))
1928 if (strEQ(name, "VEOL"))
1934 if (strEQ(name, "VERASE"))
1940 if (strEQ(name, "VINTR"))
1946 if (strEQ(name, "VKILL"))
1952 if (strEQ(name, "VMIN"))
1958 if (strEQ(name, "VQUIT"))
1964 if (strEQ(name, "VSTART"))
1970 if (strEQ(name, "VSTOP"))
1976 if (strEQ(name, "VSUSP"))
1982 if (strEQ(name, "VTIME"))
1990 if (strEQ(name, "W_OK"))
1996 if (strEQ(name, "WNOHANG"))
2002 if (strEQ(name, "WUNTRACED"))
2008 errno = EAGAIN; /* the following aren't constants */
2010 if (strEQ(name, "WEXITSTATUS")) return WEXITSTATUS(arg);
2013 if (strEQ(name, "WIFEXITED")) return WIFEXITED(arg);
2016 if (strEQ(name, "WIFSIGNALED")) return WIFSIGNALED(arg);
2019 if (strEQ(name, "WIFSTOPPED")) return WIFSTOPPED(arg);
2022 if (strEQ(name, "WSTOPSIG")) return WSTOPSIG(arg);
2025 if (strEQ(name, "WTERMSIG")) return WTERMSIG(arg);
2029 if (strEQ(name, "X_OK"))
2037 if (strnEQ(name, "_PC_", 4)) {
2038 if (strEQ(name, "_PC_CHOWN_RESTRICTED"))
2039 #ifdef _PC_CHOWN_RESTRICTED
2040 return _PC_CHOWN_RESTRICTED;
2044 if (strEQ(name, "_PC_LINK_MAX"))
2046 return _PC_LINK_MAX;
2050 if (strEQ(name, "_PC_MAX_CANON"))
2051 #ifdef _PC_MAX_CANON
2052 return _PC_MAX_CANON;
2056 if (strEQ(name, "_PC_MAX_INPUT"))
2057 #ifdef _PC_MAX_INPUT
2058 return _PC_MAX_INPUT;
2062 if (strEQ(name, "_PC_NAME_MAX"))
2064 return _PC_NAME_MAX;
2068 if (strEQ(name, "_PC_NO_TRUNC"))
2070 return _PC_NO_TRUNC;
2074 if (strEQ(name, "_PC_PATH_MAX"))
2076 return _PC_PATH_MAX;
2080 if (strEQ(name, "_PC_PIPE_BUF"))
2082 return _PC_PIPE_BUF;
2086 if (strEQ(name, "_PC_VDISABLE"))
2088 return _PC_VDISABLE;
2094 if (strnEQ(name, "_POSIX_", 7)) {
2095 if (strEQ(name, "_POSIX_ARG_MAX"))
2096 #ifdef _POSIX_ARG_MAX
2097 return _POSIX_ARG_MAX;
2101 if (strEQ(name, "_POSIX_CHILD_MAX"))
2102 #ifdef _POSIX_CHILD_MAX
2103 return _POSIX_CHILD_MAX;
2107 if (strEQ(name, "_POSIX_CHOWN_RESTRICTED"))
2108 #ifdef _POSIX_CHOWN_RESTRICTED
2109 return _POSIX_CHOWN_RESTRICTED;
2113 if (strEQ(name, "_POSIX_JOB_CONTROL"))
2114 #ifdef _POSIX_JOB_CONTROL
2115 return _POSIX_JOB_CONTROL;
2119 if (strEQ(name, "_POSIX_LINK_MAX"))
2120 #ifdef _POSIX_LINK_MAX
2121 return _POSIX_LINK_MAX;
2125 if (strEQ(name, "_POSIX_MAX_CANON"))
2126 #ifdef _POSIX_MAX_CANON
2127 return _POSIX_MAX_CANON;
2131 if (strEQ(name, "_POSIX_MAX_INPUT"))
2132 #ifdef _POSIX_MAX_INPUT
2133 return _POSIX_MAX_INPUT;
2137 if (strEQ(name, "_POSIX_NAME_MAX"))
2138 #ifdef _POSIX_NAME_MAX
2139 return _POSIX_NAME_MAX;
2143 if (strEQ(name, "_POSIX_NGROUPS_MAX"))
2144 #ifdef _POSIX_NGROUPS_MAX
2145 return _POSIX_NGROUPS_MAX;
2149 if (strEQ(name, "_POSIX_NO_TRUNC"))
2150 #ifdef _POSIX_NO_TRUNC
2151 return _POSIX_NO_TRUNC;
2155 if (strEQ(name, "_POSIX_OPEN_MAX"))
2156 #ifdef _POSIX_OPEN_MAX
2157 return _POSIX_OPEN_MAX;
2161 if (strEQ(name, "_POSIX_PATH_MAX"))
2162 #ifdef _POSIX_PATH_MAX
2163 return _POSIX_PATH_MAX;
2167 if (strEQ(name, "_POSIX_PIPE_BUF"))
2168 #ifdef _POSIX_PIPE_BUF
2169 return _POSIX_PIPE_BUF;
2173 if (strEQ(name, "_POSIX_SAVED_IDS"))
2174 #ifdef _POSIX_SAVED_IDS
2175 return _POSIX_SAVED_IDS;
2179 if (strEQ(name, "_POSIX_SSIZE_MAX"))
2180 #ifdef _POSIX_SSIZE_MAX
2181 return _POSIX_SSIZE_MAX;
2185 if (strEQ(name, "_POSIX_STREAM_MAX"))
2186 #ifdef _POSIX_STREAM_MAX
2187 return _POSIX_STREAM_MAX;
2191 if (strEQ(name, "_POSIX_TZNAME_MAX"))
2192 #ifdef _POSIX_TZNAME_MAX
2193 return _POSIX_TZNAME_MAX;
2197 if (strEQ(name, "_POSIX_VDISABLE"))
2198 #ifdef _POSIX_VDISABLE
2199 return _POSIX_VDISABLE;
2203 if (strEQ(name, "_POSIX_VERSION"))
2204 #ifdef _POSIX_VERSION
2205 return _POSIX_VERSION;
2211 if (strnEQ(name, "_SC_", 4)) {
2212 if (strEQ(name, "_SC_ARG_MAX"))
2218 if (strEQ(name, "_SC_CHILD_MAX"))
2219 #ifdef _SC_CHILD_MAX
2220 return _SC_CHILD_MAX;
2224 if (strEQ(name, "_SC_CLK_TCK"))
2230 if (strEQ(name, "_SC_JOB_CONTROL"))
2231 #ifdef _SC_JOB_CONTROL
2232 return _SC_JOB_CONTROL;
2236 if (strEQ(name, "_SC_NGROUPS_MAX"))
2237 #ifdef _SC_NGROUPS_MAX
2238 return _SC_NGROUPS_MAX;
2242 if (strEQ(name, "_SC_OPEN_MAX"))
2244 return _SC_OPEN_MAX;
2248 if (strEQ(name, "_SC_SAVED_IDS"))
2249 #ifdef _SC_SAVED_IDS
2250 return _SC_SAVED_IDS;
2254 if (strEQ(name, "_SC_STREAM_MAX"))
2255 #ifdef _SC_STREAM_MAX
2256 return _SC_STREAM_MAX;
2260 if (strEQ(name, "_SC_TZNAME_MAX"))
2261 #ifdef _SC_TZNAME_MAX
2262 return _SC_TZNAME_MAX;
2266 if (strEQ(name, "_SC_VERSION"))
2283 MODULE = SigSet PACKAGE = POSIX::SigSet PREFIX = sig
2286 new(packname = "POSIX::SigSet", ...)
2291 RETVAL = (sigset_t*)safemalloc(sizeof(sigset_t));
2292 sigemptyset(RETVAL);
2293 for (i = 1; i < items; i++)
2294 sigaddset(RETVAL, SvIV(ST(i)));
2301 POSIX::SigSet sigset
2303 safefree((char *)sigset);
2306 sigaddset(sigset, sig)
2307 POSIX::SigSet sigset
2311 sigdelset(sigset, sig)
2312 POSIX::SigSet sigset
2317 POSIX::SigSet sigset
2321 POSIX::SigSet sigset
2324 sigismember(sigset, sig)
2325 POSIX::SigSet sigset
2329 MODULE = Termios PACKAGE = POSIX::Termios PREFIX = cf
2332 new(packname = "POSIX::Termios", ...)
2337 RETVAL = (struct termios*)safemalloc(sizeof(struct termios));
2339 not_here("termios");
2346 DESTROY(termios_ref)
2347 POSIX::Termios termios_ref
2350 safefree((char *)termios_ref);
2352 not_here("termios");
2356 getattr(termios_ref, fd = 0)
2357 POSIX::Termios termios_ref
2360 RETVAL = tcgetattr(fd, termios_ref);
2365 setattr(termios_ref, fd = 0, optional_actions = 0)
2366 POSIX::Termios termios_ref
2368 int optional_actions
2370 RETVAL = tcsetattr(fd, optional_actions, termios_ref);
2375 cfgetispeed(termios_ref)
2376 POSIX::Termios termios_ref
2379 cfgetospeed(termios_ref)
2380 POSIX::Termios termios_ref
2383 getiflag(termios_ref)
2384 POSIX::Termios termios_ref
2386 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2387 RETVAL = termios_ref->c_iflag;
2389 not_here("getiflag");
2395 getoflag(termios_ref)
2396 POSIX::Termios termios_ref
2398 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2399 RETVAL = termios_ref->c_oflag;
2401 not_here("getoflag");
2407 getcflag(termios_ref)
2408 POSIX::Termios termios_ref
2410 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2411 RETVAL = termios_ref->c_cflag;
2413 not_here("getcflag");
2419 getlflag(termios_ref)
2420 POSIX::Termios termios_ref
2422 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2423 RETVAL = termios_ref->c_lflag;
2425 not_here("getlflag");
2431 getcc(termios_ref, ccix)
2432 POSIX::Termios termios_ref
2435 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2437 croak("Bad getcc subscript");
2438 RETVAL = termios_ref->c_cc[ccix];
2446 cfsetispeed(termios_ref, speed)
2447 POSIX::Termios termios_ref
2451 cfsetospeed(termios_ref, speed)
2452 POSIX::Termios termios_ref
2456 setiflag(termios_ref, iflag)
2457 POSIX::Termios termios_ref
2460 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2461 termios_ref->c_iflag = iflag;
2463 not_here("setiflag");
2467 setoflag(termios_ref, oflag)
2468 POSIX::Termios termios_ref
2471 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2472 termios_ref->c_oflag = oflag;
2474 not_here("setoflag");
2478 setcflag(termios_ref, cflag)
2479 POSIX::Termios termios_ref
2482 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2483 termios_ref->c_cflag = cflag;
2485 not_here("setcflag");
2489 setlflag(termios_ref, lflag)
2490 POSIX::Termios termios_ref
2493 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2494 termios_ref->c_lflag = lflag;
2496 not_here("setlflag");
2500 setcc(termios_ref, ccix, cc)
2501 POSIX::Termios termios_ref
2505 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2507 croak("Bad setcc subscript");
2508 termios_ref->c_cc[ccix] = cc;
2514 MODULE = POSIX PACKAGE = POSIX
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++)
2575 for (s = charstring; *s && RETVAL; s++)
2587 for (s = charstring; *s && RETVAL; s++)
2599 for (s = charstring; *s && RETVAL; s++)
2611 for (s = charstring; *s && RETVAL; s++)
2623 for (s = charstring; *s && RETVAL; s++)
2635 for (s = charstring; *s && RETVAL; s++)
2642 isxdigit(charstring)
2647 for (s = charstring; *s && RETVAL; s++)
2654 open(filename, flags = O_RDONLY, mode = 0666)
2659 if (flags & (O_APPEND|O_CREAT|O_TRUNC|O_RDWR|O_WRONLY|O_EXCL))
2660 TAINT_PROPER("open");
2661 RETVAL = open(filename, flags, mode);
2669 #ifdef HAS_LOCALECONV
2670 struct lconv *lcbuf;
2672 SET_NUMERIC_LOCAL();
2673 if (lcbuf = localeconv()) {
2675 if (lcbuf->decimal_point && *lcbuf->decimal_point)
2676 hv_store(RETVAL, "decimal_point", 13,
2677 newSVpv(lcbuf->decimal_point, 0), 0);
2678 if (lcbuf->thousands_sep && *lcbuf->thousands_sep)
2679 hv_store(RETVAL, "thousands_sep", 13,
2680 newSVpv(lcbuf->thousands_sep, 0), 0);
2681 if (lcbuf->grouping && *lcbuf->grouping)
2682 hv_store(RETVAL, "grouping", 8,
2683 newSVpv(lcbuf->grouping, 0), 0);
2684 if (lcbuf->int_curr_symbol && *lcbuf->int_curr_symbol)
2685 hv_store(RETVAL, "int_curr_symbol", 15,
2686 newSVpv(lcbuf->int_curr_symbol, 0), 0);
2687 if (lcbuf->currency_symbol && *lcbuf->currency_symbol)
2688 hv_store(RETVAL, "currency_symbol", 15,
2689 newSVpv(lcbuf->currency_symbol, 0), 0);
2690 if (lcbuf->mon_decimal_point && *lcbuf->mon_decimal_point)
2691 hv_store(RETVAL, "mon_decimal_point", 17,
2692 newSVpv(lcbuf->mon_decimal_point, 0), 0);
2693 if (lcbuf->mon_thousands_sep && *lcbuf->mon_thousands_sep)
2694 hv_store(RETVAL, "mon_thousands_sep", 17,
2695 newSVpv(lcbuf->mon_thousands_sep, 0), 0);
2696 if (lcbuf->mon_grouping && *lcbuf->mon_grouping)
2697 hv_store(RETVAL, "mon_grouping", 12,
2698 newSVpv(lcbuf->mon_grouping, 0), 0);
2699 if (lcbuf->positive_sign && *lcbuf->positive_sign)
2700 hv_store(RETVAL, "positive_sign", 13,
2701 newSVpv(lcbuf->positive_sign, 0), 0);
2702 if (lcbuf->negative_sign && *lcbuf->negative_sign)
2703 hv_store(RETVAL, "negative_sign", 13,
2704 newSVpv(lcbuf->negative_sign, 0), 0);
2706 if (lcbuf->int_frac_digits != CHAR_MAX)
2707 hv_store(RETVAL, "int_frac_digits", 15,
2708 newSViv(lcbuf->int_frac_digits), 0);
2709 if (lcbuf->frac_digits != CHAR_MAX)
2710 hv_store(RETVAL, "frac_digits", 11,
2711 newSViv(lcbuf->frac_digits), 0);
2712 if (lcbuf->p_cs_precedes != CHAR_MAX)
2713 hv_store(RETVAL, "p_cs_precedes", 13,
2714 newSViv(lcbuf->p_cs_precedes), 0);
2715 if (lcbuf->p_sep_by_space != CHAR_MAX)
2716 hv_store(RETVAL, "p_sep_by_space", 14,
2717 newSViv(lcbuf->p_sep_by_space), 0);
2718 if (lcbuf->n_cs_precedes != CHAR_MAX)
2719 hv_store(RETVAL, "n_cs_precedes", 13,
2720 newSViv(lcbuf->n_cs_precedes), 0);
2721 if (lcbuf->n_sep_by_space != CHAR_MAX)
2722 hv_store(RETVAL, "n_sep_by_space", 14,
2723 newSViv(lcbuf->n_sep_by_space), 0);
2724 if (lcbuf->p_sign_posn != CHAR_MAX)
2725 hv_store(RETVAL, "p_sign_posn", 11,
2726 newSViv(lcbuf->p_sign_posn), 0);
2727 if (lcbuf->n_sign_posn != CHAR_MAX)
2728 hv_store(RETVAL, "n_sign_posn", 11,
2729 newSViv(lcbuf->n_sign_posn), 0);
2732 localeconv(); /* A stub to call not_here(). */
2738 setlocale(category, locale = 0)
2742 RETVAL = setlocale(category, locale);
2744 #ifdef USE_LOCALE_CTYPE
2745 if (category == LC_CTYPE
2747 || category == LC_ALL
2753 if (category == LC_ALL)
2754 newctype = setlocale(LC_CTYPE, NULL);
2758 perl_new_ctype(newctype);
2760 #endif /* USE_LOCALE_CTYPE */
2761 #ifdef USE_LOCALE_COLLATE
2762 if (category == LC_COLLATE
2764 || category == LC_ALL
2770 if (category == LC_ALL)
2771 newcoll = setlocale(LC_COLLATE, NULL);
2775 perl_new_collate(newcoll);
2777 #endif /* USE_LOCALE_COLLATE */
2778 #ifdef USE_LOCALE_NUMERIC
2779 if (category == LC_NUMERIC
2781 || category == LC_ALL
2787 if (category == LC_ALL)
2788 newnum = setlocale(LC_NUMERIC, NULL);
2792 perl_new_numeric(newnum);
2794 #endif /* USE_LOCALE_NUMERIC */
2834 /* (We already know stack is long enough.) */
2835 PUSHs(sv_2mortal(newSVnv(frexp(x,&expvar))));
2836 PUSHs(sv_2mortal(newSViv(expvar)));
2852 /* (We already know stack is long enough.) */
2853 PUSHs(sv_2mortal(newSVnv(modf(x,&intvar))));
2854 PUSHs(sv_2mortal(newSVnv(intvar)));
2869 sigaction(sig, action, oldaction = 0)
2871 POSIX::SigAction action
2872 POSIX::SigAction oldaction
2875 # This code is really grody because we're trying to make the signal
2876 # interface look beautiful, which is hard.
2879 gv_fetchpv("SIG", TRUE, SVt_PVHV);
2882 struct sigaction act;
2883 struct sigaction oact;
2884 POSIX__SigSet sigset;
2886 SV** sigsvp = hv_fetch(GvHVn(siggv),
2888 strlen(sig_name[sig]),
2891 /* Remember old handler name if desired. */
2893 char *hand = SvPVx(*sigsvp, na);
2894 svp = hv_fetch(oldaction, "HANDLER", 7, TRUE);
2895 sv_setpv(*svp, *hand ? hand : "DEFAULT");
2899 /* Vector new handler through %SIG. (We always use sighandler
2900 for the C signal handler, which reads %SIG to dispatch.) */
2901 svp = hv_fetch(action, "HANDLER", 7, FALSE);
2903 croak("Can't supply an action without a HANDLER");
2904 sv_setpv(*sigsvp, SvPV(*svp, na));
2905 mg_set(*sigsvp); /* handles DEFAULT and IGNORE */
2906 act.sa_handler = sighandler;
2908 /* Set up any desired mask. */
2909 svp = hv_fetch(action, "MASK", 4, FALSE);
2910 if (svp && sv_isa(*svp, "POSIX::SigSet")) {
2912 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2913 sigset = (sigset_t*) tmp;
2914 act.sa_mask = *sigset;
2917 sigemptyset(& act.sa_mask);
2919 /* Set up any desired flags. */
2920 svp = hv_fetch(action, "FLAGS", 5, FALSE);
2921 act.sa_flags = svp ? SvIV(*svp) : 0;
2924 /* Now work around sigaction oddities */
2925 if (action && oldaction)
2926 RETVAL = sigaction(sig, & act, & oact);
2928 RETVAL = sigaction(sig, & act, (struct sigaction *)0);
2930 RETVAL = sigaction(sig, (struct sigaction *)0, & oact);
2935 /* Get back the mask. */
2936 svp = hv_fetch(oldaction, "MASK", 4, TRUE);
2937 if (sv_isa(*svp, "POSIX::SigSet")) {
2939 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2940 sigset = (sigset_t*) tmp;
2943 sigset = (sigset_t*)safemalloc(sizeof(sigset_t));
2944 sv_setptrobj(*svp, sigset, "POSIX::SigSet");
2946 *sigset = oact.sa_mask;
2948 /* Get back the flags. */
2949 svp = hv_fetch(oldaction, "FLAGS", 5, TRUE);
2950 sv_setiv(*svp, oact.sa_flags);
2958 POSIX::SigSet sigset
2961 sigprocmask(how, sigset, oldsigset = 0)
2963 POSIX::SigSet sigset
2964 POSIX::SigSet oldsigset
2967 sigsuspend(signal_mask)
2968 POSIX::SigSet signal_mask
2988 lseek(fd, offset, whence)
3001 if (pipe(fds) != -1) {
3003 PUSHs(sv_2mortal(newSViv(fds[0])));
3004 PUSHs(sv_2mortal(newSViv(fds[1])));
3008 read(fd, buffer, nbytes)
3010 SV *sv_buffer = SvROK(ST(1)) ? SvRV(ST(1)) : ST(1);
3014 char * buffer = sv_grow( sv_buffer, nbytes+1 );
3017 SvCUR(sv_buffer) = RETVAL;
3018 SvPOK_only(sv_buffer);
3019 *SvEND(sv_buffer) = '\0';
3020 SvTAINTED_on(sv_buffer);
3036 tcsetpgrp(fd, pgrp_id)
3045 if (uname(&buf) >= 0) {
3047 PUSHs(sv_2mortal(newSVpv(buf.sysname, 0)));
3048 PUSHs(sv_2mortal(newSVpv(buf.nodename, 0)));
3049 PUSHs(sv_2mortal(newSVpv(buf.release, 0)));
3050 PUSHs(sv_2mortal(newSVpv(buf.version, 0)));
3051 PUSHs(sv_2mortal(newSVpv(buf.machine, 0)));
3054 uname((char *) 0); /* A stub to call not_here(). */
3058 write(fd, buffer, nbytes)
3076 mbstowcs(s, pwcs, n)
3088 wcstombs(s, pwcs, n)
3110 SET_NUMERIC_LOCAL();
3111 num = strtod(str, &unparsed);
3112 PUSHs(sv_2mortal(newSVnv(num)));
3113 if (GIMME == G_ARRAY) {
3116 PUSHs(sv_2mortal(newSViv(strlen(unparsed))));
3122 strtol(str, base = 0)
3129 num = strtol(str, &unparsed, base);
3130 if (num >= IV_MIN && num <= IV_MAX)
3131 PUSHs(sv_2mortal(newSViv((IV)num)));
3133 PUSHs(sv_2mortal(newSVnv((double)num)));
3134 if (GIMME == G_ARRAY) {
3137 PUSHs(sv_2mortal(newSViv(strlen(unparsed))));
3143 strtoul(str, base = 0)
3150 num = strtoul(str, &unparsed, base);
3152 PUSHs(sv_2mortal(newSViv((IV)num)));
3154 PUSHs(sv_2mortal(newSVnv((double)num)));
3155 if (GIMME == G_ARRAY) {
3158 PUSHs(sv_2mortal(newSViv(strlen(unparsed))));
3170 char *p = SvPV(src,srclen);
3172 ST(0) = sv_2mortal(NEWSV(800,srclen));
3173 dstlen = strxfrm(SvPVX(ST(0)), p, (size_t)srclen);
3174 if (dstlen > srclen) {
3176 SvGROW(ST(0), dstlen);
3177 strxfrm(SvPVX(ST(0)), p, (size_t)dstlen);
3180 SvCUR(ST(0)) = dstlen;
3185 mkfifo(filename, mode)
3189 TAINT_PROPER("mkfifo");
3190 RETVAL = mkfifo(filename, mode);
3206 tcflush(fd, queue_selector)
3211 tcsendbreak(fd, duration)
3216 asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3229 init_tm(&mytm); /* XXX workaround - see init_tm() above */
3232 mytm.tm_hour = hour;
3233 mytm.tm_mday = mday;
3235 mytm.tm_year = year;
3236 mytm.tm_wday = wday;
3237 mytm.tm_yday = yday;
3238 mytm.tm_isdst = isdst;
3239 RETVAL = asctime(&mytm);
3256 realtime = times( &tms );
3258 PUSHs( sv_2mortal( newSVnv( realtime ) ) );
3259 PUSHs( sv_2mortal( newSVnv( tms.tms_utime ) ) );
3260 PUSHs( sv_2mortal( newSVnv( tms.tms_stime ) ) );
3261 PUSHs( sv_2mortal( newSVnv( tms.tms_cutime ) ) );
3262 PUSHs( sv_2mortal( newSVnv( tms.tms_cstime ) ) );
3265 difftime(time1, time2)
3270 mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3283 init_tm(&mytm); /* XXX workaround - see init_tm() above */
3286 mytm.tm_hour = hour;
3287 mytm.tm_mday = mday;
3289 mytm.tm_year = year;
3290 mytm.tm_wday = wday;
3291 mytm.tm_yday = yday;
3292 mytm.tm_isdst = isdst;
3293 RETVAL = mktime(&mytm);
3299 strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3315 init_tm(&mytm); /* XXX workaround - see init_tm() above */
3318 mytm.tm_hour = hour;
3319 mytm.tm_mday = mday;
3321 mytm.tm_year = year;
3322 mytm.tm_wday = wday;
3323 mytm.tm_yday = yday;
3324 mytm.tm_isdst = isdst;
3325 len = strftime(tmpbuf, sizeof tmpbuf, fmt, &mytm);
3326 ST(0) = sv_2mortal(newSVpv(tmpbuf, len));
3336 PUSHs(sv_2mortal(newSVpv(tzname[0],strlen(tzname[0]))));
3337 PUSHs(sv_2mortal(newSVpv(tzname[1],strlen(tzname[1]))));
3340 access(filename, mode)
3358 pathconf(filename, name)