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>
44 #if defined(__VMS) && !defined(__POSIX_SOURCE)
45 # include <file.h> /* == fcntl.h for DECC; no fcntl.h for VAXC */
46 # include <libdef.h> /* LIB$_INVARG constant */
47 # include <lib$routines.h> /* prototype for lib$ediv() */
48 # include <starlet.h> /* prototype for sys$gettim() */
50 # undef mkfifo /* #defined in perl.h */
51 # define mkfifo(a,b) (not_here("mkfifo"),-1)
52 # define tzset() not_here("tzset")
54 /* The default VMS emulation of Unix signals isn't very POSIXish */
56 # define sigpending(a) (not_here("sigpending"),0)
58 /* sigset_t is atomic under VMS, so these routines are easy */
59 int sigemptyset(sigset_t *set) {
60 if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
63 int sigfillset(sigset_t *set) {
65 if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
66 for (i = 0; i < NSIG; i++) *set |= (1 << i);
69 int sigaddset(sigset_t *set, int sig) {
70 if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
71 if (sig > NSIG) { SETERRNO(EINVAL,LIB$_INVARG); return -1; }
72 *set |= (1 << (sig - 1));
75 int sigdelset(sigset_t *set, int sig) {
76 if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
77 if (sig > NSIG) { SETERRNO(EINVAL,LIB$_INVARG); return -1; }
78 *set &= ~(1 << (sig - 1));
81 int sigismember(sigset_t *set, int sig) {
82 if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
83 if (sig > NSIG) { SETERRNO(EINVAL,LIB$_INVARG); return -1; }
84 *set & (1 << (sig - 1));
86 /* The tools for sigprocmask() are there, just not the routine itself */
88 # define SIG_UNBLOCK 1
94 # define SIG_SETMASK 3
96 int sigprocmask(int how, sigset_t *set, sigset_t *oset) {
98 set_errno(EFAULT); set_vaxc_errno(SS$_ACCVIO);
103 *oset = sigsetmask(*set);
106 *oset = sigblock(*set);
110 sigsetmask(*oset & ~*set);
113 set_errno(EINVAL); set_vaxc_errno(LIB$_INVARG);
118 # define sigaction sigvec
119 # define sa_flags sv_onstack
120 # define sa_handler sv_handler
121 # define sa_mask sv_mask
122 # define sigsuspend(set) sigpause(*set)
124 /* The POSIX notion of ttyname() is better served by getname() under VMS */
125 static char ttnambuf[64];
126 # define ttyname(fd) (isatty(fd) > 0 ? getname(fd,ttnambuf,0) : NULL)
128 /* The non-POSIX CRTL times() has void return type, so we just get the
129 current time directly */
130 clock_t vms_times(struct tms *bufptr) {
132 /* Get wall time and convert to 10 ms intervals to
133 * produce the return value that the POSIX standard expects */
134 # if defined(__DECC) && defined (__ALPHA)
137 _ckvmssts(sys$gettim(&vmstime));
139 retval = vmstime & 0x7fffffff;
141 /* (Older hw or ccs don't have an atomic 64-bit type, so we
142 * juggle 32-bit ints (and a float) to produce a time_t result
143 * with minimal loss of information.) */
144 long int vmstime[2],remainder,divisor = 100000;
145 _ckvmssts(sys$gettim((unsigned long int *)vmstime));
146 vmstime[1] &= 0x7fff; /* prevent overflow in EDIV */
147 _ckvmssts(lib$ediv(&divisor,vmstime,(long int *)&retval,&remainder));
149 /* Fill in the struct tms using the CRTL routine . . .*/
150 times((tbuffer_t *)bufptr);
151 return (clock_t) retval;
153 # define times(t) vms_times(t)
157 # include <sys/times.h>
159 # include <sys/utsname.h>
161 # include <sys/wait.h>
168 typedef long SysRetLong;
169 typedef sigset_t* POSIX__SigSet;
170 typedef HV* POSIX__SigAction;
172 typedef struct termios* POSIX__Termios;
173 #else /* Define termios types to int, and call not_here for the functions.*/
174 #define POSIX__Termios int
178 #define cfgetispeed(x) not_here("cfgetispeed")
179 #define cfgetospeed(x) not_here("cfgetospeed")
180 #define tcdrain(x) not_here("tcdrain")
181 #define tcflush(x,y) not_here("tcflush")
182 #define tcsendbreak(x,y) not_here("tcsendbreak")
183 #define cfsetispeed(x,y) not_here("cfsetispeed")
184 #define cfsetospeed(x,y) not_here("cfsetospeed")
185 #define ctermid(x) (char *) not_here("ctermid")
186 #define tcflow(x,y) not_here("tcflow")
187 #define tcgetattr(x,y) not_here("tcgetattr")
188 #define tcsetattr(x,y,z) not_here("tcsetattr")
191 /* Possibly needed prototypes */
192 char *cuserid _((char *));
193 double strtod _((const char *, char **));
194 long strtol _((const char *, char **, int));
195 unsigned long strtoul _((const char *, char **, int));
198 #define cuserid(a) (char *) not_here("cuserid")
202 #define difftime(a,b) not_here("difftime")
205 #ifndef HAS_FPATHCONF
206 #define fpathconf(f,n) (SysRetLong) not_here("fpathconf")
209 #define mktime(a) not_here("mktime")
212 #define nice(a) not_here("nice")
215 #define pathconf(f,n) (SysRetLong) not_here("pathconf")
218 #define sysconf(n) (SysRetLong) not_here("sysconf")
221 #define readlink(a,b,c) not_here("readlink")
224 #define setpgid(a,b) not_here("setpgid")
227 #define setsid() not_here("setsid")
230 #define strcoll(s1,s2) not_here("strcoll")
233 #define strtod(s1,s2) not_here("strtod")
236 #define strtol(s1,s2,b) not_here("strtol")
239 #define strtoul(s1,s2,b) not_here("strtoul")
242 #define strxfrm(s1,s2,n) not_here("strxfrm")
244 #ifndef HAS_TCGETPGRP
245 #define tcgetpgrp(a) not_here("tcgetpgrp")
247 #ifndef HAS_TCSETPGRP
248 #define tcsetpgrp(a,b) not_here("tcsetpgrp")
251 #define times(a) not_here("times")
254 #define uname(a) not_here("uname")
257 #define waitpid(a,b,c) not_here("waitpid")
262 #define mblen(a,b) not_here("mblen")
266 #define mbstowcs(s, pwcs, n) not_here("mbstowcs")
269 #define mbtowc(pwc, s, n) not_here("mbtowc")
272 #define wcstombs(s, pwcs, n) not_here("wcstombs")
275 #define wctomb(s, wchar) not_here("wcstombs")
277 #if !defined(HAS_MBLEN) && !defined(HAS_MBSTOWCS) && !defined(HAS_MBTOWC) && !defined(HAS_WCSTOMBS) && !defined(HAS_WCTOMB)
278 /* If we don't have these functions, then we wouldn't have gotten a typedef
279 for wchar_t, the wide character type. Defining wchar_t allows the
280 functions referencing it to compile. Its actual type is then meaningless,
281 since without the above functions, all sections using it end up calling
282 not_here() and croak. --Kaveh Ghazi (ghazi@noc.rutgers.edu) 9/18/94. */
288 #ifndef HAS_LOCALECONV
289 #define localeconv() not_here("localeconv")
293 extern char *tzname[];
295 char *tzname[] = { "" , "" };
298 /* XXX struct tm on some systems (SunOS4/BSD) contains extra (non POSIX)
299 * fields for which we don't have Configure support yet:
300 * char *tm_zone; -- abbreviation of timezone name
301 * long tm_gmtoff; -- offset from GMT in seconds
302 * To workaround core dumps from the uninitialised tm_zone we get the
303 * system to give us a reasonable struct to copy. This fix means that
304 * strftime uses the tm_zone and tm_gmtoff values returned by
305 * localtime(time()). That should give the desired result most of the
306 * time. But probably not always!
308 * This is a temporary workaround to be removed once Configure
309 * support is added and NETaa14816 is considered in full.
310 * It does not address tzname aspects of NETaa14816.
312 #ifdef STRUCT_TM_HASZONE
314 init_tm(ptm) /* see mktime, strftime and asctime */
319 Copy(localtime(&now), ptm, 1, struct tm);
323 # define init_tm(ptm)
327 #ifndef HAS_LONG_DOUBLE /* XXX What to do about long doubles? */
343 croak("POSIX::%s not implemented on this architecture", s);
355 if (strEQ(name, "ARG_MAX"))
363 if (strEQ(name, "BUFSIZ"))
369 if (strEQ(name, "BRKINT"))
375 if (strEQ(name, "B9600"))
381 if (strEQ(name, "B19200"))
387 if (strEQ(name, "B38400"))
393 if (strEQ(name, "B0"))
399 if (strEQ(name, "B110"))
405 if (strEQ(name, "B1200"))
411 if (strEQ(name, "B134"))
417 if (strEQ(name, "B150"))
423 if (strEQ(name, "B1800"))
429 if (strEQ(name, "B200"))
435 if (strEQ(name, "B2400"))
441 if (strEQ(name, "B300"))
447 if (strEQ(name, "B4800"))
453 if (strEQ(name, "B50"))
459 if (strEQ(name, "B600"))
465 if (strEQ(name, "B75"))
473 if (strEQ(name, "CHAR_BIT"))
479 if (strEQ(name, "CHAR_MAX"))
485 if (strEQ(name, "CHAR_MIN"))
491 if (strEQ(name, "CHILD_MAX"))
497 if (strEQ(name, "CLK_TCK"))
503 if (strEQ(name, "CLOCAL"))
509 if (strEQ(name, "CLOCKS_PER_SEC"))
510 #ifdef CLOCKS_PER_SEC
511 return CLOCKS_PER_SEC;
515 if (strEQ(name, "CREAD"))
521 if (strEQ(name, "CS5"))
527 if (strEQ(name, "CS6"))
533 if (strEQ(name, "CS7"))
539 if (strEQ(name, "CS8"))
545 if (strEQ(name, "CSIZE"))
551 if (strEQ(name, "CSTOPB"))
559 if (strEQ(name, "DBL_MAX"))
565 if (strEQ(name, "DBL_MIN"))
571 if (strEQ(name, "DBL_DIG"))
577 if (strEQ(name, "DBL_EPSILON"))
583 if (strEQ(name, "DBL_MANT_DIG"))
589 if (strEQ(name, "DBL_MAX_10_EXP"))
590 #ifdef DBL_MAX_10_EXP
591 return DBL_MAX_10_EXP;
595 if (strEQ(name, "DBL_MAX_EXP"))
601 if (strEQ(name, "DBL_MIN_10_EXP"))
602 #ifdef DBL_MIN_10_EXP
603 return DBL_MIN_10_EXP;
607 if (strEQ(name, "DBL_MIN_EXP"))
617 if (strEQ(name, "EACCES"))
623 if (strEQ(name, "EAGAIN"))
631 if (strEQ(name, "EBADF"))
637 if (strEQ(name, "EBUSY"))
645 if (strEQ(name, "ECHILD"))
651 if (strEQ(name, "ECHO"))
657 if (strEQ(name, "ECHOE"))
663 if (strEQ(name, "ECHOK"))
669 if (strEQ(name, "ECHONL"))
677 if (strEQ(name, "EDEADLK"))
683 if (strEQ(name, "EDOM"))
691 if (strEQ(name, "EEXIST"))
699 if (strEQ(name, "EFAULT"))
705 if (strEQ(name, "EFBIG"))
713 if (strEQ(name, "EINTR"))
719 if (strEQ(name, "EINVAL"))
725 if (strEQ(name, "EIO"))
731 if (strEQ(name, "EISDIR"))
739 if (strEQ(name, "EMFILE"))
745 if (strEQ(name, "EMLINK"))
753 if (strEQ(name, "ENOMEM"))
759 if (strEQ(name, "ENOSPC"))
765 if (strEQ(name, "ENOEXEC"))
771 if (strEQ(name, "ENOTTY"))
777 if (strEQ(name, "ENOTDIR"))
783 if (strEQ(name, "ENOTEMPTY"))
789 if (strEQ(name, "ENFILE"))
795 if (strEQ(name, "ENODEV"))
801 if (strEQ(name, "ENOENT"))
807 if (strEQ(name, "ENOLCK"))
813 if (strEQ(name, "ENOSYS"))
819 if (strEQ(name, "ENXIO"))
825 if (strEQ(name, "ENAMETOOLONG"))
833 if (strEQ(name, "EOF"))
841 if (strEQ(name, "EPERM"))
847 if (strEQ(name, "EPIPE"))
855 if (strEQ(name, "ERANGE"))
861 if (strEQ(name, "EROFS"))
869 if (strEQ(name, "ESPIPE"))
875 if (strEQ(name, "ESRCH"))
883 if (strEQ(name, "EXIT_FAILURE"))
889 if (strEQ(name, "EXIT_SUCCESS"))
895 if (strEQ(name, "EXDEV"))
903 if (strEQ(name, "E2BIG"))
911 if (strnEQ(name, "FLT_", 4)) {
912 if (strEQ(name, "FLT_MAX"))
918 if (strEQ(name, "FLT_MIN"))
924 if (strEQ(name, "FLT_ROUNDS"))
930 if (strEQ(name, "FLT_DIG"))
936 if (strEQ(name, "FLT_EPSILON"))
942 if (strEQ(name, "FLT_MANT_DIG"))
948 if (strEQ(name, "FLT_MAX_10_EXP"))
949 #ifdef FLT_MAX_10_EXP
950 return FLT_MAX_10_EXP;
954 if (strEQ(name, "FLT_MAX_EXP"))
960 if (strEQ(name, "FLT_MIN_10_EXP"))
961 #ifdef FLT_MIN_10_EXP
962 return FLT_MIN_10_EXP;
966 if (strEQ(name, "FLT_MIN_EXP"))
972 if (strEQ(name, "FLT_RADIX"))
980 if (strnEQ(name, "F_", 2)) {
981 if (strEQ(name, "F_DUPFD"))
987 if (strEQ(name, "F_GETFD"))
993 if (strEQ(name, "F_GETFL"))
999 if (strEQ(name, "F_GETLK"))
1005 if (strEQ(name, "F_OK"))
1011 if (strEQ(name, "F_RDLCK"))
1017 if (strEQ(name, "F_SETFD"))
1023 if (strEQ(name, "F_SETFL"))
1029 if (strEQ(name, "F_SETLK"))
1035 if (strEQ(name, "F_SETLKW"))
1041 if (strEQ(name, "F_UNLCK"))
1047 if (strEQ(name, "F_WRLCK"))
1055 if (strEQ(name, "FD_CLOEXEC"))
1061 if (strEQ(name, "FILENAME_MAX"))
1063 return FILENAME_MAX;
1069 if (strEQ(name, "HUGE_VAL"))
1075 if (strEQ(name, "HUPCL"))
1083 if (strEQ(name, "INT_MAX"))
1089 if (strEQ(name, "INT_MIN"))
1095 if (strEQ(name, "ICANON"))
1101 if (strEQ(name, "ICRNL"))
1107 if (strEQ(name, "IEXTEN"))
1113 if (strEQ(name, "IGNBRK"))
1119 if (strEQ(name, "IGNCR"))
1125 if (strEQ(name, "IGNPAR"))
1131 if (strEQ(name, "INLCR"))
1137 if (strEQ(name, "INPCK"))
1143 if (strEQ(name, "ISIG"))
1149 if (strEQ(name, "ISTRIP"))
1155 if (strEQ(name, "IXOFF"))
1161 if (strEQ(name, "IXON"))
1169 if (strnEQ(name, "LC_", 3)) {
1170 if (strEQ(name, "LC_ALL"))
1176 if (strEQ(name, "LC_COLLATE"))
1182 if (strEQ(name, "LC_CTYPE"))
1188 if (strEQ(name, "LC_MONETARY"))
1194 if (strEQ(name, "LC_NUMERIC"))
1200 if (strEQ(name, "LC_TIME"))
1208 if (strnEQ(name, "LDBL_", 5)) {
1209 if (strEQ(name, "LDBL_MAX"))
1215 if (strEQ(name, "LDBL_MIN"))
1221 if (strEQ(name, "LDBL_DIG"))
1227 if (strEQ(name, "LDBL_EPSILON"))
1229 return LDBL_EPSILON;
1233 if (strEQ(name, "LDBL_MANT_DIG"))
1234 #ifdef LDBL_MANT_DIG
1235 return LDBL_MANT_DIG;
1239 if (strEQ(name, "LDBL_MAX_10_EXP"))
1240 #ifdef LDBL_MAX_10_EXP
1241 return LDBL_MAX_10_EXP;
1245 if (strEQ(name, "LDBL_MAX_EXP"))
1247 return LDBL_MAX_EXP;
1251 if (strEQ(name, "LDBL_MIN_10_EXP"))
1252 #ifdef LDBL_MIN_10_EXP
1253 return LDBL_MIN_10_EXP;
1257 if (strEQ(name, "LDBL_MIN_EXP"))
1259 return LDBL_MIN_EXP;
1265 if (strnEQ(name, "L_", 2)) {
1266 if (strEQ(name, "L_ctermid"))
1272 if (strEQ(name, "L_cuserid"))
1278 if (strEQ(name, "L_tmpname"))
1286 if (strEQ(name, "LONG_MAX"))
1292 if (strEQ(name, "LONG_MIN"))
1298 if (strEQ(name, "LINK_MAX"))
1306 if (strEQ(name, "MAX_CANON"))
1312 if (strEQ(name, "MAX_INPUT"))
1318 if (strEQ(name, "MB_CUR_MAX"))
1324 if (strEQ(name, "MB_LEN_MAX"))
1332 if (strEQ(name, "NULL")) return 0;
1333 if (strEQ(name, "NAME_MAX"))
1339 if (strEQ(name, "NCCS"))
1345 if (strEQ(name, "NGROUPS_MAX"))
1351 if (strEQ(name, "NOFLSH"))
1359 if (strnEQ(name, "O_", 2)) {
1360 if (strEQ(name, "O_APPEND"))
1366 if (strEQ(name, "O_CREAT"))
1372 if (strEQ(name, "O_TRUNC"))
1378 if (strEQ(name, "O_RDONLY"))
1384 if (strEQ(name, "O_RDWR"))
1390 if (strEQ(name, "O_WRONLY"))
1396 if (strEQ(name, "O_EXCL"))
1402 if (strEQ(name, "O_NOCTTY"))
1408 if (strEQ(name, "O_NONBLOCK"))
1414 if (strEQ(name, "O_ACCMODE"))
1422 if (strEQ(name, "OPEN_MAX"))
1428 if (strEQ(name, "OPOST"))
1436 if (strEQ(name, "PATH_MAX"))
1442 if (strEQ(name, "PARENB"))
1448 if (strEQ(name, "PARMRK"))
1454 if (strEQ(name, "PARODD"))
1460 if (strEQ(name, "PIPE_BUF"))
1468 if (strEQ(name, "RAND_MAX"))
1474 if (strEQ(name, "R_OK"))
1482 if (strnEQ(name, "SIG", 3)) {
1483 if (name[3] == '_') {
1484 if (strEQ(name, "SIG_BLOCK"))
1491 if (strEQ(name, "SIG_DFL")) return (int)SIG_DFL;
1494 if (strEQ(name, "SIG_ERR")) return (int)SIG_ERR;
1497 if (strEQ(name, "SIG_IGN")) return (int)SIG_IGN;
1499 if (strEQ(name, "SIG_SETMASK"))
1505 if (strEQ(name, "SIG_UNBLOCK"))
1513 if (strEQ(name, "SIGABRT"))
1519 if (strEQ(name, "SIGALRM"))
1525 if (strEQ(name, "SIGCHLD"))
1531 if (strEQ(name, "SIGCONT"))
1537 if (strEQ(name, "SIGFPE"))
1543 if (strEQ(name, "SIGHUP"))
1549 if (strEQ(name, "SIGILL"))
1555 if (strEQ(name, "SIGINT"))
1561 if (strEQ(name, "SIGKILL"))
1567 if (strEQ(name, "SIGPIPE"))
1573 if (strEQ(name, "SIGQUIT"))
1579 if (strEQ(name, "SIGSEGV"))
1585 if (strEQ(name, "SIGSTOP"))
1591 if (strEQ(name, "SIGTERM"))
1597 if (strEQ(name, "SIGTSTP"))
1603 if (strEQ(name, "SIGTTIN"))
1609 if (strEQ(name, "SIGTTOU"))
1615 if (strEQ(name, "SIGUSR1"))
1621 if (strEQ(name, "SIGUSR2"))
1629 if (name[1] == '_') {
1630 if (strEQ(name, "S_ISGID"))
1636 if (strEQ(name, "S_ISUID"))
1642 if (strEQ(name, "S_IRGRP"))
1648 if (strEQ(name, "S_IROTH"))
1654 if (strEQ(name, "S_IRUSR"))
1660 if (strEQ(name, "S_IRWXG"))
1666 if (strEQ(name, "S_IRWXO"))
1672 if (strEQ(name, "S_IRWXU"))
1678 if (strEQ(name, "S_IWGRP"))
1684 if (strEQ(name, "S_IWOTH"))
1690 if (strEQ(name, "S_IWUSR"))
1696 if (strEQ(name, "S_IXGRP"))
1702 if (strEQ(name, "S_IXOTH"))
1708 if (strEQ(name, "S_IXUSR"))
1714 errno = EAGAIN; /* the following aren't constants */
1716 if (strEQ(name, "S_ISBLK")) return S_ISBLK(arg);
1719 if (strEQ(name, "S_ISCHR")) return S_ISCHR(arg);
1722 if (strEQ(name, "S_ISDIR")) return S_ISDIR(arg);
1725 if (strEQ(name, "S_ISFIFO")) return S_ISFIFO(arg);
1728 if (strEQ(name, "S_ISREG")) return S_ISREG(arg);
1732 if (strEQ(name, "SEEK_CUR"))
1738 if (strEQ(name, "SEEK_END"))
1744 if (strEQ(name, "SEEK_SET"))
1750 if (strEQ(name, "STREAM_MAX"))
1756 if (strEQ(name, "SHRT_MAX"))
1762 if (strEQ(name, "SHRT_MIN"))
1768 if (strEQ(name, "SA_NOCLDSTOP"))
1770 return SA_NOCLDSTOP;
1774 if (strEQ(name, "SCHAR_MAX"))
1780 if (strEQ(name, "SCHAR_MIN"))
1786 if (strEQ(name, "SSIZE_MAX"))
1792 if (strEQ(name, "STDIN_FILENO"))
1794 return STDIN_FILENO;
1798 if (strEQ(name, "STDOUT_FILENO"))
1799 #ifdef STDOUT_FILENO
1800 return STDOUT_FILENO;
1804 if (strEQ(name, "STRERR_FILENO"))
1805 #ifdef STRERR_FILENO
1806 return STRERR_FILENO;
1812 if (strEQ(name, "TCIFLUSH"))
1818 if (strEQ(name, "TCIOFF"))
1824 if (strEQ(name, "TCIOFLUSH"))
1830 if (strEQ(name, "TCION"))
1836 if (strEQ(name, "TCOFLUSH"))
1842 if (strEQ(name, "TCOOFF"))
1848 if (strEQ(name, "TCOON"))
1854 if (strEQ(name, "TCSADRAIN"))
1860 if (strEQ(name, "TCSAFLUSH"))
1866 if (strEQ(name, "TCSANOW"))
1872 if (strEQ(name, "TMP_MAX"))
1878 if (strEQ(name, "TOSTOP"))
1884 if (strEQ(name, "TZNAME_MAX"))
1892 if (strEQ(name, "UCHAR_MAX"))
1898 if (strEQ(name, "UINT_MAX"))
1904 if (strEQ(name, "ULONG_MAX"))
1910 if (strEQ(name, "USHRT_MAX"))
1918 if (strEQ(name, "VEOF"))
1924 if (strEQ(name, "VEOL"))
1930 if (strEQ(name, "VERASE"))
1936 if (strEQ(name, "VINTR"))
1942 if (strEQ(name, "VKILL"))
1948 if (strEQ(name, "VMIN"))
1954 if (strEQ(name, "VQUIT"))
1960 if (strEQ(name, "VSTART"))
1966 if (strEQ(name, "VSTOP"))
1972 if (strEQ(name, "VSUSP"))
1978 if (strEQ(name, "VTIME"))
1986 if (strEQ(name, "W_OK"))
1992 if (strEQ(name, "WNOHANG"))
1998 if (strEQ(name, "WUNTRACED"))
2004 errno = EAGAIN; /* the following aren't constants */
2006 if (strEQ(name, "WEXITSTATUS")) return WEXITSTATUS(arg);
2009 if (strEQ(name, "WIFEXITED")) return WIFEXITED(arg);
2012 if (strEQ(name, "WIFSIGNALED")) return WIFSIGNALED(arg);
2015 if (strEQ(name, "WIFSTOPPED")) return WIFSTOPPED(arg);
2018 if (strEQ(name, "WSTOPSIG")) return WSTOPSIG(arg);
2021 if (strEQ(name, "WTERMSIG")) return WTERMSIG(arg);
2025 if (strEQ(name, "X_OK"))
2033 if (strnEQ(name, "_PC_", 4)) {
2034 if (strEQ(name, "_PC_CHOWN_RESTRICTED"))
2035 #ifdef _PC_CHOWN_RESTRICTED
2036 return _PC_CHOWN_RESTRICTED;
2040 if (strEQ(name, "_PC_LINK_MAX"))
2042 return _PC_LINK_MAX;
2046 if (strEQ(name, "_PC_MAX_CANON"))
2047 #ifdef _PC_MAX_CANON
2048 return _PC_MAX_CANON;
2052 if (strEQ(name, "_PC_MAX_INPUT"))
2053 #ifdef _PC_MAX_INPUT
2054 return _PC_MAX_INPUT;
2058 if (strEQ(name, "_PC_NAME_MAX"))
2060 return _PC_NAME_MAX;
2064 if (strEQ(name, "_PC_NO_TRUNC"))
2066 return _PC_NO_TRUNC;
2070 if (strEQ(name, "_PC_PATH_MAX"))
2072 return _PC_PATH_MAX;
2076 if (strEQ(name, "_PC_PIPE_BUF"))
2078 return _PC_PIPE_BUF;
2082 if (strEQ(name, "_PC_VDISABLE"))
2084 return _PC_VDISABLE;
2090 if (strnEQ(name, "_POSIX_", 7)) {
2091 if (strEQ(name, "_POSIX_ARG_MAX"))
2092 #ifdef _POSIX_ARG_MAX
2093 return _POSIX_ARG_MAX;
2097 if (strEQ(name, "_POSIX_CHILD_MAX"))
2098 #ifdef _POSIX_CHILD_MAX
2099 return _POSIX_CHILD_MAX;
2103 if (strEQ(name, "_POSIX_CHOWN_RESTRICTED"))
2104 #ifdef _POSIX_CHOWN_RESTRICTED
2105 return _POSIX_CHOWN_RESTRICTED;
2109 if (strEQ(name, "_POSIX_JOB_CONTROL"))
2110 #ifdef _POSIX_JOB_CONTROL
2111 return _POSIX_JOB_CONTROL;
2115 if (strEQ(name, "_POSIX_LINK_MAX"))
2116 #ifdef _POSIX_LINK_MAX
2117 return _POSIX_LINK_MAX;
2121 if (strEQ(name, "_POSIX_MAX_CANON"))
2122 #ifdef _POSIX_MAX_CANON
2123 return _POSIX_MAX_CANON;
2127 if (strEQ(name, "_POSIX_MAX_INPUT"))
2128 #ifdef _POSIX_MAX_INPUT
2129 return _POSIX_MAX_INPUT;
2133 if (strEQ(name, "_POSIX_NAME_MAX"))
2134 #ifdef _POSIX_NAME_MAX
2135 return _POSIX_NAME_MAX;
2139 if (strEQ(name, "_POSIX_NGROUPS_MAX"))
2140 #ifdef _POSIX_NGROUPS_MAX
2141 return _POSIX_NGROUPS_MAX;
2145 if (strEQ(name, "_POSIX_NO_TRUNC"))
2146 #ifdef _POSIX_NO_TRUNC
2147 return _POSIX_NO_TRUNC;
2151 if (strEQ(name, "_POSIX_OPEN_MAX"))
2152 #ifdef _POSIX_OPEN_MAX
2153 return _POSIX_OPEN_MAX;
2157 if (strEQ(name, "_POSIX_PATH_MAX"))
2158 #ifdef _POSIX_PATH_MAX
2159 return _POSIX_PATH_MAX;
2163 if (strEQ(name, "_POSIX_PIPE_BUF"))
2164 #ifdef _POSIX_PIPE_BUF
2165 return _POSIX_PIPE_BUF;
2169 if (strEQ(name, "_POSIX_SAVED_IDS"))
2170 #ifdef _POSIX_SAVED_IDS
2171 return _POSIX_SAVED_IDS;
2175 if (strEQ(name, "_POSIX_SSIZE_MAX"))
2176 #ifdef _POSIX_SSIZE_MAX
2177 return _POSIX_SSIZE_MAX;
2181 if (strEQ(name, "_POSIX_STREAM_MAX"))
2182 #ifdef _POSIX_STREAM_MAX
2183 return _POSIX_STREAM_MAX;
2187 if (strEQ(name, "_POSIX_TZNAME_MAX"))
2188 #ifdef _POSIX_TZNAME_MAX
2189 return _POSIX_TZNAME_MAX;
2193 if (strEQ(name, "_POSIX_VDISABLE"))
2194 #ifdef _POSIX_VDISABLE
2195 return _POSIX_VDISABLE;
2199 if (strEQ(name, "_POSIX_VERSION"))
2200 #ifdef _POSIX_VERSION
2201 return _POSIX_VERSION;
2207 if (strnEQ(name, "_SC_", 4)) {
2208 if (strEQ(name, "_SC_ARG_MAX"))
2214 if (strEQ(name, "_SC_CHILD_MAX"))
2215 #ifdef _SC_CHILD_MAX
2216 return _SC_CHILD_MAX;
2220 if (strEQ(name, "_SC_CLK_TCK"))
2226 if (strEQ(name, "_SC_JOB_CONTROL"))
2227 #ifdef _SC_JOB_CONTROL
2228 return _SC_JOB_CONTROL;
2232 if (strEQ(name, "_SC_NGROUPS_MAX"))
2233 #ifdef _SC_NGROUPS_MAX
2234 return _SC_NGROUPS_MAX;
2238 if (strEQ(name, "_SC_OPEN_MAX"))
2240 return _SC_OPEN_MAX;
2244 if (strEQ(name, "_SC_SAVED_IDS"))
2245 #ifdef _SC_SAVED_IDS
2246 return _SC_SAVED_IDS;
2250 if (strEQ(name, "_SC_STREAM_MAX"))
2251 #ifdef _SC_STREAM_MAX
2252 return _SC_STREAM_MAX;
2256 if (strEQ(name, "_SC_TZNAME_MAX"))
2257 #ifdef _SC_TZNAME_MAX
2258 return _SC_TZNAME_MAX;
2262 if (strEQ(name, "_SC_VERSION"))
2279 MODULE = SigSet PACKAGE = POSIX::SigSet PREFIX = sig
2282 new(packname = "POSIX::SigSet", ...)
2287 RETVAL = (sigset_t*)safemalloc(sizeof(sigset_t));
2288 sigemptyset(RETVAL);
2289 for (i = 1; i < items; i++)
2290 sigaddset(RETVAL, SvIV(ST(i)));
2297 POSIX::SigSet sigset
2299 safefree((char *)sigset);
2302 sigaddset(sigset, sig)
2303 POSIX::SigSet sigset
2307 sigdelset(sigset, sig)
2308 POSIX::SigSet sigset
2313 POSIX::SigSet sigset
2317 POSIX::SigSet sigset
2320 sigismember(sigset, sig)
2321 POSIX::SigSet sigset
2325 MODULE = Termios PACKAGE = POSIX::Termios PREFIX = cf
2328 new(packname = "POSIX::Termios", ...)
2333 RETVAL = (struct termios*)safemalloc(sizeof(struct termios));
2335 not_here("termios");
2342 DESTROY(termios_ref)
2343 POSIX::Termios termios_ref
2346 safefree((char *)termios_ref);
2348 not_here("termios");
2352 getattr(termios_ref, fd = 0)
2353 POSIX::Termios termios_ref
2356 RETVAL = tcgetattr(fd, termios_ref);
2361 setattr(termios_ref, fd = 0, optional_actions = 0)
2362 POSIX::Termios termios_ref
2364 int optional_actions
2366 RETVAL = tcsetattr(fd, optional_actions, termios_ref);
2371 cfgetispeed(termios_ref)
2372 POSIX::Termios termios_ref
2375 cfgetospeed(termios_ref)
2376 POSIX::Termios termios_ref
2379 getiflag(termios_ref)
2380 POSIX::Termios termios_ref
2382 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2383 RETVAL = termios_ref->c_iflag;
2385 not_here("getiflag");
2391 getoflag(termios_ref)
2392 POSIX::Termios termios_ref
2394 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2395 RETVAL = termios_ref->c_oflag;
2397 not_here("getoflag");
2403 getcflag(termios_ref)
2404 POSIX::Termios termios_ref
2406 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2407 RETVAL = termios_ref->c_cflag;
2409 not_here("getcflag");
2415 getlflag(termios_ref)
2416 POSIX::Termios termios_ref
2418 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2419 RETVAL = termios_ref->c_lflag;
2421 not_here("getlflag");
2427 getcc(termios_ref, ccix)
2428 POSIX::Termios termios_ref
2431 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2433 croak("Bad getcc subscript");
2434 RETVAL = termios_ref->c_cc[ccix];
2442 cfsetispeed(termios_ref, speed)
2443 POSIX::Termios termios_ref
2447 cfsetospeed(termios_ref, speed)
2448 POSIX::Termios termios_ref
2452 setiflag(termios_ref, iflag)
2453 POSIX::Termios termios_ref
2456 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2457 termios_ref->c_iflag = iflag;
2459 not_here("setiflag");
2463 setoflag(termios_ref, oflag)
2464 POSIX::Termios termios_ref
2467 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2468 termios_ref->c_oflag = oflag;
2470 not_here("setoflag");
2474 setcflag(termios_ref, cflag)
2475 POSIX::Termios termios_ref
2478 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2479 termios_ref->c_cflag = cflag;
2481 not_here("setcflag");
2485 setlflag(termios_ref, lflag)
2486 POSIX::Termios termios_ref
2489 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2490 termios_ref->c_lflag = lflag;
2492 not_here("setlflag");
2496 setcc(termios_ref, ccix, cc)
2497 POSIX::Termios termios_ref
2501 #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
2503 croak("Bad setcc subscript");
2504 termios_ref->c_cc[ccix] = cc;
2510 MODULE = POSIX PACKAGE = POSIX
2523 for (s = charstring; *s && RETVAL; s++)
2535 for (s = charstring; *s && RETVAL; s++)
2547 for (s = charstring; *s && RETVAL; s++)
2559 for (s = charstring; *s && RETVAL; s++)
2571 for (s = charstring; *s && RETVAL; s++)
2583 for (s = charstring; *s && RETVAL; s++)
2595 for (s = charstring; *s && RETVAL; s++)
2607 for (s = charstring; *s && RETVAL; s++)
2619 for (s = charstring; *s && RETVAL; s++)
2631 for (s = charstring; *s && RETVAL; s++)
2638 isxdigit(charstring)
2643 for (s = charstring; *s && RETVAL; s++)
2650 open(filename, flags = O_RDONLY, mode = 0666)
2655 if (flags & (O_APPEND|O_CREAT|O_TRUNC|O_RDWR|O_WRONLY|O_EXCL))
2656 TAINT_PROPER("open");
2657 RETVAL = open(filename, flags, mode);
2665 #ifdef HAS_LOCALECONV
2666 struct lconv *lcbuf;
2668 if (lcbuf = localeconv()) {
2670 if (lcbuf->decimal_point && *lcbuf->decimal_point)
2671 hv_store(RETVAL, "decimal_point", 13,
2672 newSVpv(lcbuf->decimal_point, 0), 0);
2673 if (lcbuf->thousands_sep && *lcbuf->thousands_sep)
2674 hv_store(RETVAL, "thousands_sep", 13,
2675 newSVpv(lcbuf->thousands_sep, 0), 0);
2676 if (lcbuf->grouping && *lcbuf->grouping)
2677 hv_store(RETVAL, "grouping", 8,
2678 newSVpv(lcbuf->grouping, 0), 0);
2679 if (lcbuf->int_curr_symbol && *lcbuf->int_curr_symbol)
2680 hv_store(RETVAL, "int_curr_symbol", 15,
2681 newSVpv(lcbuf->int_curr_symbol, 0), 0);
2682 if (lcbuf->currency_symbol && *lcbuf->currency_symbol)
2683 hv_store(RETVAL, "currency_symbol", 15,
2684 newSVpv(lcbuf->currency_symbol, 0), 0);
2685 if (lcbuf->mon_decimal_point && *lcbuf->mon_decimal_point)
2686 hv_store(RETVAL, "mon_decimal_point", 17,
2687 newSVpv(lcbuf->mon_decimal_point, 0), 0);
2688 if (lcbuf->mon_thousands_sep && *lcbuf->mon_thousands_sep)
2689 hv_store(RETVAL, "mon_thousands_sep", 17,
2690 newSVpv(lcbuf->mon_thousands_sep, 0), 0);
2691 if (lcbuf->mon_grouping && *lcbuf->mon_grouping)
2692 hv_store(RETVAL, "mon_grouping", 12,
2693 newSVpv(lcbuf->mon_grouping, 0), 0);
2694 if (lcbuf->positive_sign && *lcbuf->positive_sign)
2695 hv_store(RETVAL, "positive_sign", 13,
2696 newSVpv(lcbuf->positive_sign, 0), 0);
2697 if (lcbuf->negative_sign && *lcbuf->negative_sign)
2698 hv_store(RETVAL, "negative_sign", 13,
2699 newSVpv(lcbuf->negative_sign, 0), 0);
2701 if (lcbuf->int_frac_digits != CHAR_MAX)
2702 hv_store(RETVAL, "int_frac_digits", 15,
2703 newSViv(lcbuf->int_frac_digits), 0);
2704 if (lcbuf->frac_digits != CHAR_MAX)
2705 hv_store(RETVAL, "frac_digits", 11,
2706 newSViv(lcbuf->frac_digits), 0);
2707 if (lcbuf->p_cs_precedes != CHAR_MAX)
2708 hv_store(RETVAL, "p_cs_precedes", 13,
2709 newSViv(lcbuf->p_cs_precedes), 0);
2710 if (lcbuf->p_sep_by_space != CHAR_MAX)
2711 hv_store(RETVAL, "p_sep_by_space", 14,
2712 newSViv(lcbuf->p_sep_by_space), 0);
2713 if (lcbuf->n_cs_precedes != CHAR_MAX)
2714 hv_store(RETVAL, "n_cs_precedes", 13,
2715 newSViv(lcbuf->n_cs_precedes), 0);
2716 if (lcbuf->n_sep_by_space != CHAR_MAX)
2717 hv_store(RETVAL, "n_sep_by_space", 14,
2718 newSViv(lcbuf->n_sep_by_space), 0);
2719 if (lcbuf->p_sign_posn != CHAR_MAX)
2720 hv_store(RETVAL, "p_sign_posn", 11,
2721 newSViv(lcbuf->p_sign_posn), 0);
2722 if (lcbuf->n_sign_posn != CHAR_MAX)
2723 hv_store(RETVAL, "n_sign_posn", 11,
2724 newSViv(lcbuf->n_sign_posn), 0);
2727 localeconv(); /* A stub to call not_here(). */
2733 setlocale(category, locale = 0)
2737 RETVAL = setlocale(category, locale);
2739 #ifdef USE_LOCALE_CTYPE
2740 if (category == LC_CTYPE
2742 || category == LC_ALL
2748 if (category == LC_ALL)
2749 newctype = setlocale(LC_CTYPE, NULL);
2753 perl_new_ctype(newctype);
2755 #endif /* USE_LOCALE_CTYPE */
2756 #ifdef USE_LOCALE_COLLATE
2757 if (category == LC_COLLATE
2759 || category == LC_ALL
2765 if (category == LC_ALL)
2766 newcoll = setlocale(LC_COLLATE, NULL);
2770 perl_new_collate(newcoll);
2772 #endif /* USE_LOCALE_COLLATE */
2773 #ifdef USE_LOCALE_NUMERIC
2774 if (category == LC_NUMERIC
2776 || category == LC_ALL
2782 if (category == LC_ALL)
2783 newnum = setlocale(LC_NUMERIC, NULL);
2787 perl_new_numeric(newnum);
2789 #endif /* USE_LOCALE_NUMERIC */
2829 /* (We already know stack is long enough.) */
2830 PUSHs(sv_2mortal(newSVnv(frexp(x,&expvar))));
2831 PUSHs(sv_2mortal(newSViv(expvar)));
2847 /* (We already know stack is long enough.) */
2848 PUSHs(sv_2mortal(newSVnv(modf(x,&intvar))));
2849 PUSHs(sv_2mortal(newSVnv(intvar)));
2864 sigaction(sig, action, oldaction = 0)
2866 POSIX::SigAction action
2867 POSIX::SigAction oldaction
2870 # This code is really grody because we're trying to make the signal
2871 # interface look beautiful, which is hard.
2874 gv_fetchpv("SIG", TRUE, SVt_PVHV);
2877 struct sigaction act;
2878 struct sigaction oact;
2879 POSIX__SigSet sigset;
2881 SV** sigsvp = hv_fetch(GvHVn(siggv),
2883 strlen(sig_name[sig]),
2886 /* Remember old handler name if desired. */
2888 char *hand = SvPVx(*sigsvp, na);
2889 svp = hv_fetch(oldaction, "HANDLER", 7, TRUE);
2890 sv_setpv(*svp, *hand ? hand : "DEFAULT");
2894 /* Vector new handler through %SIG. (We always use sighandler
2895 for the C signal handler, which reads %SIG to dispatch.) */
2896 svp = hv_fetch(action, "HANDLER", 7, FALSE);
2898 croak("Can't supply an action without a HANDLER");
2899 sv_setpv(*sigsvp, SvPV(*svp, na));
2900 mg_set(*sigsvp); /* handles DEFAULT and IGNORE */
2901 act.sa_handler = sighandler;
2903 /* Set up any desired mask. */
2904 svp = hv_fetch(action, "MASK", 4, FALSE);
2905 if (svp && sv_isa(*svp, "POSIX::SigSet")) {
2907 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2908 sigset = (sigset_t*) tmp;
2909 act.sa_mask = *sigset;
2912 sigemptyset(& act.sa_mask);
2914 /* Set up any desired flags. */
2915 svp = hv_fetch(action, "FLAGS", 5, FALSE);
2916 act.sa_flags = svp ? SvIV(*svp) : 0;
2919 /* Now work around sigaction oddities */
2920 if (action && oldaction)
2921 RETVAL = sigaction(sig, & act, & oact);
2923 RETVAL = sigaction(sig, & act, (struct sigaction *)0);
2925 RETVAL = sigaction(sig, (struct sigaction *)0, & oact);
2930 /* Get back the mask. */
2931 svp = hv_fetch(oldaction, "MASK", 4, TRUE);
2932 if (sv_isa(*svp, "POSIX::SigSet")) {
2934 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2935 sigset = (sigset_t*) tmp;
2938 sigset = (sigset_t*)safemalloc(sizeof(sigset_t));
2939 sv_setptrobj(*svp, sigset, "POSIX::SigSet");
2941 *sigset = oact.sa_mask;
2943 /* Get back the flags. */
2944 svp = hv_fetch(oldaction, "FLAGS", 5, TRUE);
2945 sv_setiv(*svp, oact.sa_flags);
2953 POSIX::SigSet sigset
2956 sigprocmask(how, sigset, oldsigset = 0)
2958 POSIX::SigSet sigset
2959 POSIX::SigSet oldsigset
2962 sigsuspend(signal_mask)
2963 POSIX::SigSet signal_mask
2983 lseek(fd, offset, whence)
2996 if (pipe(fds) != -1) {
2998 PUSHs(sv_2mortal(newSViv(fds[0])));
2999 PUSHs(sv_2mortal(newSViv(fds[1])));
3003 read(fd, buffer, nbytes)
3005 SV *sv_buffer = SvROK(ST(1)) ? SvRV(ST(1)) : ST(1);
3009 char * buffer = sv_grow( sv_buffer, nbytes+1 );
3012 SvCUR(sv_buffer) = RETVAL;
3013 SvPOK_only(sv_buffer);
3014 *SvEND(sv_buffer) = '\0';
3015 SvTAINTED_on(sv_buffer);
3031 tcsetpgrp(fd, pgrp_id)
3040 if (uname(&buf) >= 0) {
3042 PUSHs(sv_2mortal(newSVpv(buf.sysname, 0)));
3043 PUSHs(sv_2mortal(newSVpv(buf.nodename, 0)));
3044 PUSHs(sv_2mortal(newSVpv(buf.release, 0)));
3045 PUSHs(sv_2mortal(newSVpv(buf.version, 0)));
3046 PUSHs(sv_2mortal(newSVpv(buf.machine, 0)));
3049 uname((char *) 0); /* A stub to call not_here(). */
3053 write(fd, buffer, nbytes)
3071 mbstowcs(s, pwcs, n)
3083 wcstombs(s, pwcs, n)
3105 SET_NUMERIC_LOCAL();
3106 num = strtod(str, &unparsed);
3107 PUSHs(sv_2mortal(newSVnv(num)));
3108 if (GIMME == G_ARRAY) {
3111 PUSHs(sv_2mortal(newSViv(strlen(unparsed))));
3117 strtol(str, base = 0)
3124 num = strtol(str, &unparsed, base);
3125 if (num >= IV_MIN && num <= IV_MAX)
3126 PUSHs(sv_2mortal(newSViv((IV)num)));
3128 PUSHs(sv_2mortal(newSVnv((double)num)));
3129 if (GIMME == G_ARRAY) {
3132 PUSHs(sv_2mortal(newSViv(strlen(unparsed))));
3138 strtoul(str, base = 0)
3145 num = strtoul(str, &unparsed, base);
3147 PUSHs(sv_2mortal(newSViv((IV)num)));
3149 PUSHs(sv_2mortal(newSVnv((double)num)));
3150 if (GIMME == G_ARRAY) {
3153 PUSHs(sv_2mortal(newSViv(strlen(unparsed))));
3165 char *p = SvPV(src,srclen);
3167 ST(0) = sv_2mortal(NEWSV(800,srclen));
3168 dstlen = strxfrm(SvPVX(ST(0)), p, (size_t)srclen);
3169 if (dstlen > srclen) {
3171 SvGROW(ST(0), dstlen);
3172 strxfrm(SvPVX(ST(0)), p, (size_t)dstlen);
3175 SvCUR(ST(0)) = dstlen;
3180 mkfifo(filename, mode)
3184 TAINT_PROPER("mkfifo");
3185 RETVAL = mkfifo(filename, mode);
3201 tcflush(fd, queue_selector)
3206 tcsendbreak(fd, duration)
3211 asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3224 init_tm(&mytm); /* XXX workaround - see init_tm() above */
3227 mytm.tm_hour = hour;
3228 mytm.tm_mday = mday;
3230 mytm.tm_year = year;
3231 mytm.tm_wday = wday;
3232 mytm.tm_yday = yday;
3233 mytm.tm_isdst = isdst;
3234 RETVAL = asctime(&mytm);
3251 realtime = times( &tms );
3253 PUSHs( sv_2mortal( newSVnv( realtime ) ) );
3254 PUSHs( sv_2mortal( newSVnv( tms.tms_utime ) ) );
3255 PUSHs( sv_2mortal( newSVnv( tms.tms_stime ) ) );
3256 PUSHs( sv_2mortal( newSVnv( tms.tms_cutime ) ) );
3257 PUSHs( sv_2mortal( newSVnv( tms.tms_cstime ) ) );
3260 difftime(time1, time2)
3265 mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3278 init_tm(&mytm); /* XXX workaround - see init_tm() above */
3281 mytm.tm_hour = hour;
3282 mytm.tm_mday = mday;
3284 mytm.tm_year = year;
3285 mytm.tm_wday = wday;
3286 mytm.tm_yday = yday;
3287 mytm.tm_isdst = isdst;
3288 RETVAL = mktime(&mytm);
3294 strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3310 init_tm(&mytm); /* XXX workaround - see init_tm() above */
3313 mytm.tm_hour = hour;
3314 mytm.tm_mday = mday;
3316 mytm.tm_year = year;
3317 mytm.tm_wday = wday;
3318 mytm.tm_yday = yday;
3319 mytm.tm_isdst = isdst;
3320 len = strftime(tmpbuf, sizeof tmpbuf, fmt, &mytm);
3321 ST(0) = sv_2mortal(newSVpv(tmpbuf, len));
3331 PUSHs(sv_2mortal(newSVpv(tzname[0],strlen(tzname[0]))));
3332 PUSHs(sv_2mortal(newSVpv(tzname[1],strlen(tzname[1]))));
3335 access(filename, mode)
3353 pathconf(filename, name)