home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Source / GNU / perl / Perl / ext / POSIX / POSIX.xs < prev    next >
Encoding:
Text File  |  1995-05-23  |  54.4 KB  |  3,171 lines

  1. #include "EXTERN.h"
  2. #include "perl.h"
  3. #include "XSUB.h"
  4. #include <ctype.h>
  5. #ifdef I_DIRENT    /* XXX maybe better to just rely on perl.h? */
  6. #include <dirent.h>
  7. #endif
  8. #include <errno.h>
  9. #include <fcntl.h>
  10. #ifdef I_FLOAT
  11. #include <float.h>
  12. #endif
  13. #include <grp.h>
  14. #ifdef I_LIMITS
  15. #include <limits.h>
  16. #endif
  17. #include <locale.h>
  18. #include <math.h>
  19. #ifdef I_PWD
  20. #include <pwd.h>
  21. #endif
  22. #include <setjmp.h>
  23. #include <signal.h>
  24. #ifdef I_STDARG
  25. #include <stdarg.h>
  26. #endif
  27. #ifdef I_STDDEF
  28. #include <stddef.h>
  29. #endif
  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
  33. */
  34. #if defined(I_TERMIOS)
  35. #include <termios.h>
  36. #endif
  37. #include <stdio.h>
  38. #ifdef I_STDLIB
  39. #include <stdlib.h>
  40. #endif
  41. #include <string.h>
  42. #include <sys/stat.h>
  43. #include <sys/times.h>
  44. #include <sys/types.h>
  45. #ifdef HAS_UNAME
  46. #include <sys/utsname.h>
  47. #endif
  48. #include <sys/wait.h>
  49. #include <time.h>
  50. #include <unistd.h>
  51. #ifdef I_UTIME
  52. #include <utime.h>
  53. #endif
  54.  
  55. typedef FILE * InputStream;
  56. typedef FILE * OutputStream;
  57. typedef int SysRet;
  58. typedef long SysRetLong;
  59. typedef sigset_t* POSIX__SigSet;
  60. typedef HV* POSIX__SigAction;
  61. #ifdef I_TERMIOS
  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
  65. #define speed_t int
  66. #define tcflag_t int
  67. #define cc_t 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")
  79. #endif
  80.  
  81. /* Possibly needed prototypes */
  82. char *cuserid _((char *));
  83.  
  84. #ifndef HAS_CUSERID
  85. #define cuserid(a) (char *) not_here("cuserid")
  86. #endif
  87. #ifndef HAS_DIFFTIME
  88. #ifndef difftime
  89. #define difftime(a,b) not_here("difftime")
  90. #endif
  91. #endif
  92. #ifndef HAS_FPATHCONF
  93. #define fpathconf(f,n)     (SysRetLong) not_here("fpathconf")
  94. #endif
  95. #ifndef HAS_MKTIME
  96. #define mktime(a) not_here("mktime")
  97. #endif
  98. #ifndef HAS_NICE
  99. #define nice(a) not_here("nice")
  100. #endif
  101. #ifndef HAS_PATHCONF
  102. #define pathconf(f,n)     (SysRetLong) not_here("pathconf")
  103. #endif
  104. #ifndef HAS_SYSCONF
  105. #define sysconf(n)     (SysRetLong) not_here("sysconf")
  106. #endif
  107. #ifndef HAS_READLINK
  108. #define readlink(a,b,c) not_here("readlink")
  109. #endif
  110. #ifndef HAS_SETPGID
  111. #define setpgid(a,b) not_here("setpgid")
  112. #endif
  113. #ifndef HAS_SETSID
  114. #define setsid() not_here("setsid")
  115. #endif
  116. #ifndef HAS_STRCOLL
  117. #define strcoll(s1,s2) not_here("strcoll")
  118. #endif
  119. #ifndef HAS_STRXFRM
  120. #define strxfrm(s1,s2,n) not_here("strxfrm")
  121. #endif
  122. #ifndef HAS_TCGETPGRP
  123. #define tcgetpgrp(a) not_here("tcgetpgrp")
  124. #endif
  125. #ifndef HAS_TCSETPGRP
  126. #define tcsetpgrp(a,b) not_here("tcsetpgrp")
  127. #endif
  128. #ifndef HAS_TIMES
  129. #define times(a) not_here("times")
  130. #endif
  131. #ifndef HAS_UNAME
  132. #define uname(a) not_here("uname")
  133. #endif
  134. #ifndef HAS_WAITPID
  135. #define waitpid(a,b,c) not_here("waitpid")
  136. #endif
  137.  
  138. #ifndef HAS_FGETPOS
  139. #define fgetpos(a,b) not_here("fgetpos")
  140. #endif
  141. #ifndef HAS_FSETPOS
  142. #define fsetpos(a,b) not_here("fsetpos")
  143. #endif
  144.  
  145. #ifndef HAS_MBLEN
  146. #ifndef mblen
  147. #define mblen(a,b) not_here("mblen")
  148. #endif
  149. #endif
  150. #ifndef HAS_MBSTOWCS
  151. #define mbstowcs(s, pwcs, n) not_here("mbstowcs")
  152. #endif
  153. #ifndef HAS_MBTOWC
  154. #define mbtowc(pwc, s, n) not_here("mbtowc")
  155. #endif
  156. #ifndef HAS_WCSTOMBS
  157. #define wcstombs(s, pwcs, n) not_here("wcstombs")
  158. #endif
  159. #ifndef HAS_WCTOMB
  160. #define wctomb(s, wchar) not_here("wcstombs")
  161. #endif
  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. */
  168. #ifndef wchar_t
  169. #define wchar_t char
  170. #endif
  171. #endif
  172.  
  173. #ifndef HAS_LOCALECONV
  174. #define localeconv() not_here("localeconv")
  175. #endif
  176.  
  177. #ifdef HAS_TZNAME
  178. extern char *tzname[];
  179. #else
  180. char *tzname[] = { "" , "" };
  181. #endif
  182.  
  183. #ifndef HAS_LONG_DOUBLE /* XXX What to do about long doubles? */
  184. #ifdef LDBL_MAX
  185. #undef LDBL_MAX
  186. #endif
  187. #ifdef LDBL_MIN
  188. #undef LDBL_MIN
  189. #endif
  190. #ifdef LDBL_EPSILON
  191. #undef LDBL_EPSILON
  192. #endif
  193. #endif
  194.  
  195. static int
  196. not_here(s)
  197. char *s;
  198. {
  199.     croak("POSIX::%s not implemented on this architecture", s);
  200.     return -1;
  201. }
  202.  
  203. static double
  204. constant(name, arg)
  205. char *name;
  206. int arg;
  207. {
  208.     errno = 0;
  209.     switch (*name) {
  210.     case 'A':
  211.     if (strEQ(name, "ARG_MAX"))
  212. #ifdef ARG_MAX
  213.         return ARG_MAX;
  214. #else
  215.         goto not_there;
  216. #endif
  217.     break;
  218.     case 'B':
  219.     if (strEQ(name, "BUFSIZ"))
  220. #ifdef BUFSIZ
  221.         return BUFSIZ;
  222. #else
  223.         goto not_there;
  224. #endif
  225.     if (strEQ(name, "BRKINT"))
  226. #ifdef BRKINT
  227.         return BRKINT;
  228. #else
  229.         goto not_there;
  230. #endif
  231.     if (strEQ(name, "B9600"))
  232. #ifdef B9600
  233.         return B9600;
  234. #else
  235.         goto not_there;
  236. #endif
  237.     if (strEQ(name, "B19200"))
  238. #ifdef B19200
  239.         return B19200;
  240. #else
  241.         goto not_there;
  242. #endif
  243.     if (strEQ(name, "B38400"))
  244. #ifdef B38400
  245.         return B38400;
  246. #else
  247.         goto not_there;
  248. #endif
  249.     if (strEQ(name, "B0"))
  250. #ifdef B0
  251.         return B0;
  252. #else
  253.         goto not_there;
  254. #endif
  255.     if (strEQ(name, "B110"))
  256. #ifdef B110
  257.         return B110;
  258. #else
  259.         goto not_there;
  260. #endif
  261.     if (strEQ(name, "B1200"))
  262. #ifdef B1200
  263.         return B1200;
  264. #else
  265.         goto not_there;
  266. #endif
  267.     if (strEQ(name, "B134"))
  268. #ifdef B134
  269.         return B134;
  270. #else
  271.         goto not_there;
  272. #endif
  273.     if (strEQ(name, "B150"))
  274. #ifdef B150
  275.         return B150;
  276. #else
  277.         goto not_there;
  278. #endif
  279.     if (strEQ(name, "B1800"))
  280. #ifdef B1800
  281.         return B1800;
  282. #else
  283.         goto not_there;
  284. #endif
  285.     if (strEQ(name, "B200"))
  286. #ifdef B200
  287.         return B200;
  288. #else
  289.         goto not_there;
  290. #endif
  291.     if (strEQ(name, "B2400"))
  292. #ifdef B2400
  293.         return B2400;
  294. #else
  295.         goto not_there;
  296. #endif
  297.     if (strEQ(name, "B300"))
  298. #ifdef B300
  299.         return B300;
  300. #else
  301.         goto not_there;
  302. #endif
  303.     if (strEQ(name, "B4800"))
  304. #ifdef B4800
  305.         return B4800;
  306. #else
  307.         goto not_there;
  308. #endif
  309.     if (strEQ(name, "B50"))
  310. #ifdef B50
  311.         return B50;
  312. #else
  313.         goto not_there;
  314. #endif
  315.     if (strEQ(name, "B600"))
  316. #ifdef B600
  317.         return B600;
  318. #else
  319.         goto not_there;
  320. #endif
  321.     if (strEQ(name, "B75"))
  322. #ifdef B75
  323.         return B75;
  324. #else
  325.         goto not_there;
  326. #endif
  327.     break;
  328.     case 'C':
  329.     if (strEQ(name, "CHAR_BIT"))
  330. #ifdef CHAR_BIT
  331.         return CHAR_BIT;
  332. #else
  333.         goto not_there;
  334. #endif
  335.     if (strEQ(name, "CHAR_MAX"))
  336. #ifdef CHAR_MAX
  337.         return CHAR_MAX;
  338. #else
  339.         goto not_there;
  340. #endif
  341.     if (strEQ(name, "CHAR_MIN"))
  342. #ifdef CHAR_MIN
  343.         return CHAR_MIN;
  344. #else
  345.         goto not_there;
  346. #endif
  347.     if (strEQ(name, "CHILD_MAX"))
  348. #ifdef CHILD_MAX
  349.         return CHILD_MAX;
  350. #else
  351.         goto not_there;
  352. #endif
  353.     if (strEQ(name, "CLK_TCK"))
  354. #ifdef CLK_TCK
  355.         return CLK_TCK;
  356. #else
  357.         goto not_there;
  358. #endif
  359.     if (strEQ(name, "CLOCAL"))
  360. #ifdef CLOCAL
  361.         return CLOCAL;
  362. #else
  363.         goto not_there;
  364. #endif
  365.     if (strEQ(name, "CLOCKS_PER_SEC"))
  366. #ifdef CLOCKS_PER_SEC
  367.         return CLOCKS_PER_SEC;
  368. #else
  369.         goto not_there;
  370. #endif
  371.     if (strEQ(name, "CREAD"))
  372. #ifdef CREAD
  373.         return CREAD;
  374. #else
  375.         goto not_there;
  376. #endif
  377.     if (strEQ(name, "CS5"))
  378. #ifdef CS5
  379.         return CS5;
  380. #else
  381.         goto not_there;
  382. #endif
  383.     if (strEQ(name, "CS6"))
  384. #ifdef CS6
  385.         return CS6;
  386. #else
  387.         goto not_there;
  388. #endif
  389.     if (strEQ(name, "CS7"))
  390. #ifdef CS7
  391.         return CS7;
  392. #else
  393.         goto not_there;
  394. #endif
  395.     if (strEQ(name, "CS8"))
  396. #ifdef CS8
  397.         return CS8;
  398. #else
  399.         goto not_there;
  400. #endif
  401.     if (strEQ(name, "CSIZE"))
  402. #ifdef CSIZE
  403.         return CSIZE;
  404. #else
  405.         goto not_there;
  406. #endif
  407.     if (strEQ(name, "CSTOPB"))
  408. #ifdef CSTOPB
  409.         return CSTOPB;
  410. #else
  411.         goto not_there;
  412. #endif
  413.     break;
  414.     case 'D':
  415.     if (strEQ(name, "DBL_MAX"))
  416. #ifdef DBL_MAX
  417.         return DBL_MAX;
  418. #else
  419.         goto not_there;
  420. #endif
  421.     if (strEQ(name, "DBL_MIN"))
  422. #ifdef DBL_MIN
  423.         return DBL_MIN;
  424. #else
  425.         goto not_there;
  426. #endif
  427.     if (strEQ(name, "DBL_DIG"))
  428. #ifdef DBL_DIG
  429.         return DBL_DIG;
  430. #else
  431.         goto not_there;
  432. #endif
  433.     if (strEQ(name, "DBL_EPSILON"))
  434. #ifdef DBL_EPSILON
  435.         return DBL_EPSILON;
  436. #else
  437.         goto not_there;
  438. #endif
  439.     if (strEQ(name, "DBL_MANT_DIG"))
  440. #ifdef DBL_MANT_DIG
  441.         return DBL_MANT_DIG;
  442. #else
  443.         goto not_there;
  444. #endif
  445.     if (strEQ(name, "DBL_MAX_10_EXP"))
  446. #ifdef DBL_MAX_10_EXP
  447.         return DBL_MAX_10_EXP;
  448. #else
  449.         goto not_there;
  450. #endif
  451.     if (strEQ(name, "DBL_MAX_EXP"))
  452. #ifdef DBL_MAX_EXP
  453.         return DBL_MAX_EXP;
  454. #else
  455.         goto not_there;
  456. #endif
  457.     if (strEQ(name, "DBL_MIN_10_EXP"))
  458. #ifdef DBL_MIN_10_EXP
  459.         return DBL_MIN_10_EXP;
  460. #else
  461.         goto not_there;
  462. #endif
  463.     if (strEQ(name, "DBL_MIN_EXP"))
  464. #ifdef DBL_MIN_EXP
  465.         return DBL_MIN_EXP;
  466. #else
  467.         goto not_there;
  468. #endif
  469.     break;
  470.     case 'E':
  471.     switch (name[1]) {
  472.     case 'A':
  473.         if (strEQ(name, "EACCES"))
  474. #ifdef EACCES
  475.         return EACCES;
  476. #else
  477.         goto not_there;
  478. #endif
  479.         if (strEQ(name, "EAGAIN"))
  480. #ifdef EAGAIN
  481.         return EAGAIN;
  482. #else
  483.         goto not_there;
  484. #endif
  485.         break;
  486.     case 'B':
  487.         if (strEQ(name, "EBADF"))
  488. #ifdef EBADF
  489.         return EBADF;
  490. #else
  491.         goto not_there;
  492. #endif
  493.         if (strEQ(name, "EBUSY"))
  494. #ifdef EBUSY
  495.         return EBUSY;
  496. #else
  497.         goto not_there;
  498. #endif
  499.         break;
  500.     case 'C':
  501.         if (strEQ(name, "ECHILD"))
  502. #ifdef ECHILD
  503.         return ECHILD;
  504. #else
  505.         goto not_there;
  506. #endif
  507.         if (strEQ(name, "ECHO"))
  508. #ifdef ECHO
  509.         return ECHO;
  510. #else
  511.         goto not_there;
  512. #endif
  513.         if (strEQ(name, "ECHOE"))
  514. #ifdef ECHOE
  515.         return ECHOE;
  516. #else
  517.         goto not_there;
  518. #endif
  519.         if (strEQ(name, "ECHOK"))
  520. #ifdef ECHOK
  521.         return ECHOK;
  522. #else
  523.         goto not_there;
  524. #endif
  525.         if (strEQ(name, "ECHONL"))
  526. #ifdef ECHONL
  527.         return ECHONL;
  528. #else
  529.         goto not_there;
  530. #endif
  531.         break;
  532.     case 'D':
  533.         if (strEQ(name, "EDEADLK"))
  534. #ifdef EDEADLK
  535.         return EDEADLK;
  536. #else
  537.         goto not_there;
  538. #endif
  539.         if (strEQ(name, "EDOM"))
  540. #ifdef EDOM
  541.         return EDOM;
  542. #else
  543.         goto not_there;
  544. #endif
  545.         break;
  546.     case 'E':
  547.         if (strEQ(name, "EEXIST"))
  548. #ifdef EEXIST
  549.         return EEXIST;
  550. #else
  551.         goto not_there;
  552. #endif
  553.         break;
  554.     case 'F':
  555.         if (strEQ(name, "EFAULT"))
  556. #ifdef EFAULT
  557.         return EFAULT;
  558. #else
  559.         goto not_there;
  560. #endif
  561.         if (strEQ(name, "EFBIG"))
  562. #ifdef EFBIG
  563.         return EFBIG;
  564. #else
  565.         goto not_there;
  566. #endif
  567.         break;
  568.     case 'I':
  569.         if (strEQ(name, "EINTR"))
  570. #ifdef EINTR
  571.         return EINTR;
  572. #else
  573.         goto not_there;
  574. #endif
  575.         if (strEQ(name, "EINVAL"))
  576. #ifdef EINVAL
  577.         return EINVAL;
  578. #else
  579.         goto not_there;
  580. #endif
  581.         if (strEQ(name, "EIO"))
  582. #ifdef EIO
  583.         return EIO;
  584. #else
  585.         goto not_there;
  586. #endif
  587.         if (strEQ(name, "EISDIR"))
  588. #ifdef EISDIR
  589.         return EISDIR;
  590. #else
  591.         goto not_there;
  592. #endif
  593.         break;
  594.     case 'M':
  595.         if (strEQ(name, "EMFILE"))
  596. #ifdef EMFILE
  597.         return EMFILE;
  598. #else
  599.         goto not_there;
  600. #endif
  601.         if (strEQ(name, "EMLINK"))
  602. #ifdef EMLINK
  603.         return EMLINK;
  604. #else
  605.         goto not_there;
  606. #endif
  607.         break;
  608.     case 'N':
  609.         if (strEQ(name, "ENOMEM"))
  610. #ifdef ENOMEM
  611.         return ENOMEM;
  612. #else
  613.         goto not_there;
  614. #endif
  615.         if (strEQ(name, "ENOSPC"))
  616. #ifdef ENOSPC
  617.         return ENOSPC;
  618. #else
  619.         goto not_there;
  620. #endif
  621.         if (strEQ(name, "ENOEXEC"))
  622. #ifdef ENOEXEC
  623.         return ENOEXEC;
  624. #else
  625.         goto not_there;
  626. #endif
  627.         if (strEQ(name, "ENOTTY"))
  628. #ifdef ENOTTY
  629.         return ENOTTY;
  630. #else
  631.         goto not_there;
  632. #endif
  633.         if (strEQ(name, "ENOTDIR"))
  634. #ifdef ENOTDIR
  635.         return ENOTDIR;
  636. #else
  637.         goto not_there;
  638. #endif
  639.         if (strEQ(name, "ENOTEMPTY"))
  640. #ifdef ENOTEMPTY
  641.         return ENOTEMPTY;
  642. #else
  643.         goto not_there;
  644. #endif
  645.         if (strEQ(name, "ENFILE"))
  646. #ifdef ENFILE
  647.         return ENFILE;
  648. #else
  649.         goto not_there;
  650. #endif
  651.         if (strEQ(name, "ENODEV"))
  652. #ifdef ENODEV
  653.         return ENODEV;
  654. #else
  655.         goto not_there;
  656. #endif
  657.         if (strEQ(name, "ENOENT"))
  658. #ifdef ENOENT
  659.         return ENOENT;
  660. #else
  661.         goto not_there;
  662. #endif
  663.         if (strEQ(name, "ENOLCK"))
  664. #ifdef ENOLCK
  665.         return ENOLCK;
  666. #else
  667.         goto not_there;
  668. #endif
  669.         if (strEQ(name, "ENOSYS"))
  670. #ifdef ENOSYS
  671.         return ENOSYS;
  672. #else
  673.         goto not_there;
  674. #endif
  675.         if (strEQ(name, "ENXIO"))
  676. #ifdef ENXIO
  677.         return ENXIO;
  678. #else
  679.         goto not_there;
  680. #endif
  681.         if (strEQ(name, "ENAMETOOLONG"))
  682. #ifdef ENAMETOOLONG
  683.         return ENAMETOOLONG;
  684. #else
  685.         goto not_there;
  686. #endif
  687.         break;
  688.     case 'O':
  689.         if (strEQ(name, "EOF"))
  690. #ifdef EOF
  691.         return EOF;
  692. #else
  693.         goto not_there;
  694. #endif
  695.         break;
  696.     case 'P':
  697.         if (strEQ(name, "EPERM"))
  698. #ifdef EPERM
  699.         return EPERM;
  700. #else
  701.         goto not_there;
  702. #endif
  703.         if (strEQ(name, "EPIPE"))
  704. #ifdef EPIPE
  705.         return EPIPE;
  706. #else
  707.         goto not_there;
  708. #endif
  709.         break;
  710.     case 'R':
  711.         if (strEQ(name, "ERANGE"))
  712. #ifdef ERANGE
  713.         return ERANGE;
  714. #else
  715.         goto not_there;
  716. #endif
  717.         if (strEQ(name, "EROFS"))
  718. #ifdef EROFS
  719.         return EROFS;
  720. #else
  721.         goto not_there;
  722. #endif
  723.         break;
  724.     case 'S':
  725.         if (strEQ(name, "ESPIPE"))
  726. #ifdef ESPIPE
  727.         return ESPIPE;
  728. #else
  729.         goto not_there;
  730. #endif
  731.         if (strEQ(name, "ESRCH"))
  732. #ifdef ESRCH
  733.         return ESRCH;
  734. #else
  735.         goto not_there;
  736. #endif
  737.         break;
  738.     case 'X':
  739.         if (strEQ(name, "EXIT_FAILURE"))
  740. #ifdef EXIT_FAILURE
  741.         return EXIT_FAILURE;
  742. #else
  743.         return 1;
  744. #endif
  745.         if (strEQ(name, "EXIT_SUCCESS"))
  746. #ifdef EXIT_SUCCESS
  747.         return EXIT_SUCCESS;
  748. #else
  749.         return 0;
  750. #endif
  751.         if (strEQ(name, "EXDEV"))
  752. #ifdef EXDEV
  753.         return EXDEV;
  754. #else
  755.         goto not_there;
  756. #endif
  757.         break;
  758.     }
  759.     if (strEQ(name, "E2BIG"))
  760. #ifdef E2BIG
  761.         return E2BIG;
  762. #else
  763.         goto not_there;
  764. #endif
  765.     break;
  766.     case 'F':
  767.     if (strnEQ(name, "FLT_", 4)) {
  768.         if (strEQ(name, "FLT_MAX"))
  769. #ifdef FLT_MAX
  770.         return FLT_MAX;
  771. #else
  772.         goto not_there;
  773. #endif
  774.         if (strEQ(name, "FLT_MIN"))
  775. #ifdef FLT_MIN
  776.         return FLT_MIN;
  777. #else
  778.         goto not_there;
  779. #endif
  780.         if (strEQ(name, "FLT_ROUNDS"))
  781. #ifdef FLT_ROUNDS
  782.         return FLT_ROUNDS;
  783. #else
  784.         goto not_there;
  785. #endif
  786.         if (strEQ(name, "FLT_DIG"))
  787. #ifdef FLT_DIG
  788.         return FLT_DIG;
  789. #else
  790.         goto not_there;
  791. #endif
  792.         if (strEQ(name, "FLT_EPSILON"))
  793. #ifdef FLT_EPSILON
  794.         return FLT_EPSILON;
  795. #else
  796.         goto not_there;
  797. #endif
  798.         if (strEQ(name, "FLT_MANT_DIG"))
  799. #ifdef FLT_MANT_DIG
  800.         return FLT_MANT_DIG;
  801. #else
  802.         goto not_there;
  803. #endif
  804.         if (strEQ(name, "FLT_MAX_10_EXP"))
  805. #ifdef FLT_MAX_10_EXP
  806.         return FLT_MAX_10_EXP;
  807. #else
  808.         goto not_there;
  809. #endif
  810.         if (strEQ(name, "FLT_MAX_EXP"))
  811. #ifdef FLT_MAX_EXP
  812.         return FLT_MAX_EXP;
  813. #else
  814.         goto not_there;
  815. #endif
  816.         if (strEQ(name, "FLT_MIN_10_EXP"))
  817. #ifdef FLT_MIN_10_EXP
  818.         return FLT_MIN_10_EXP;
  819. #else
  820.         goto not_there;
  821. #endif
  822.         if (strEQ(name, "FLT_MIN_EXP"))
  823. #ifdef FLT_MIN_EXP
  824.         return FLT_MIN_EXP;
  825. #else
  826.         goto not_there;
  827. #endif
  828.         if (strEQ(name, "FLT_RADIX"))
  829. #ifdef FLT_RADIX
  830.         return FLT_RADIX;
  831. #else
  832.         goto not_there;
  833. #endif
  834.         break;
  835.     }
  836.     if (strnEQ(name, "F_", 2)) {
  837.         if (strEQ(name, "F_DUPFD"))
  838. #ifdef F_DUPFD
  839.         return F_DUPFD;
  840. #else
  841.         goto not_there;
  842. #endif
  843.         if (strEQ(name, "F_GETFD"))
  844. #ifdef F_GETFD
  845.         return F_GETFD;
  846. #else
  847.         goto not_there;
  848. #endif
  849.         if (strEQ(name, "F_GETFL"))
  850. #ifdef F_GETFL
  851.         return F_GETFL;
  852. #else
  853.         goto not_there;
  854. #endif
  855.         if (strEQ(name, "F_GETLK"))
  856. #ifdef F_GETLK
  857.         return F_GETLK;
  858. #else
  859.         goto not_there;
  860. #endif
  861.         if (strEQ(name, "F_OK"))
  862. #ifdef F_OK
  863.         return F_OK;
  864. #else
  865.         goto not_there;
  866. #endif
  867.         if (strEQ(name, "F_RDLCK"))
  868. #ifdef F_RDLCK
  869.         return F_RDLCK;
  870. #else
  871.         goto not_there;
  872. #endif
  873.         if (strEQ(name, "F_SETFD"))
  874. #ifdef F_SETFD
  875.         return F_SETFD;
  876. #else
  877.         goto not_there;
  878. #endif
  879.         if (strEQ(name, "F_SETFL"))
  880. #ifdef F_SETFL
  881.         return F_SETFL;
  882. #else
  883.         goto not_there;
  884. #endif
  885.         if (strEQ(name, "F_SETLK"))
  886. #ifdef F_SETLK
  887.         return F_SETLK;
  888. #else
  889.         goto not_there;
  890. #endif
  891.         if (strEQ(name, "F_SETLKW"))
  892. #ifdef F_SETLKW
  893.         return F_SETLKW;
  894. #else
  895.         goto not_there;
  896. #endif
  897.         if (strEQ(name, "F_UNLCK"))
  898. #ifdef F_UNLCK
  899.         return F_UNLCK;
  900. #else
  901.         goto not_there;
  902. #endif
  903.         if (strEQ(name, "F_WRLCK"))
  904. #ifdef F_WRLCK
  905.         return F_WRLCK;
  906. #else
  907.         goto not_there;
  908. #endif
  909.         break;
  910.     }
  911.     if (strEQ(name, "FD_CLOEXEC"))
  912. #ifdef FD_CLOEXEC
  913.         return FD_CLOEXEC;
  914. #else
  915.         goto not_there;
  916. #endif
  917.     if (strEQ(name, "FILENAME_MAX"))
  918. #ifdef FILENAME_MAX
  919.         return FILENAME_MAX;
  920. #else
  921.         goto not_there;
  922. #endif
  923.     break;
  924.     case 'H':
  925.     if (strEQ(name, "HUGE_VAL"))
  926. #ifdef HUGE_VAL
  927.         return HUGE_VAL;
  928. #else
  929.         goto not_there;
  930. #endif
  931.     if (strEQ(name, "HUPCL"))
  932. #ifdef HUPCL
  933.         return HUPCL;
  934. #else
  935.         goto not_there;
  936. #endif
  937.     break;
  938.     case 'I':
  939.     if (strEQ(name, "INT_MAX"))
  940. #ifdef INT_MAX
  941.         return INT_MAX;
  942. #else
  943.         goto not_there;
  944. #endif
  945.     if (strEQ(name, "INT_MIN"))
  946. #ifdef INT_MIN
  947.         return INT_MIN;
  948. #else
  949.         goto not_there;
  950. #endif
  951.     if (strEQ(name, "ICANON"))
  952. #ifdef ICANON
  953.         return ICANON;
  954. #else
  955.         goto not_there;
  956. #endif
  957.     if (strEQ(name, "ICRNL"))
  958. #ifdef ICRNL
  959.         return ICRNL;
  960. #else
  961.         goto not_there;
  962. #endif
  963.     if (strEQ(name, "IEXTEN"))
  964. #ifdef IEXTEN
  965.         return IEXTEN;
  966. #else
  967.         goto not_there;
  968. #endif
  969.     if (strEQ(name, "IGNBRK"))
  970. #ifdef IGNBRK
  971.         return IGNBRK;
  972. #else
  973.         goto not_there;
  974. #endif
  975.     if (strEQ(name, "IGNCR"))
  976. #ifdef IGNCR
  977.         return IGNCR;
  978. #else
  979.         goto not_there;
  980. #endif
  981.     if (strEQ(name, "IGNPAR"))
  982. #ifdef IGNPAR
  983.         return IGNPAR;
  984. #else
  985.         goto not_there;
  986. #endif
  987.     if (strEQ(name, "INLCR"))
  988. #ifdef INLCR
  989.         return INLCR;
  990. #else
  991.         goto not_there;
  992. #endif
  993.     if (strEQ(name, "INPCK"))
  994. #ifdef INPCK
  995.         return INPCK;
  996. #else
  997.         goto not_there;
  998. #endif
  999.     if (strEQ(name, "ISIG"))
  1000. #ifdef ISIG
  1001.         return ISIG;
  1002. #else
  1003.         goto not_there;
  1004. #endif
  1005.     if (strEQ(name, "ISTRIP"))
  1006. #ifdef ISTRIP
  1007.         return ISTRIP;
  1008. #else
  1009.         goto not_there;
  1010. #endif
  1011.     if (strEQ(name, "IXOFF"))
  1012. #ifdef IXOFF
  1013.         return IXOFF;
  1014. #else
  1015.         goto not_there;
  1016. #endif
  1017.     if (strEQ(name, "IXON"))
  1018. #ifdef IXON
  1019.         return IXON;
  1020. #else
  1021.         goto not_there;
  1022. #endif
  1023.     break;
  1024.     case 'L':
  1025.     if (strnEQ(name, "LC_", 3)) {
  1026.         if (strEQ(name, "LC_ALL"))
  1027. #ifdef LC_ALL
  1028.         return LC_ALL;
  1029. #else
  1030.         goto not_there;
  1031. #endif
  1032.         if (strEQ(name, "LC_COLLATE"))
  1033. #ifdef LC_COLLATE
  1034.         return LC_COLLATE;
  1035. #else
  1036.         goto not_there;
  1037. #endif
  1038.         if (strEQ(name, "LC_CTYPE"))
  1039. #ifdef LC_CTYPE
  1040.         return LC_CTYPE;
  1041. #else
  1042.         goto not_there;
  1043. #endif
  1044.         if (strEQ(name, "LC_MONETARY"))
  1045. #ifdef LC_MONETARY
  1046.         return LC_MONETARY;
  1047. #else
  1048.         goto not_there;
  1049. #endif
  1050.         if (strEQ(name, "LC_NUMERIC"))
  1051. #ifdef LC_NUMERIC
  1052.         return LC_NUMERIC;
  1053. #else
  1054.         goto not_there;
  1055. #endif
  1056.         if (strEQ(name, "LC_TIME"))
  1057. #ifdef LC_TIME
  1058.         return LC_TIME;
  1059. #else
  1060.         goto not_there;
  1061. #endif
  1062.         break;
  1063.     }
  1064.     if (strnEQ(name, "LDBL_", 5)) {
  1065.         if (strEQ(name, "LDBL_MAX"))
  1066. #ifdef LDBL_MAX
  1067.         return LDBL_MAX;
  1068. #else
  1069.         goto not_there;
  1070. #endif
  1071.         if (strEQ(name, "LDBL_MIN"))
  1072. #ifdef LDBL_MIN
  1073.         return LDBL_MIN;
  1074. #else
  1075.         goto not_there;
  1076. #endif
  1077.         if (strEQ(name, "LDBL_DIG"))
  1078. #ifdef LDBL_DIG
  1079.         return LDBL_DIG;
  1080. #else
  1081.         goto not_there;
  1082. #endif
  1083.         if (strEQ(name, "LDBL_EPSILON"))
  1084. #ifdef LDBL_EPSILON
  1085.         return LDBL_EPSILON;
  1086. #else
  1087.         goto not_there;
  1088. #endif
  1089.         if (strEQ(name, "LDBL_MANT_DIG"))
  1090. #ifdef LDBL_MANT_DIG
  1091.         return LDBL_MANT_DIG;
  1092. #else
  1093.         goto not_there;
  1094. #endif
  1095.         if (strEQ(name, "LDBL_MAX_10_EXP"))
  1096. #ifdef LDBL_MAX_10_EXP
  1097.         return LDBL_MAX_10_EXP;
  1098. #else
  1099.         goto not_there;
  1100. #endif
  1101.         if (strEQ(name, "LDBL_MAX_EXP"))
  1102. #ifdef LDBL_MAX_EXP
  1103.         return LDBL_MAX_EXP;
  1104. #else
  1105.         goto not_there;
  1106. #endif
  1107.         if (strEQ(name, "LDBL_MIN_10_EXP"))
  1108. #ifdef LDBL_MIN_10_EXP
  1109.         return LDBL_MIN_10_EXP;
  1110. #else
  1111.         goto not_there;
  1112. #endif
  1113.         if (strEQ(name, "LDBL_MIN_EXP"))
  1114. #ifdef LDBL_MIN_EXP
  1115.         return LDBL_MIN_EXP;
  1116. #else
  1117.         goto not_there;
  1118. #endif
  1119.         break;
  1120.     }
  1121.     if (strnEQ(name, "L_", 2)) {
  1122.         if (strEQ(name, "L_ctermid"))
  1123. #ifdef L_ctermid
  1124.         return L_ctermid;
  1125. #else
  1126.         goto not_there;
  1127. #endif
  1128.         if (strEQ(name, "L_cuserid"))
  1129. #ifdef L_cuserid
  1130.         return L_cuserid;
  1131. #else
  1132.         goto not_there;
  1133. #endif
  1134.         if (strEQ(name, "L_tmpname"))
  1135. #ifdef L_tmpname
  1136.         return L_tmpname;
  1137. #else
  1138.         goto not_there;
  1139. #endif
  1140.         break;
  1141.     }
  1142.     if (strEQ(name, "LONG_MAX"))
  1143. #ifdef LONG_MAX
  1144.         return LONG_MAX;
  1145. #else
  1146.         goto not_there;
  1147. #endif
  1148.     if (strEQ(name, "LONG_MIN"))
  1149. #ifdef LONG_MIN
  1150.         return LONG_MIN;
  1151. #else
  1152.         goto not_there;
  1153. #endif
  1154.     if (strEQ(name, "LINK_MAX"))
  1155. #ifdef LINK_MAX
  1156.         return LINK_MAX;
  1157. #else
  1158.         goto not_there;
  1159. #endif
  1160.     break;
  1161.     case 'M':
  1162.     if (strEQ(name, "MAX_CANON"))
  1163. #ifdef MAX_CANON
  1164.         return MAX_CANON;
  1165. #else
  1166.         goto not_there;
  1167. #endif
  1168.     if (strEQ(name, "MAX_INPUT"))
  1169. #ifdef MAX_INPUT
  1170.         return MAX_INPUT;
  1171. #else
  1172.         goto not_there;
  1173. #endif
  1174.     if (strEQ(name, "MB_CUR_MAX"))
  1175. #ifdef MB_CUR_MAX
  1176.         return MB_CUR_MAX;
  1177. #else
  1178.         goto not_there;
  1179. #endif
  1180.     if (strEQ(name, "MB_LEN_MAX"))
  1181. #ifdef MB_LEN_MAX
  1182.         return MB_LEN_MAX;
  1183. #else
  1184.         goto not_there;
  1185. #endif
  1186.     break;
  1187.     case 'N':
  1188.     if (strEQ(name, "NULL")) return 0;
  1189.     if (strEQ(name, "NAME_MAX"))
  1190. #ifdef NAME_MAX
  1191.         return NAME_MAX;
  1192. #else
  1193.         goto not_there;
  1194. #endif
  1195.     if (strEQ(name, "NCCS"))
  1196. #ifdef NCCS
  1197.         return NCCS;
  1198. #else
  1199.         goto not_there;
  1200. #endif
  1201.     if (strEQ(name, "NGROUPS_MAX"))
  1202. #ifdef NGROUPS_MAX
  1203.         return NGROUPS_MAX;
  1204. #else
  1205.         goto not_there;
  1206. #endif
  1207.     if (strEQ(name, "NOFLSH"))
  1208. #ifdef NOFLSH
  1209.         return NOFLSH;
  1210. #else
  1211.         goto not_there;
  1212. #endif
  1213.     break;
  1214.     case 'O':
  1215.     if (strnEQ(name, "O_", 2)) {
  1216.         if (strEQ(name, "O_APPEND"))
  1217. #ifdef O_APPEND
  1218.         return O_APPEND;
  1219. #else
  1220.         goto not_there;
  1221. #endif
  1222.         if (strEQ(name, "O_CREAT"))
  1223. #ifdef O_CREAT
  1224.         return O_CREAT;
  1225. #else
  1226.         goto not_there;
  1227. #endif
  1228.         if (strEQ(name, "O_TRUNC"))
  1229. #ifdef O_TRUNC
  1230.         return O_TRUNC;
  1231. #else
  1232.         goto not_there;
  1233. #endif
  1234.         if (strEQ(name, "O_RDONLY"))
  1235. #ifdef O_RDONLY
  1236.         return O_RDONLY;
  1237. #else
  1238.         goto not_there;
  1239. #endif
  1240.         if (strEQ(name, "O_RDWR"))
  1241. #ifdef O_RDWR
  1242.         return O_RDWR;
  1243. #else
  1244.         goto not_there;
  1245. #endif
  1246.         if (strEQ(name, "O_WRONLY"))
  1247. #ifdef O_WRONLY
  1248.         return O_WRONLY;
  1249. #else
  1250.         goto not_there;
  1251. #endif
  1252.         if (strEQ(name, "O_EXCL"))
  1253. #ifdef O_EXCL
  1254.         return O_EXCL;
  1255. #else
  1256.         goto not_there;
  1257. #endif
  1258.         if (strEQ(name, "O_NOCTTY"))
  1259. #ifdef O_NOCTTY
  1260.         return O_NOCTTY;
  1261. #else
  1262.         goto not_there;
  1263. #endif
  1264.         if (strEQ(name, "O_NONBLOCK"))
  1265. #ifdef O_NONBLOCK
  1266.         return O_NONBLOCK;
  1267. #else
  1268.         goto not_there;
  1269. #endif
  1270.         if (strEQ(name, "O_ACCMODE"))
  1271. #ifdef O_ACCMODE
  1272.         return O_ACCMODE;
  1273. #else
  1274.         goto not_there;
  1275. #endif
  1276.         break;
  1277.     }
  1278.     if (strEQ(name, "OPEN_MAX"))
  1279. #ifdef OPEN_MAX
  1280.         return OPEN_MAX;
  1281. #else
  1282.         goto not_there;
  1283. #endif
  1284.     if (strEQ(name, "OPOST"))
  1285. #ifdef OPOST
  1286.         return OPOST;
  1287. #else
  1288.         goto not_there;
  1289. #endif
  1290.     break;
  1291.     case 'P':
  1292.     if (strEQ(name, "PATH_MAX"))
  1293. #ifdef PATH_MAX
  1294.         return PATH_MAX;
  1295. #else
  1296.         goto not_there;
  1297. #endif
  1298.     if (strEQ(name, "PARENB"))
  1299. #ifdef PARENB
  1300.         return PARENB;
  1301. #else
  1302.         goto not_there;
  1303. #endif
  1304.     if (strEQ(name, "PARMRK"))
  1305. #ifdef PARMRK
  1306.         return PARMRK;
  1307. #else
  1308.         goto not_there;
  1309. #endif
  1310.     if (strEQ(name, "PARODD"))
  1311. #ifdef PARODD
  1312.         return PARODD;
  1313. #else
  1314.         goto not_there;
  1315. #endif
  1316.     if (strEQ(name, "PIPE_BUF"))
  1317. #ifdef PIPE_BUF
  1318.         return PIPE_BUF;
  1319. #else
  1320.         goto not_there;
  1321. #endif
  1322.     break;
  1323.     case 'R':
  1324.     if (strEQ(name, "RAND_MAX"))
  1325. #ifdef RAND_MAX
  1326.         return RAND_MAX;
  1327. #else
  1328.         goto not_there;
  1329. #endif
  1330.     if (strEQ(name, "R_OK"))
  1331. #ifdef R_OK
  1332.         return R_OK;
  1333. #else
  1334.         goto not_there;
  1335. #endif
  1336.     break;
  1337.     case 'S':
  1338.     if (strnEQ(name, "SIG", 3)) {
  1339.         if (name[3] == '_') {
  1340.         if (strEQ(name, "SIG_BLOCK"))
  1341. #ifdef SIG_BLOCK
  1342.             return SIG_BLOCK;
  1343. #else
  1344.             goto not_there;
  1345. #endif
  1346. #ifdef SIG_DFL
  1347.         if (strEQ(name, "SIG_DFL")) return (int)SIG_DFL;
  1348. #endif
  1349. #ifdef SIG_ERR
  1350.         if (strEQ(name, "SIG_ERR")) return (int)SIG_ERR;
  1351. #endif
  1352. #ifdef SIG_IGN
  1353.         if (strEQ(name, "SIG_IGN")) return (int)SIG_IGN;
  1354. #endif
  1355.         if (strEQ(name, "SIG_SETMASK"))
  1356. #ifdef SIG_SETMASK
  1357.             return SIG_SETMASK;
  1358. #else
  1359.             goto not_there;
  1360. #endif
  1361.         if (strEQ(name, "SIG_UNBLOCK"))
  1362. #ifdef SIG_UNBLOCK
  1363.             return SIG_UNBLOCK;
  1364. #else
  1365.             goto not_there;
  1366. #endif
  1367.         break;
  1368.         }
  1369.         if (strEQ(name, "SIGABRT"))
  1370. #ifdef SIGABRT
  1371.         return SIGABRT;
  1372. #else
  1373.         goto not_there;
  1374. #endif
  1375.         if (strEQ(name, "SIGALRM"))
  1376. #ifdef SIGALRM
  1377.         return SIGALRM;
  1378. #else
  1379.         goto not_there;
  1380. #endif
  1381.         if (strEQ(name, "SIGCHLD"))
  1382. #ifdef SIGCHLD
  1383.         return SIGCHLD;
  1384. #else
  1385.         goto not_there;
  1386. #endif
  1387.         if (strEQ(name, "SIGCONT"))
  1388. #ifdef SIGCONT
  1389.         return SIGCONT;
  1390. #else
  1391.         goto not_there;
  1392. #endif
  1393.         if (strEQ(name, "SIGFPE"))
  1394. #ifdef SIGFPE
  1395.         return SIGFPE;
  1396. #else
  1397.         goto not_there;
  1398. #endif
  1399.         if (strEQ(name, "SIGHUP"))
  1400. #ifdef SIGHUP
  1401.         return SIGHUP;
  1402. #else
  1403.         goto not_there;
  1404. #endif
  1405.         if (strEQ(name, "SIGILL"))
  1406. #ifdef SIGILL
  1407.         return SIGILL;
  1408. #else
  1409.         goto not_there;
  1410. #endif
  1411.         if (strEQ(name, "SIGINT"))
  1412. #ifdef SIGINT
  1413.         return SIGINT;
  1414. #else
  1415.         goto not_there;
  1416. #endif
  1417.         if (strEQ(name, "SIGKILL"))
  1418. #ifdef SIGKILL
  1419.         return SIGKILL;
  1420. #else
  1421.         goto not_there;
  1422. #endif
  1423.         if (strEQ(name, "SIGPIPE"))
  1424. #ifdef SIGPIPE
  1425.         return SIGPIPE;
  1426. #else
  1427.         goto not_there;
  1428. #endif
  1429.         if (strEQ(name, "SIGQUIT"))
  1430. #ifdef SIGQUIT
  1431.         return SIGQUIT;
  1432. #else
  1433.         goto not_there;
  1434. #endif
  1435.         if (strEQ(name, "SIGSEGV"))
  1436. #ifdef SIGSEGV
  1437.         return SIGSEGV;
  1438. #else
  1439.         goto not_there;
  1440. #endif
  1441.         if (strEQ(name, "SIGSTOP"))
  1442. #ifdef SIGSTOP
  1443.         return SIGSTOP;
  1444. #else
  1445.         goto not_there;
  1446. #endif
  1447.         if (strEQ(name, "SIGTERM"))
  1448. #ifdef SIGTERM
  1449.         return SIGTERM;
  1450. #else
  1451.         goto not_there;
  1452. #endif
  1453.         if (strEQ(name, "SIGTSTP"))
  1454. #ifdef SIGTSTP
  1455.         return SIGTSTP;
  1456. #else
  1457.         goto not_there;
  1458. #endif
  1459.         if (strEQ(name, "SIGTTIN"))
  1460. #ifdef SIGTTIN
  1461.         return SIGTTIN;
  1462. #else
  1463.         goto not_there;
  1464. #endif
  1465.         if (strEQ(name, "SIGTTOU"))
  1466. #ifdef SIGTTOU
  1467.         return SIGTTOU;
  1468. #else
  1469.         goto not_there;
  1470. #endif
  1471.         if (strEQ(name, "SIGUSR1"))
  1472. #ifdef SIGUSR1
  1473.         return SIGUSR1;
  1474. #else
  1475.         goto not_there;
  1476. #endif
  1477.         if (strEQ(name, "SIGUSR2"))
  1478. #ifdef SIGUSR2
  1479.         return SIGUSR2;
  1480. #else
  1481.         goto not_there;
  1482. #endif
  1483.         break;
  1484.     }
  1485.     if (name[1] == '_') {
  1486. #ifdef S_ISBLK
  1487.         if (strEQ(name, "S_ISBLK")) return S_ISBLK(arg);
  1488. #endif
  1489. #ifdef S_ISCHR
  1490.         if (strEQ(name, "S_ISCHR")) return S_ISCHR(arg);
  1491. #endif
  1492. #ifdef S_ISDIR
  1493.         if (strEQ(name, "S_ISDIR")) return S_ISDIR(arg);
  1494. #endif
  1495. #ifdef S_ISFIFO
  1496.         if (strEQ(name, "S_ISFIFO")) return S_ISFIFO(arg);
  1497. #endif
  1498. #ifdef S_ISREG
  1499.         if (strEQ(name, "S_ISREG")) return S_ISREG(arg);
  1500. #endif
  1501.         if (strEQ(name, "S_ISGID"))
  1502. #ifdef S_ISGID
  1503.         return S_ISGID;
  1504. #else
  1505.         goto not_there;
  1506. #endif
  1507.         if (strEQ(name, "S_ISUID"))
  1508. #ifdef S_ISUID
  1509.         return S_ISUID;
  1510. #else
  1511.         goto not_there;
  1512. #endif
  1513.         if (strEQ(name, "S_IRGRP"))
  1514. #ifdef S_IRGRP
  1515.         return S_IRGRP;
  1516. #else
  1517.         goto not_there;
  1518. #endif
  1519.         if (strEQ(name, "S_IROTH"))
  1520. #ifdef S_IROTH
  1521.         return S_IROTH;
  1522. #else
  1523.         goto not_there;
  1524. #endif
  1525.         if (strEQ(name, "S_IRUSR"))
  1526. #ifdef S_IRUSR
  1527.         return S_IRUSR;
  1528. #else
  1529.         goto not_there;
  1530. #endif
  1531.         if (strEQ(name, "S_IRWXG"))
  1532. #ifdef S_IRWXG
  1533.         return S_IRWXG;
  1534. #else
  1535.         goto not_there;
  1536. #endif
  1537.         if (strEQ(name, "S_IRWXO"))
  1538. #ifdef S_IRWXO
  1539.         return S_IRWXO;
  1540. #else
  1541.         goto not_there;
  1542. #endif
  1543.         if (strEQ(name, "S_IRWXU"))
  1544. #ifdef S_IRWXU
  1545.         return S_IRWXU;
  1546. #else
  1547.         goto not_there;
  1548. #endif
  1549.         if (strEQ(name, "S_IWGRP"))
  1550. #ifdef S_IWGRP
  1551.         return S_IWGRP;
  1552. #else
  1553.         goto not_there;
  1554. #endif
  1555.         if (strEQ(name, "S_IWOTH"))
  1556. #ifdef S_IWOTH
  1557.         return S_IWOTH;
  1558. #else
  1559.         goto not_there;
  1560. #endif
  1561.         if (strEQ(name, "S_IWUSR"))
  1562. #ifdef S_IWUSR
  1563.         return S_IWUSR;
  1564. #else
  1565.         goto not_there;
  1566. #endif
  1567.         if (strEQ(name, "S_IXGRP"))
  1568. #ifdef S_IXGRP
  1569.         return S_IXGRP;
  1570. #else
  1571.         goto not_there;
  1572. #endif
  1573.         if (strEQ(name, "S_IXOTH"))
  1574. #ifdef S_IXOTH
  1575.         return S_IXOTH;
  1576. #else
  1577.         goto not_there;
  1578. #endif
  1579.         if (strEQ(name, "S_IXUSR"))
  1580. #ifdef S_IXUSR
  1581.         return S_IXUSR;
  1582. #else
  1583.         goto not_there;
  1584. #endif
  1585.         break;
  1586.     }
  1587.     if (strEQ(name, "SEEK_CUR"))
  1588. #ifdef SEEK_CUR
  1589.         return SEEK_CUR;
  1590. #else
  1591.         goto not_there;
  1592. #endif
  1593.     if (strEQ(name, "SEEK_END"))
  1594. #ifdef SEEK_END
  1595.         return SEEK_END;
  1596. #else
  1597.         goto not_there;
  1598. #endif
  1599.     if (strEQ(name, "SEEK_SET"))
  1600. #ifdef SEEK_SET
  1601.         return SEEK_SET;
  1602. #else
  1603.         goto not_there;
  1604. #endif
  1605.     if (strEQ(name, "STREAM_MAX"))
  1606. #ifdef STREAM_MAX
  1607.         return STREAM_MAX;
  1608. #else
  1609.         goto not_there;
  1610. #endif
  1611.     if (strEQ(name, "SHRT_MAX"))
  1612. #ifdef SHRT_MAX
  1613.         return SHRT_MAX;
  1614. #else
  1615.         goto not_there;
  1616. #endif
  1617.     if (strEQ(name, "SHRT_MIN"))
  1618. #ifdef SHRT_MIN
  1619.         return SHRT_MIN;
  1620. #else
  1621.         goto not_there;
  1622. #endif
  1623.     if (strEQ(name, "SA_NOCLDSTOP"))
  1624. #ifdef SA_NOCLDSTOP
  1625.         return SA_NOCLDSTOP;
  1626. #else
  1627.         goto not_there;
  1628. #endif
  1629.     if (strEQ(name, "SCHAR_MAX"))
  1630. #ifdef SCHAR_MAX
  1631.         return SCHAR_MAX;
  1632. #else
  1633.         goto not_there;
  1634. #endif
  1635.     if (strEQ(name, "SCHAR_MIN"))
  1636. #ifdef SCHAR_MIN
  1637.         return SCHAR_MIN;
  1638. #else
  1639.         goto not_there;
  1640. #endif
  1641.     if (strEQ(name, "SSIZE_MAX"))
  1642. #ifdef SSIZE_MAX
  1643.         return SSIZE_MAX;
  1644. #else
  1645.         goto not_there;
  1646. #endif
  1647.     if (strEQ(name, "STDIN_FILENO"))
  1648. #ifdef STDIN_FILENO
  1649.         return STDIN_FILENO;
  1650. #else
  1651.         goto not_there;
  1652. #endif
  1653.     if (strEQ(name, "STDOUT_FILENO"))
  1654. #ifdef STDOUT_FILENO
  1655.         return STDOUT_FILENO;
  1656. #else
  1657.         goto not_there;
  1658. #endif
  1659.     if (strEQ(name, "STRERR_FILENO"))
  1660. #ifdef STRERR_FILENO
  1661.         return STRERR_FILENO;
  1662. #else
  1663.         goto not_there;
  1664. #endif
  1665.     break;
  1666.     case 'T':
  1667.     if (strEQ(name, "TCIFLUSH"))
  1668. #ifdef TCIFLUSH
  1669.         return TCIFLUSH;
  1670. #else
  1671.         goto not_there;
  1672. #endif
  1673.     if (strEQ(name, "TCIOFF"))
  1674. #ifdef TCIOFF
  1675.         return TCIOFF;
  1676. #else
  1677.         goto not_there;
  1678. #endif
  1679.     if (strEQ(name, "TCIOFLUSH"))
  1680. #ifdef TCIOFLUSH
  1681.         return TCIOFLUSH;
  1682. #else
  1683.         goto not_there;
  1684. #endif
  1685.     if (strEQ(name, "TCION"))
  1686. #ifdef TCION
  1687.         return TCION;
  1688. #else
  1689.         goto not_there;
  1690. #endif
  1691.     if (strEQ(name, "TCOFLUSH"))
  1692. #ifdef TCOFLUSH
  1693.         return TCOFLUSH;
  1694. #else
  1695.         goto not_there;
  1696. #endif
  1697.     if (strEQ(name, "TCOOFF"))
  1698. #ifdef TCOOFF
  1699.         return TCOOFF;
  1700. #else
  1701.         goto not_there;
  1702. #endif
  1703.     if (strEQ(name, "TCOON"))
  1704. #ifdef TCOON
  1705.         return TCOON;
  1706. #else
  1707.         goto not_there;
  1708. #endif
  1709.     if (strEQ(name, "TCSADRAIN"))
  1710. #ifdef TCSADRAIN
  1711.         return TCSADRAIN;
  1712. #else
  1713.         goto not_there;
  1714. #endif
  1715.     if (strEQ(name, "TCSAFLUSH"))
  1716. #ifdef TCSAFLUSH
  1717.         return TCSAFLUSH;
  1718. #else
  1719.         goto not_there;
  1720. #endif
  1721.     if (strEQ(name, "TCSANOW"))
  1722. #ifdef TCSANOW
  1723.         return TCSANOW;
  1724. #else
  1725.         goto not_there;
  1726. #endif
  1727.     if (strEQ(name, "TMP_MAX"))
  1728. #ifdef TMP_MAX
  1729.         return TMP_MAX;
  1730. #else
  1731.         goto not_there;
  1732. #endif
  1733.     if (strEQ(name, "TOSTOP"))
  1734. #ifdef TOSTOP
  1735.         return TOSTOP;
  1736. #else
  1737.         goto not_there;
  1738. #endif
  1739.     if (strEQ(name, "TZNAME_MAX"))
  1740. #ifdef TZNAME_MAX
  1741.         return TZNAME_MAX;
  1742. #else
  1743.         goto not_there;
  1744. #endif
  1745.     break;
  1746.     case 'U':
  1747.     if (strEQ(name, "UCHAR_MAX"))
  1748. #ifdef UCHAR_MAX
  1749.         return UCHAR_MAX;
  1750. #else
  1751.         goto not_there;
  1752. #endif
  1753.     if (strEQ(name, "UINT_MAX"))
  1754. #ifdef UINT_MAX
  1755.         return UINT_MAX;
  1756. #else
  1757.         goto not_there;
  1758. #endif
  1759.     if (strEQ(name, "ULONG_MAX"))
  1760. #ifdef ULONG_MAX
  1761.         return ULONG_MAX;
  1762. #else
  1763.         goto not_there;
  1764. #endif
  1765.     if (strEQ(name, "USHRT_MAX"))
  1766. #ifdef USHRT_MAX
  1767.         return USHRT_MAX;
  1768. #else
  1769.         goto not_there;
  1770. #endif
  1771.     break;
  1772.     case 'V':
  1773.     if (strEQ(name, "VEOF"))
  1774. #ifdef VEOF
  1775.         return VEOF;
  1776. #else
  1777.         goto not_there;
  1778. #endif
  1779.     if (strEQ(name, "VEOL"))
  1780. #ifdef VEOL
  1781.         return VEOL;
  1782. #else
  1783.         goto not_there;
  1784. #endif
  1785.     if (strEQ(name, "VERASE"))
  1786. #ifdef VERASE
  1787.         return VERASE;
  1788. #else
  1789.         goto not_there;
  1790. #endif
  1791.     if (strEQ(name, "VINTR"))
  1792. #ifdef VINTR
  1793.         return VINTR;
  1794. #else
  1795.         goto not_there;
  1796. #endif
  1797.     if (strEQ(name, "VKILL"))
  1798. #ifdef VKILL
  1799.         return VKILL;
  1800. #else
  1801.         goto not_there;
  1802. #endif
  1803.     if (strEQ(name, "VMIN"))
  1804. #ifdef VMIN
  1805.         return VMIN;
  1806. #else
  1807.         goto not_there;
  1808. #endif
  1809.     if (strEQ(name, "VQUIT"))
  1810. #ifdef VQUIT
  1811.         return VQUIT;
  1812. #else
  1813.         goto not_there;
  1814. #endif
  1815.     if (strEQ(name, "VSTART"))
  1816. #ifdef VSTART
  1817.         return VSTART;
  1818. #else
  1819.         goto not_there;
  1820. #endif
  1821.     if (strEQ(name, "VSTOP"))
  1822. #ifdef VSTOP
  1823.         return VSTOP;
  1824. #else
  1825.         goto not_there;
  1826. #endif
  1827.     if (strEQ(name, "VSUSP"))
  1828. #ifdef VSUSP
  1829.         return VSUSP;
  1830. #else
  1831.         goto not_there;
  1832. #endif
  1833.     if (strEQ(name, "VTIME"))
  1834. #ifdef VTIME
  1835.         return VTIME;
  1836. #else
  1837.         goto not_there;
  1838. #endif
  1839.     break;
  1840.     case 'W':
  1841.     if (strEQ(name, "W_OK"))
  1842. #ifdef W_OK
  1843.         return W_OK;
  1844. #else
  1845.         goto not_there;
  1846. #endif
  1847. #ifdef WEXITSTATUS
  1848.     if (strEQ(name, "WEXITSTATUS")) return WEXITSTATUS(arg);
  1849. #endif
  1850. #ifdef WIFEXITED
  1851.     if (strEQ(name, "WIFEXITED")) return WIFEXITED(arg);
  1852. #endif
  1853. #ifdef WIFSIGNALED
  1854.     if (strEQ(name, "WIFSIGNALED")) return WIFSIGNALED(arg);
  1855. #endif
  1856. #ifdef WIFSTOPPED
  1857.     if (strEQ(name, "WIFSTOPPED")) return WIFSTOPPED(arg);
  1858. #endif
  1859.     if (strEQ(name, "WNOHANG"))
  1860. #ifdef WNOHANG
  1861.         return WNOHANG;
  1862. #else
  1863.         goto not_there;
  1864. #endif
  1865. #ifdef WSTOPSIG
  1866.     if (strEQ(name, "WSTOPSIG")) return WSTOPSIG(arg);
  1867. #endif
  1868. #ifdef WTERMSIG
  1869.     if (strEQ(name, "WTERMSIG")) return WTERMSIG(arg);
  1870. #endif
  1871.     if (strEQ(name, "WUNTRACED"))
  1872. #ifdef WUNTRACED
  1873.         return WUNTRACED;
  1874. #else
  1875.         goto not_there;
  1876. #endif
  1877.     break;
  1878.     case 'X':
  1879.     if (strEQ(name, "X_OK"))
  1880. #ifdef X_OK
  1881.         return X_OK;
  1882. #else
  1883.         goto not_there;
  1884. #endif
  1885.     break;
  1886.     case '_':
  1887.     if (strnEQ(name, "_PC_", 4)) {
  1888.         if (strEQ(name, "_PC_CHOWN_RESTRICTED"))
  1889. #ifdef _PC_CHOWN_RESTRICTED
  1890.         return _PC_CHOWN_RESTRICTED;
  1891. #else
  1892.         goto not_there;
  1893. #endif
  1894.         if (strEQ(name, "_PC_LINK_MAX"))
  1895. #ifdef _PC_LINK_MAX
  1896.         return _PC_LINK_MAX;
  1897. #else
  1898.         goto not_there;
  1899. #endif
  1900.         if (strEQ(name, "_PC_MAX_CANON"))
  1901. #ifdef _PC_MAX_CANON
  1902.         return _PC_MAX_CANON;
  1903. #else
  1904.         goto not_there;
  1905. #endif
  1906.         if (strEQ(name, "_PC_MAX_INPUT"))
  1907. #ifdef _PC_MAX_INPUT
  1908.         return _PC_MAX_INPUT;
  1909. #else
  1910.         goto not_there;
  1911. #endif
  1912.         if (strEQ(name, "_PC_NAME_MAX"))
  1913. #ifdef _PC_NAME_MAX
  1914.         return _PC_NAME_MAX;
  1915. #else
  1916.         goto not_there;
  1917. #endif
  1918.         if (strEQ(name, "_PC_NO_TRUNC"))
  1919. #ifdef _PC_NO_TRUNC
  1920.         return _PC_NO_TRUNC;
  1921. #else
  1922.         goto not_there;
  1923. #endif
  1924.         if (strEQ(name, "_PC_PATH_MAX"))
  1925. #ifdef _PC_PATH_MAX
  1926.         return _PC_PATH_MAX;
  1927. #else
  1928.         goto not_there;
  1929. #endif
  1930.         if (strEQ(name, "_PC_PIPE_BUF"))
  1931. #ifdef _PC_PIPE_BUF
  1932.         return _PC_PIPE_BUF;
  1933. #else
  1934.         goto not_there;
  1935. #endif
  1936.         if (strEQ(name, "_PC_VDISABLE"))
  1937. #ifdef _PC_VDISABLE
  1938.         return _PC_VDISABLE;
  1939. #else
  1940.         goto not_there;
  1941. #endif
  1942.         break;
  1943.     }
  1944.     if (strnEQ(name, "_POSIX_", 7)) {
  1945.         if (strEQ(name, "_POSIX_ARG_MAX"))
  1946. #ifdef _POSIX_ARG_MAX
  1947.         return _POSIX_ARG_MAX;
  1948. #else
  1949.         return 0;
  1950. #endif
  1951.         if (strEQ(name, "_POSIX_CHILD_MAX"))
  1952. #ifdef _POSIX_CHILD_MAX
  1953.         return _POSIX_CHILD_MAX;
  1954. #else
  1955.         return 0;
  1956. #endif
  1957.         if (strEQ(name, "_POSIX_CHOWN_RESTRICTED"))
  1958. #ifdef _POSIX_CHOWN_RESTRICTED
  1959.         return _POSIX_CHOWN_RESTRICTED;
  1960. #else
  1961.         return 0;
  1962. #endif
  1963.         if (strEQ(name, "_POSIX_JOB_CONTROL"))
  1964. #ifdef _POSIX_JOB_CONTROL
  1965.         return _POSIX_JOB_CONTROL;
  1966. #else
  1967.         return 0;
  1968. #endif
  1969.         if (strEQ(name, "_POSIX_LINK_MAX"))
  1970. #ifdef _POSIX_LINK_MAX
  1971.         return _POSIX_LINK_MAX;
  1972. #else
  1973.         return 0;
  1974. #endif
  1975.         if (strEQ(name, "_POSIX_MAX_CANON"))
  1976. #ifdef _POSIX_MAX_CANON
  1977.         return _POSIX_MAX_CANON;
  1978. #else
  1979.         return 0;
  1980. #endif
  1981.         if (strEQ(name, "_POSIX_MAX_INPUT"))
  1982. #ifdef _POSIX_MAX_INPUT
  1983.         return _POSIX_MAX_INPUT;
  1984. #else
  1985.         return 0;
  1986. #endif
  1987.         if (strEQ(name, "_POSIX_NAME_MAX"))
  1988. #ifdef _POSIX_NAME_MAX
  1989.         return _POSIX_NAME_MAX;
  1990. #else
  1991.         return 0;
  1992. #endif
  1993.         if (strEQ(name, "_POSIX_NGROUPS_MAX"))
  1994. #ifdef _POSIX_NGROUPS_MAX
  1995.         return _POSIX_NGROUPS_MAX;
  1996. #else
  1997.         return 0;
  1998. #endif
  1999.         if (strEQ(name, "_POSIX_NO_TRUNC"))
  2000. #ifdef _POSIX_NO_TRUNC
  2001.         return _POSIX_NO_TRUNC;
  2002. #else
  2003.         return 0;
  2004. #endif
  2005.         if (strEQ(name, "_POSIX_OPEN_MAX"))
  2006. #ifdef _POSIX_OPEN_MAX
  2007.         return _POSIX_OPEN_MAX;
  2008. #else
  2009.         return 0;
  2010. #endif
  2011.         if (strEQ(name, "_POSIX_PATH_MAX"))
  2012. #ifdef _POSIX_PATH_MAX
  2013.         return _POSIX_PATH_MAX;
  2014. #else
  2015.         return 0;
  2016. #endif
  2017.         if (strEQ(name, "_POSIX_PIPE_BUF"))
  2018. #ifdef _POSIX_PIPE_BUF
  2019.         return _POSIX_PIPE_BUF;
  2020. #else
  2021.         return 0;
  2022. #endif
  2023.         if (strEQ(name, "_POSIX_SAVED_IDS"))
  2024. #ifdef _POSIX_SAVED_IDS
  2025.         return _POSIX_SAVED_IDS;
  2026. #else
  2027.         return 0;
  2028. #endif
  2029.         if (strEQ(name, "_POSIX_SSIZE_MAX"))
  2030. #ifdef _POSIX_SSIZE_MAX
  2031.         return _POSIX_SSIZE_MAX;
  2032. #else
  2033.         return 0;
  2034. #endif
  2035.         if (strEQ(name, "_POSIX_STREAM_MAX"))
  2036. #ifdef _POSIX_STREAM_MAX
  2037.         return _POSIX_STREAM_MAX;
  2038. #else
  2039.         return 0;
  2040. #endif
  2041.         if (strEQ(name, "_POSIX_TZNAME_MAX"))
  2042. #ifdef _POSIX_TZNAME_MAX
  2043.         return _POSIX_TZNAME_MAX;
  2044. #else
  2045.         return 0;
  2046. #endif
  2047.         if (strEQ(name, "_POSIX_VDISABLE"))
  2048. #ifdef _POSIX_VDISABLE
  2049.         return _POSIX_VDISABLE;
  2050. #else
  2051.         return 0;
  2052. #endif
  2053.         if (strEQ(name, "_POSIX_VERSION"))
  2054. #ifdef _POSIX_VERSION
  2055.         return _POSIX_VERSION;
  2056. #else
  2057.         return 0;
  2058. #endif
  2059.         break;
  2060.     }
  2061.     if (strnEQ(name, "_SC_", 4)) {
  2062.         if (strEQ(name, "_SC_ARG_MAX"))
  2063. #ifdef _SC_ARG_MAX
  2064.         return _SC_ARG_MAX;
  2065. #else
  2066.         goto not_there;
  2067. #endif
  2068.         if (strEQ(name, "_SC_CHILD_MAX"))
  2069. #ifdef _SC_CHILD_MAX
  2070.         return _SC_CHILD_MAX;
  2071. #else
  2072.         goto not_there;
  2073. #endif
  2074.         if (strEQ(name, "_SC_CLK_TCK"))
  2075. #ifdef _SC_CLK_TCK
  2076.         return _SC_CLK_TCK;
  2077. #else
  2078.         goto not_there;
  2079. #endif
  2080.         if (strEQ(name, "_SC_JOB_CONTROL"))
  2081. #ifdef _SC_JOB_CONTROL
  2082.         return _SC_JOB_CONTROL;
  2083. #else
  2084.         goto not_there;
  2085. #endif
  2086.         if (strEQ(name, "_SC_NGROUPS_MAX"))
  2087. #ifdef _SC_NGROUPS_MAX
  2088.         return _SC_NGROUPS_MAX;
  2089. #else
  2090.         goto not_there;
  2091. #endif
  2092.         if (strEQ(name, "_SC_OPEN_MAX"))
  2093. #ifdef _SC_OPEN_MAX
  2094.         return _SC_OPEN_MAX;
  2095. #else
  2096.         goto not_there;
  2097. #endif
  2098.         if (strEQ(name, "_SC_SAVED_IDS"))
  2099. #ifdef _SC_SAVED_IDS
  2100.         return _SC_SAVED_IDS;
  2101. #else
  2102.         goto not_there;
  2103. #endif
  2104.         if (strEQ(name, "_SC_STREAM_MAX"))
  2105. #ifdef _SC_STREAM_MAX
  2106.         return _SC_STREAM_MAX;
  2107. #else
  2108.         goto not_there;
  2109. #endif
  2110.         if (strEQ(name, "_SC_TZNAME_MAX"))
  2111. #ifdef _SC_TZNAME_MAX
  2112.         return _SC_TZNAME_MAX;
  2113. #else
  2114.         goto not_there;
  2115. #endif
  2116.         if (strEQ(name, "_SC_VERSION"))
  2117. #ifdef _SC_VERSION
  2118.         return _SC_VERSION;
  2119. #else
  2120.         goto not_there;
  2121. #endif
  2122.         break;
  2123.     }
  2124.     if (strEQ(name, "_IOFBF"))
  2125. #ifdef _IOFBF
  2126.         return _IOFBF;
  2127. #else
  2128.         goto not_there;
  2129. #endif
  2130.     if (strEQ(name, "_IOLBF"))
  2131. #ifdef _IOLBF
  2132.         return _IOLBF;
  2133. #else
  2134.         goto not_there;
  2135. #endif
  2136.     if (strEQ(name, "_IONBF"))
  2137. #ifdef _IONBF
  2138.         return _IONBF;
  2139. #else
  2140.         goto not_there;
  2141. #endif
  2142.     break;
  2143.     }
  2144.     errno = EINVAL;
  2145.     return 0;
  2146.  
  2147. not_there:
  2148.     errno = ENOENT;
  2149.     return 0;
  2150. }
  2151.  
  2152. MODULE = SigSet        PACKAGE = POSIX::SigSet        PREFIX = sig
  2153.  
  2154. POSIX::SigSet
  2155. new(packname = "POSIX::SigSet", ...)
  2156.     char *        packname
  2157.     CODE:
  2158.     {
  2159.         int i;
  2160.         RETVAL = (sigset_t*)safemalloc(sizeof(sigset_t));
  2161.         sigemptyset(RETVAL);
  2162.         for (i = 1; i < items; i++)
  2163.         sigaddset(RETVAL, SvIV(ST(i)));
  2164.     }
  2165.     OUTPUT:
  2166.     RETVAL
  2167.  
  2168. void
  2169. DESTROY(sigset)
  2170.     POSIX::SigSet    sigset
  2171.     CODE:
  2172.     safefree((char *)sigset);
  2173.  
  2174. SysRet
  2175. sigaddset(sigset, sig)
  2176.     POSIX::SigSet    sigset
  2177.     int        sig
  2178.  
  2179. SysRet
  2180. sigdelset(sigset, sig)
  2181.     POSIX::SigSet    sigset
  2182.     int        sig
  2183.  
  2184. SysRet
  2185. sigemptyset(sigset)
  2186.     POSIX::SigSet    sigset
  2187.  
  2188. SysRet
  2189. sigfillset(sigset)
  2190.     POSIX::SigSet    sigset
  2191.  
  2192. int
  2193. sigismember(sigset, sig)
  2194.     POSIX::SigSet    sigset
  2195.     int        sig
  2196.  
  2197.  
  2198. MODULE = Termios    PACKAGE = POSIX::Termios    PREFIX = cf
  2199.  
  2200. POSIX::Termios
  2201. new(packname = "POSIX::Termios", ...)
  2202.     char *        packname
  2203.     CODE:
  2204.     {
  2205. #ifdef I_TERMIOS
  2206.         RETVAL = (struct termios*)safemalloc(sizeof(struct termios));
  2207. #else
  2208.         not_here("termios");
  2209. #endif
  2210.     }
  2211.     OUTPUT:
  2212.     RETVAL
  2213.  
  2214. void
  2215. DESTROY(termios_ref)
  2216.     POSIX::Termios    termios_ref
  2217.     CODE:
  2218. #ifdef I_TERMIOS
  2219.     safefree((char *)termios_ref);
  2220. #else
  2221.         not_here("termios");
  2222. #endif
  2223.  
  2224. SysRet
  2225. getattr(termios_ref, fd = 0)
  2226.     POSIX::Termios    termios_ref
  2227.     int        fd
  2228.     CODE:
  2229.     RETVAL = tcgetattr(fd, termios_ref);
  2230.     OUTPUT:
  2231.     RETVAL
  2232.  
  2233. SysRet
  2234. setattr(termios_ref, fd = 0, optional_actions = 0)
  2235.     POSIX::Termios    termios_ref
  2236.     int        fd
  2237.     int        optional_actions
  2238.     CODE:
  2239.     RETVAL = tcsetattr(fd, optional_actions, termios_ref);
  2240.     OUTPUT:
  2241.     RETVAL
  2242.  
  2243. speed_t
  2244. cfgetispeed(termios_ref)
  2245.     POSIX::Termios    termios_ref
  2246.  
  2247. speed_t
  2248. cfgetospeed(termios_ref)
  2249.     POSIX::Termios    termios_ref
  2250.  
  2251. tcflag_t
  2252. getiflag(termios_ref)
  2253.     POSIX::Termios    termios_ref
  2254.     CODE:
  2255. #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
  2256.     RETVAL = termios_ref->c_iflag;
  2257. #else
  2258.         not_here("getiflag");
  2259. #endif
  2260.     OUTPUT:
  2261.     RETVAL
  2262.  
  2263. tcflag_t
  2264. getoflag(termios_ref)
  2265.     POSIX::Termios    termios_ref
  2266.     CODE:
  2267. #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
  2268.     RETVAL = termios_ref->c_oflag;
  2269. #else
  2270.         not_here("getoflag");
  2271. #endif
  2272.     OUTPUT:
  2273.     RETVAL
  2274.  
  2275. tcflag_t
  2276. getcflag(termios_ref)
  2277.     POSIX::Termios    termios_ref
  2278.     CODE:
  2279. #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
  2280.     RETVAL = termios_ref->c_cflag;
  2281. #else
  2282.         not_here("getcflag");
  2283. #endif
  2284.     OUTPUT:
  2285.     RETVAL
  2286.  
  2287. tcflag_t
  2288. getlflag(termios_ref)
  2289.     POSIX::Termios    termios_ref
  2290.     CODE:
  2291. #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
  2292.     RETVAL = termios_ref->c_lflag;
  2293. #else
  2294.         not_here("getlflag");
  2295. #endif
  2296.     OUTPUT:
  2297.     RETVAL
  2298.  
  2299. cc_t
  2300. getcc(termios_ref, ccix)
  2301.     POSIX::Termios    termios_ref
  2302.     int        ccix
  2303.     CODE:
  2304. #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
  2305.     if (ccix >= NCCS)
  2306.         croak("Bad getcc subscript");
  2307.     RETVAL = termios_ref->c_cc[ccix];
  2308. #else
  2309.         not_here("getcc");
  2310. #endif
  2311.     OUTPUT:
  2312.     RETVAL
  2313.  
  2314. SysRet
  2315. cfsetispeed(termios_ref, speed)
  2316.     POSIX::Termios    termios_ref
  2317.     speed_t        speed
  2318.  
  2319. SysRet
  2320. cfsetospeed(termios_ref, speed)
  2321.     POSIX::Termios    termios_ref
  2322.     speed_t        speed
  2323.  
  2324. void
  2325. setiflag(termios_ref, iflag)
  2326.     POSIX::Termios    termios_ref
  2327.     tcflag_t    iflag
  2328.     CODE:
  2329. #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
  2330.     termios_ref->c_iflag = iflag;
  2331. #else
  2332.         not_here("setiflag");
  2333. #endif
  2334.  
  2335. void
  2336. setoflag(termios_ref, oflag)
  2337.     POSIX::Termios    termios_ref
  2338.     tcflag_t    oflag
  2339.     CODE:
  2340. #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
  2341.     termios_ref->c_oflag = oflag;
  2342. #else
  2343.         not_here("setoflag");
  2344. #endif
  2345.  
  2346. void
  2347. setcflag(termios_ref, cflag)
  2348.     POSIX::Termios    termios_ref
  2349.     tcflag_t    cflag
  2350.     CODE:
  2351. #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
  2352.     termios_ref->c_cflag = cflag;
  2353. #else
  2354.         not_here("setcflag");
  2355. #endif
  2356.  
  2357. void
  2358. setlflag(termios_ref, lflag)
  2359.     POSIX::Termios    termios_ref
  2360.     tcflag_t    lflag
  2361.     CODE:
  2362. #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
  2363.     termios_ref->c_lflag = lflag;
  2364. #else
  2365.         not_here("setlflag");
  2366. #endif
  2367.  
  2368. void
  2369. setcc(termios_ref, ccix, cc)
  2370.     POSIX::Termios    termios_ref
  2371.     int        ccix
  2372.     cc_t        cc
  2373.     CODE:
  2374. #ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
  2375.     if (ccix >= NCCS)
  2376.         croak("Bad setcc subscript");
  2377.     termios_ref->c_cc[ccix] = cc;
  2378. #else
  2379.         not_here("setcc");
  2380. #endif
  2381.  
  2382.  
  2383.  
  2384. MODULE = FileHandle    PACKAGE = FileHandle    PREFIX = f
  2385.  
  2386. SV *
  2387. fgetpos(handle)
  2388.     InputStream    handle
  2389.     CODE:
  2390.     {
  2391.         Fpos_t pos;
  2392.         fgetpos(handle, &pos);
  2393.         ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t)));
  2394.     }
  2395.  
  2396. SysRet
  2397. fsetpos(handle, pos)
  2398.     InputStream    handle
  2399.     SV *        pos
  2400.     CODE:
  2401.     RETVAL = fsetpos(handle, (Fpos_t*)SvPVX(pos));
  2402.     OUTPUT:
  2403.     RETVAL
  2404.  
  2405. int
  2406. ungetc(handle, c)
  2407.     InputStream    handle
  2408.     int        c
  2409.     CODE:
  2410.     RETVAL = ungetc(c, handle);
  2411.     OUTPUT:
  2412.     RETVAL
  2413.  
  2414. OutputStream
  2415. new_tmpfile(packname = "FileHandle")
  2416.     char *        packname
  2417.     CODE:
  2418.     RETVAL = tmpfile();
  2419.     OUTPUT:
  2420.     RETVAL
  2421.  
  2422. int
  2423. ferror(handle)
  2424.     InputStream    handle
  2425.  
  2426. SysRet
  2427. fflush(handle)
  2428.     OutputStream    handle
  2429.  
  2430. void
  2431. setbuf(handle, buf)
  2432.     OutputStream    handle
  2433.     char *        buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0;
  2434.  
  2435. SysRet
  2436. setvbuf(handle, buf, type, size)
  2437.     OutputStream    handle
  2438.     char *        buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
  2439.     int        type
  2440.     int        size
  2441.  
  2442. MODULE = POSIX        PACKAGE = POSIX
  2443.  
  2444. double
  2445. constant(name,arg)
  2446.     char *        name
  2447.     int        arg
  2448.  
  2449. int
  2450. isalnum(charstring)
  2451.     char *        charstring
  2452.     CODE:
  2453.     char *s;
  2454.     RETVAL = 1;
  2455.     for (s = charstring; *s && RETVAL; s++)
  2456.         if (!isalnum(*s))
  2457.         RETVAL = 0;
  2458.     OUTPUT:
  2459.     RETVAL
  2460.  
  2461. int
  2462. isalpha(charstring)
  2463.     char *        charstring
  2464.     CODE:
  2465.     char *s;
  2466.     RETVAL = 1;
  2467.     for (s = charstring; *s && RETVAL; s++)
  2468.         if (!isalpha(*s))
  2469.         RETVAL = 0;
  2470.     OUTPUT:
  2471.     RETVAL
  2472.  
  2473. int
  2474. iscntrl(charstring)
  2475.     char *        charstring
  2476.     CODE:
  2477.     char *s;
  2478.     RETVAL = 1;
  2479.     for (s = charstring; *s && RETVAL; s++)
  2480.         if (!iscntrl(*s))
  2481.         RETVAL = 0;
  2482.     OUTPUT:
  2483.     RETVAL
  2484.  
  2485. int
  2486. isdigit(charstring)
  2487.     char *        charstring
  2488.     CODE:
  2489.     char *s;
  2490.     RETVAL = 1;
  2491.     for (s = charstring; *s && RETVAL; s++)
  2492.         if (!isdigit(*s))
  2493.         RETVAL = 0;
  2494.     OUTPUT:
  2495.     RETVAL
  2496.  
  2497. int
  2498. isgraph(charstring)
  2499.     char *        charstring
  2500.     CODE:
  2501.     char *s;
  2502.     RETVAL = 1;
  2503.     for (s = charstring; *s && RETVAL; s++)
  2504.         if (!isgraph(*s))
  2505.         RETVAL = 0;
  2506.     OUTPUT:
  2507.     RETVAL
  2508.  
  2509. int
  2510. islower(charstring)
  2511.     char *        charstring
  2512.     CODE:
  2513.     char *s;
  2514.     RETVAL = 1;
  2515.     for (s = charstring; *s && RETVAL; s++)
  2516.         if (!islower(*s))
  2517.         RETVAL = 0;
  2518.     OUTPUT:
  2519.     RETVAL
  2520.  
  2521. int
  2522. isprint(charstring)
  2523.     char *        charstring
  2524.     CODE:
  2525.     char *s;
  2526.     RETVAL = 1;
  2527.     for (s = charstring; *s && RETVAL; s++)
  2528.         if (!isprint(*s))
  2529.         RETVAL = 0;
  2530.     OUTPUT:
  2531.     RETVAL
  2532.  
  2533. int
  2534. ispunct(charstring)
  2535.     char *        charstring
  2536.     CODE:
  2537.     char *s;
  2538.     RETVAL = 1;
  2539.     for (s = charstring; *s && RETVAL; s++)
  2540.         if (!ispunct(*s))
  2541.         RETVAL = 0;
  2542.     OUTPUT:
  2543.     RETVAL
  2544.  
  2545. int
  2546. isspace(charstring)
  2547.     char *        charstring
  2548.     CODE:
  2549.     char *s;
  2550.     RETVAL = 1;
  2551.     for (s = charstring; *s && RETVAL; s++)
  2552.         if (!isspace(*s))
  2553.         RETVAL = 0;
  2554.     OUTPUT:
  2555.     RETVAL
  2556.  
  2557. int
  2558. isupper(charstring)
  2559.     char *        charstring
  2560.     CODE:
  2561.     char *s;
  2562.     RETVAL = 1;
  2563.     for (s = charstring; *s && RETVAL; s++)
  2564.         if (!isupper(*s))
  2565.         RETVAL = 0;
  2566.     OUTPUT:
  2567.     RETVAL
  2568.  
  2569. int
  2570. isxdigit(charstring)
  2571.     char *        charstring
  2572.     CODE:
  2573.     char *s;
  2574.     RETVAL = 1;
  2575.     for (s = charstring; *s && RETVAL; s++)
  2576.         if (!isxdigit(*s))
  2577.         RETVAL = 0;
  2578.     OUTPUT:
  2579.     RETVAL
  2580.  
  2581. SysRet
  2582. open(filename, flags = O_RDONLY, mode = 0666)
  2583.     char *        filename
  2584.     int        flags
  2585.     Mode_t        mode
  2586.     CODE:
  2587.     if (flags & (O_APPEND|O_CREAT|O_TRUNC|O_RDWR|O_WRONLY|O_EXCL))
  2588.         TAINT_PROPER("open");
  2589.     RETVAL = open(filename, flags, mode);
  2590.     OUTPUT:
  2591.     RETVAL
  2592.  
  2593.  
  2594. HV *
  2595. localeconv()
  2596.     CODE:
  2597. #ifdef HAS_LOCALECONV
  2598.     struct lconv *lcbuf;
  2599.     RETVAL = newHV();
  2600.     if (lcbuf = localeconv()) {
  2601.         /* the strings */
  2602.         if (lcbuf->decimal_point && *lcbuf->decimal_point)
  2603.         hv_store(RETVAL, "decimal_point", 13,
  2604.             newSVpv(lcbuf->decimal_point, 0), 0);
  2605.         if (lcbuf->thousands_sep && *lcbuf->thousands_sep)
  2606.         hv_store(RETVAL, "thousands_sep", 13,
  2607.             newSVpv(lcbuf->thousands_sep, 0), 0);
  2608.         if (lcbuf->grouping && *lcbuf->grouping)
  2609.         hv_store(RETVAL, "grouping", 8,
  2610.             newSVpv(lcbuf->grouping, 0), 0);
  2611.         if (lcbuf->int_curr_symbol && *lcbuf->int_curr_symbol)
  2612.         hv_store(RETVAL, "int_curr_symbol", 15,
  2613.             newSVpv(lcbuf->int_curr_symbol, 0), 0);
  2614.         if (lcbuf->currency_symbol && *lcbuf->currency_symbol)
  2615.         hv_store(RETVAL, "currency_symbol", 15,
  2616.             newSVpv(lcbuf->currency_symbol, 0), 0);
  2617.         if (lcbuf->mon_decimal_point && *lcbuf->mon_decimal_point)
  2618.         hv_store(RETVAL, "mon_decimal_point", 17,
  2619.             newSVpv(lcbuf->mon_decimal_point, 0), 0);
  2620.         if (lcbuf->mon_thousands_sep && *lcbuf->mon_thousands_sep)
  2621.         hv_store(RETVAL, "mon_thousands_sep", 17,
  2622.             newSVpv(lcbuf->mon_thousands_sep, 0), 0);
  2623.         if (lcbuf->mon_grouping && *lcbuf->mon_grouping)
  2624.         hv_store(RETVAL, "mon_grouping", 12,
  2625.             newSVpv(lcbuf->mon_grouping, 0), 0);
  2626.         if (lcbuf->positive_sign && *lcbuf->positive_sign)
  2627.         hv_store(RETVAL, "positive_sign", 13,
  2628.             newSVpv(lcbuf->positive_sign, 0), 0);
  2629.         if (lcbuf->negative_sign && *lcbuf->negative_sign)
  2630.         hv_store(RETVAL, "negative_sign", 13,
  2631.             newSVpv(lcbuf->negative_sign, 0), 0);
  2632.         /* the integers */
  2633.         if (lcbuf->int_frac_digits != CHAR_MAX)
  2634.         hv_store(RETVAL, "int_frac_digits", 15,
  2635.             newSViv(lcbuf->int_frac_digits), 0);
  2636.         if (lcbuf->frac_digits != CHAR_MAX)
  2637.         hv_store(RETVAL, "frac_digits", 11,
  2638.             newSViv(lcbuf->frac_digits), 0);
  2639.         if (lcbuf->p_cs_precedes != CHAR_MAX)
  2640.         hv_store(RETVAL, "p_cs_precedes", 13,
  2641.             newSViv(lcbuf->p_cs_precedes), 0);
  2642.         if (lcbuf->p_sep_by_space != CHAR_MAX)
  2643.         hv_store(RETVAL, "p_sep_by_space", 14,
  2644.             newSViv(lcbuf->p_sep_by_space), 0);
  2645.         if (lcbuf->n_cs_precedes != CHAR_MAX)
  2646.         hv_store(RETVAL, "n_cs_precedes", 13,
  2647.             newSViv(lcbuf->n_cs_precedes), 0);
  2648.         if (lcbuf->n_sep_by_space != CHAR_MAX)
  2649.         hv_store(RETVAL, "n_sep_by_space", 14,
  2650.             newSViv(lcbuf->n_sep_by_space), 0);
  2651.         if (lcbuf->p_sign_posn != CHAR_MAX)
  2652.         hv_store(RETVAL, "p_sign_posn", 11,
  2653.             newSViv(lcbuf->p_sign_posn), 0);
  2654.         if (lcbuf->n_sign_posn != CHAR_MAX)
  2655.         hv_store(RETVAL, "n_sign_posn", 11,
  2656.             newSViv(lcbuf->n_sign_posn), 0);
  2657.     }
  2658. #else
  2659.     localeconv(); /* A stub to call not_here(). */
  2660. #endif
  2661.     OUTPUT:
  2662.     RETVAL
  2663.  
  2664. char *
  2665. setlocale(category, locale)
  2666.     int        category
  2667.     char *        locale
  2668.  
  2669. double
  2670. acos(x)
  2671.     double        x
  2672.  
  2673. double
  2674. asin(x)
  2675.     double        x
  2676.  
  2677. double
  2678. atan(x)
  2679.     double        x
  2680.  
  2681. double
  2682. ceil(x)
  2683.     double        x
  2684.  
  2685. double
  2686. cosh(x)
  2687.     double        x
  2688.  
  2689. double
  2690. floor(x)
  2691.     double        x
  2692.  
  2693. double
  2694. fmod(x,y)
  2695.     double        x
  2696.     double        y
  2697.  
  2698. void
  2699. frexp(x)
  2700.     double        x
  2701.     PPCODE:
  2702.     int expvar;
  2703.     /* (We already know stack is long enough.) */
  2704.     PUSHs(sv_2mortal(newSVnv(frexp(x,&expvar))));
  2705.     PUSHs(sv_2mortal(newSViv(expvar)));
  2706.  
  2707. double
  2708. ldexp(x,exp)
  2709.     double        x
  2710.     int        exp
  2711.  
  2712. double
  2713. log10(x)
  2714.     double        x
  2715.  
  2716. void
  2717. modf(x)
  2718.     double        x
  2719.     PPCODE:
  2720.     double intvar;
  2721.     /* (We already know stack is long enough.) */
  2722.     PUSHs(sv_2mortal(newSVnv(modf(x,&intvar))));
  2723.     PUSHs(sv_2mortal(newSVnv(intvar)));
  2724.  
  2725. double
  2726. sinh(x)
  2727.     double        x
  2728.  
  2729. double
  2730. tan(x)
  2731.     double        x
  2732.  
  2733. double
  2734. tanh(x)
  2735.     double        x
  2736.  
  2737. SysRet
  2738. sigaction(sig, action, oldaction = 0)
  2739.     int            sig
  2740.     POSIX::SigAction    action
  2741.     POSIX::SigAction    oldaction
  2742.     CODE:
  2743.  
  2744. # This code is really grody because we're trying to make the signal
  2745. # interface look beautiful, which is hard.
  2746.  
  2747.     if (!siggv)
  2748.         gv_fetchpv("SIG", TRUE, SVt_PVHV);
  2749.  
  2750.     {
  2751.         struct sigaction act;
  2752.         struct sigaction oact;
  2753.         POSIX__SigSet sigset;
  2754.         SV** svp;
  2755.         SV** sigsvp = hv_fetch(GvHVn(siggv),
  2756.                  sig_name[sig],
  2757.                  strlen(sig_name[sig]),
  2758.                  TRUE);
  2759.  
  2760.         /* Remember old handler name if desired. */
  2761.         if (oldaction) {
  2762.         char *hand = SvPVx(*sigsvp, na);
  2763.         svp = hv_fetch(oldaction, "HANDLER", 7, TRUE);
  2764.         sv_setpv(*svp, *hand ? hand : "DEFAULT");
  2765.         }
  2766.  
  2767.         if (action) {
  2768.         /* Vector new handler through %SIG.  (We always use sighandler
  2769.            for the C signal handler, which reads %SIG to dispatch.) */
  2770.         svp = hv_fetch(action, "HANDLER", 7, FALSE);
  2771.         if (!svp)
  2772.             croak("Can't supply an action without a HANDLER");
  2773.         sv_setpv(*sigsvp, SvPV(*svp, na));
  2774.         mg_set(*sigsvp);    /* handles DEFAULT and IGNORE */
  2775.         act.sa_handler = sighandler;
  2776.  
  2777.         /* Set up any desired mask. */
  2778.         svp = hv_fetch(action, "MASK", 4, FALSE);
  2779.         if (svp && sv_isa(*svp, "POSIX::SigSet")) {
  2780.             unsigned long tmp;
  2781.             tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
  2782.             sigset = (sigset_t*) tmp;
  2783.             act.sa_mask = *sigset;
  2784.         }
  2785.         else
  2786.             sigemptyset(& act.sa_mask);
  2787.  
  2788.         /* Set up any desired flags. */
  2789.         svp = hv_fetch(action, "FLAGS", 5, FALSE);
  2790.         act.sa_flags = svp ? SvIV(*svp) : 0;
  2791.         }
  2792.  
  2793.         /* Now work around sigaction oddities */
  2794.         if (action && oldaction)
  2795.         RETVAL = sigaction(sig, & act, & oact);
  2796.         else if (action)
  2797.         RETVAL = sigaction(sig, & act, (struct sigaction*)0);
  2798.         else if (oldaction)
  2799.         RETVAL = sigaction(sig, (struct sigaction*)0, & oact);
  2800.         else
  2801.         RETVAL = -1;
  2802.  
  2803.         if (oldaction) {
  2804.         /* Get back the mask. */
  2805.         svp = hv_fetch(oldaction, "MASK", 4, TRUE);
  2806.         if (sv_isa(*svp, "POSIX::SigSet")) {
  2807.             unsigned long tmp;
  2808.             tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
  2809.             sigset = (sigset_t*) tmp;
  2810.         }
  2811.         else {
  2812.             sigset = (sigset_t*)safemalloc(sizeof(sigset_t));
  2813.             sv_setptrobj(*svp, sigset, "POSIX::SigSet");
  2814.         }
  2815.         *sigset = oact.sa_mask;
  2816.  
  2817.         /* Get back the flags. */
  2818.         svp = hv_fetch(oldaction, "FLAGS", 5, TRUE);
  2819.         sv_setiv(*svp, oact.sa_flags);
  2820.         }
  2821.     }
  2822.     OUTPUT:
  2823.     RETVAL
  2824.  
  2825. SysRet
  2826. sigpending(sigset)
  2827.     POSIX::SigSet        sigset
  2828.  
  2829. SysRet
  2830. sigprocmask(how, sigset, oldsigset = 0)
  2831.     int            how
  2832.     POSIX::SigSet        sigset
  2833.     POSIX::SigSet        oldsigset
  2834.  
  2835. SysRet
  2836. sigsuspend(signal_mask)
  2837.     POSIX::SigSet        signal_mask
  2838.  
  2839. void
  2840. _exit(status)
  2841.     int        status
  2842.  
  2843. SysRet
  2844. close(fd)
  2845.     int        fd
  2846.  
  2847. SysRet
  2848. dup(fd)
  2849.     int        fd
  2850.  
  2851. SysRet
  2852. dup2(fd1, fd2)
  2853.     int        fd1
  2854.     int        fd2
  2855.  
  2856. SysRetLong
  2857. lseek(fd, offset, whence)
  2858.     int        fd
  2859.     Off_t        offset
  2860.     int        whence
  2861.  
  2862. SysRet
  2863. nice(incr)
  2864.     int        incr
  2865.  
  2866. int
  2867. pipe()
  2868.     PPCODE:
  2869.     int fds[2];
  2870.     if (pipe(fds) != -1) {
  2871.         EXTEND(sp,2);
  2872.         PUSHs(sv_2mortal(newSViv(fds[0])));
  2873.         PUSHs(sv_2mortal(newSViv(fds[1])));
  2874.     }
  2875.  
  2876. SysRet
  2877. read(fd, buffer, nbytes)
  2878.     int        fd
  2879.     char *        buffer = sv_grow(ST(1),SvIV(ST(2))+1);
  2880.     size_t        nbytes
  2881.     CLEANUP:
  2882.     if (RETVAL >= 0) {
  2883.         SvCUR(ST(1)) = RETVAL;
  2884.         SvPOK_only(ST(1));
  2885.         *SvEND(ST(1)) = '\0';
  2886.         if (tainting)
  2887.         sv_magic(ST(1), 0, 't', 0, 0);
  2888.     }
  2889.  
  2890. SysRet
  2891. setgid(gid)
  2892.     Gid_t        gid
  2893.  
  2894. SysRet
  2895. setpgid(pid, pgid)
  2896.     pid_t        pid
  2897.     pid_t        pgid
  2898.  
  2899. pid_t
  2900. setsid()
  2901.  
  2902. SysRet
  2903. setuid(uid)
  2904.     Uid_t        uid
  2905.  
  2906. pid_t
  2907. tcgetpgrp(fd)
  2908.     int        fd
  2909.  
  2910. SysRet
  2911. tcsetpgrp(fd, pgrp_id)
  2912.     int        fd
  2913.     pid_t        pgrp_id
  2914.  
  2915. int
  2916. uname()
  2917.     PPCODE:
  2918. #ifdef HAS_UNAME
  2919.     struct utsname buf;
  2920.     if (uname(&buf) >= 0) {
  2921.         EXTEND(sp, 5);
  2922.         PUSHs(sv_2mortal(newSVpv(buf.sysname, 0)));
  2923.         PUSHs(sv_2mortal(newSVpv(buf.nodename, 0)));
  2924.         PUSHs(sv_2mortal(newSVpv(buf.release, 0)));
  2925.         PUSHs(sv_2mortal(newSVpv(buf.version, 0)));
  2926.         PUSHs(sv_2mortal(newSVpv(buf.machine, 0)));
  2927.     }
  2928. #else
  2929.     uname((char *) 0); /* A stub to call not_here(). */
  2930. #endif
  2931.  
  2932. SysRet
  2933. write(fd, buffer, nbytes)
  2934.     int        fd
  2935.     char *        buffer
  2936.     size_t        nbytes
  2937.  
  2938. char *
  2939. tmpnam(s = 0)
  2940.     char *        s = 0;
  2941.  
  2942. void
  2943. abort()
  2944.  
  2945. int
  2946. mblen(s, n)
  2947.     char *        s
  2948.     size_t        n
  2949.  
  2950. size_t
  2951. mbstowcs(s, pwcs, n)
  2952.     wchar_t *    s
  2953.     char *        pwcs
  2954.     size_t        n
  2955.  
  2956. int
  2957. mbtowc(pwc, s, n)
  2958.     wchar_t *    pwc
  2959.     char *        s
  2960.     size_t        n
  2961.  
  2962. int
  2963. wcstombs(s, pwcs, n)
  2964.     char *        s
  2965.     wchar_t *    pwcs
  2966.     size_t        n
  2967.  
  2968. int
  2969. wctomb(s, wchar)
  2970.     char *        s
  2971.     wchar_t        wchar
  2972.  
  2973. int
  2974. strcoll(s1, s2)
  2975.     char *        s1
  2976.     char *        s2
  2977.  
  2978. SV *
  2979. strxfrm(src)
  2980.     SV *        src
  2981.     CODE:
  2982.     {
  2983.           STRLEN srclen;
  2984.           STRLEN dstlen;
  2985.           char *p = SvPV(src,srclen);
  2986.           srclen++;
  2987.           ST(0) = sv_2mortal(NEWSV(800,srclen));
  2988.           dstlen = strxfrm(SvPVX(ST(0)), p, (size_t)srclen);
  2989.           if (dstlen > srclen) {
  2990.               dstlen++;
  2991.               SvGROW(ST(0), dstlen);
  2992.               strxfrm(SvPVX(ST(0)), p, (size_t)dstlen);
  2993.               dstlen--;
  2994.           }
  2995.           SvCUR(ST(0)) = dstlen;
  2996.         SvPOK_only(ST(0));
  2997.     }
  2998.  
  2999. SysRet
  3000. mkfifo(filename, mode)
  3001.     char *        filename
  3002.     Mode_t        mode
  3003.     CODE:
  3004.     TAINT_PROPER("mkfifo");
  3005.     RETVAL = mkfifo(filename, mode);
  3006.     OUTPUT:
  3007.     RETVAL
  3008.  
  3009. SysRet
  3010. tcdrain(fd)
  3011.     int        fd
  3012.  
  3013.  
  3014. SysRet
  3015. tcflow(fd, action)
  3016.     int        fd
  3017.     int        action
  3018.  
  3019.  
  3020. SysRet
  3021. tcflush(fd, queue_selector)
  3022.     int        fd
  3023.     int        queue_selector
  3024.  
  3025. SysRet
  3026. tcsendbreak(fd, duration)
  3027.     int        fd
  3028.     int        duration
  3029.  
  3030. char *
  3031. asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
  3032.     int        sec
  3033.     int        min
  3034.     int        hour
  3035.     int        mday
  3036.     int        mon
  3037.     int        year
  3038.     int        wday
  3039.     int        yday
  3040.     int        isdst
  3041.     CODE:
  3042.     {
  3043.         struct tm mytm;
  3044.         mytm.tm_sec = sec;
  3045.         mytm.tm_min = min;
  3046.         mytm.tm_hour = hour;
  3047.         mytm.tm_mday = mday;
  3048.         mytm.tm_mon = mon;
  3049.         mytm.tm_year = year;
  3050.         mytm.tm_wday = wday;
  3051.         mytm.tm_yday = yday;
  3052.         mytm.tm_isdst = isdst;
  3053.         RETVAL = asctime(&mytm);
  3054.     }
  3055.     OUTPUT:
  3056.     RETVAL
  3057.  
  3058. long
  3059. clock()
  3060.  
  3061. char *
  3062. ctime(time)
  3063.     Time_t        &time
  3064.  
  3065. double
  3066. difftime(time1, time2)
  3067.     Time_t        time1
  3068.     Time_t        time2
  3069.  
  3070. SysRetLong
  3071. mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
  3072.     int        sec
  3073.     int        min
  3074.     int        hour
  3075.     int        mday
  3076.     int        mon
  3077.     int        year
  3078.     int        wday
  3079.     int        yday
  3080.     int        isdst
  3081.     CODE:
  3082.     {
  3083.         struct tm mytm;
  3084.         mytm.tm_sec = sec;
  3085.         mytm.tm_min = min;
  3086.         mytm.tm_hour = hour;
  3087.         mytm.tm_mday = mday;
  3088.         mytm.tm_mon = mon;
  3089.         mytm.tm_year = year;
  3090.         mytm.tm_wday = wday;
  3091.         mytm.tm_yday = yday;
  3092.         mytm.tm_isdst = isdst;
  3093.         RETVAL = mktime(&mytm);
  3094.     }
  3095.     OUTPUT:
  3096.     RETVAL
  3097.  
  3098. char *
  3099. strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
  3100.     char *        fmt
  3101.     int        sec
  3102.     int        min
  3103.     int        hour
  3104.     int        mday
  3105.     int        mon
  3106.     int        year
  3107.     int        wday
  3108.     int        yday
  3109.     int        isdst
  3110.     CODE:
  3111.     {
  3112.         char tmpbuf[128];
  3113.         struct tm mytm;
  3114.         int len;
  3115.         mytm.tm_sec = sec;
  3116.         mytm.tm_min = min;
  3117.         mytm.tm_hour = hour;
  3118.         mytm.tm_mday = mday;
  3119.         mytm.tm_mon = mon;
  3120.         mytm.tm_year = year;
  3121.         mytm.tm_wday = wday;
  3122.         mytm.tm_yday = yday;
  3123.         mytm.tm_isdst = isdst;
  3124.         len = strftime(tmpbuf, sizeof tmpbuf, fmt, &mytm);
  3125.         ST(0) = sv_2mortal(newSVpv(tmpbuf, len));
  3126.     }
  3127.  
  3128. void
  3129. tzset()
  3130.  
  3131. void
  3132. tzname()
  3133.     PPCODE:
  3134.     EXTEND(sp,2);
  3135.     PUSHs(sv_2mortal(newSVpv(tzname[0],strlen(tzname[0]))));
  3136.     PUSHs(sv_2mortal(newSVpv(tzname[1],strlen(tzname[1]))));
  3137.  
  3138. SysRet
  3139. access(filename, mode)
  3140.     char *        filename
  3141.     Mode_t        mode
  3142.  
  3143. char *
  3144. ctermid(s = 0)
  3145.     char *        s = 0;
  3146.  
  3147. char *
  3148. cuserid(s = 0)
  3149.     char *        s = 0;
  3150.  
  3151. SysRetLong
  3152. fpathconf(fd, name)
  3153.     int        fd
  3154.     int        name
  3155.  
  3156. SysRetLong
  3157. pathconf(filename, name)
  3158.     char *        filename
  3159.     int        name
  3160.  
  3161. SysRet
  3162. pause()
  3163.  
  3164. SysRetLong
  3165. sysconf(name)
  3166.     int        name
  3167.  
  3168. char *
  3169. ttyname(fd)
  3170.     int        fd
  3171.