This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl5.000 patch.0o: [address] a few more Configure and build nits.
[perl5.git] / ext / POSIX / POSIX.xs
CommitLineData
463ee0b2
LW
1#include "EXTERN.h"
2#include "perl.h"
3#include "XSUB.h"
2304df62 4#include <ctype.h>
a0d0e21e 5#ifdef I_DIRENT /* XXX maybe better to just rely on perl.h? */
2304df62 6#include <dirent.h>
a0d0e21e 7#endif
2304df62
AD
8#include <errno.h>
9#include <fcntl.h>
10#ifdef I_FLOAT
11#include <float.h>
12#endif
13#include <grp.h>
a0d0e21e 14#ifdef I_LIMITS
2304df62 15#include <limits.h>
a0d0e21e 16#endif
2304df62
AD
17#include <locale.h>
18#include <math.h>
85e6fe83 19#ifdef I_PWD
2304df62 20#include <pwd.h>
85e6fe83 21#endif
2304df62
AD
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
a0d0e21e
LW
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
2304df62 37#include <stdio.h>
a0d0e21e 38#ifdef I_STDLIB
2304df62 39#include <stdlib.h>
a0d0e21e 40#endif
2304df62
AD
41#include <string.h>
42#include <sys/stat.h>
43#include <sys/times.h>
44#include <sys/types.h>
a0d0e21e 45#ifdef HAS_UNAME
8990e307 46#include <sys/utsname.h>
2304df62 47#endif
a0d0e21e 48#include <sys/wait.h>
2304df62
AD
49#include <time.h>
50#include <unistd.h>
a0d0e21e 51#ifdef I_UTIME
2304df62 52#include <utime.h>
a0d0e21e 53#endif
2304df62 54
a0d0e21e
LW
55typedef FILE * InputStream;
56typedef FILE * OutputStream;
2304df62 57typedef int SysRet;
a0d0e21e 58typedef long SysRetLong;
2304df62
AD
59typedef sigset_t* POSIX__SigSet;
60typedef HV* POSIX__SigAction;
a0d0e21e
LW
61#ifdef I_TERMIOS
62typedef 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 */
82char *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")
8990e307
LW
97#endif
98#ifndef HAS_NICE
99#define nice(a) not_here("nice")
100#endif
a0d0e21e
LW
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
8990e307
LW
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
8990e307
LW
113#ifndef HAS_SETSID
114#define setsid() not_here("setsid")
115#endif
a0d0e21e
LW
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")
8990e307
LW
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
a0d0e21e
LW
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
178extern char *tzname[];
179#else
180char *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
8990e307
LW
195static int
196not_here(s)
197char *s;
198{
199 croak("POSIX::%s not implemented on this architecture", s);
200 return -1;
201}
463ee0b2 202
a0d0e21e
LW
203static double
204constant(name, arg)
2304df62
AD
205char *name;
206int 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 }
40000a8c
AD
911 if (strEQ(name, "FD_CLOEXEC"))
912#ifdef FD_CLOEXEC
913 return FD_CLOEXEC;
914#else
915 goto not_there;
916#endif
2304df62
AD
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':
a0d0e21e 1188 if (strEQ(name, "NULL")) return 0;
2304df62
AD
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
2147not_there:
2148 errno = ENOENT;
2149 return 0;
2150}
2151
2152MODULE = SigSet PACKAGE = POSIX::SigSet PREFIX = sig
2153
2154POSIX::SigSet
2155new(packname = "POSIX::SigSet", ...)
2156 char * packname
2157 CODE:
2158 {
2159 int i;
2160 RETVAL = (sigset_t*)safemalloc(sizeof(sigset_t));
2161 sigemptyset(RETVAL);
a0d0e21e 2162 for (i = 1; i < items; i++)
2304df62
AD
2163 sigaddset(RETVAL, SvIV(ST(i)));
2164 }
2165 OUTPUT:
2166 RETVAL
463ee0b2 2167
8990e307 2168void
2304df62
AD
2169DESTROY(sigset)
2170 POSIX::SigSet sigset
2171 CODE:
a0d0e21e 2172 safefree((char *)sigset);
2304df62
AD
2173
2174SysRet
2175sigaddset(sigset, sig)
2176 POSIX::SigSet sigset
2177 int sig
2178
2179SysRet
2180sigdelset(sigset, sig)
2181 POSIX::SigSet sigset
2182 int sig
2183
2184SysRet
2185sigemptyset(sigset)
2186 POSIX::SigSet sigset
2187
2188SysRet
2189sigfillset(sigset)
2190 POSIX::SigSet sigset
2191
2192int
2193sigismember(sigset, sig)
2194 POSIX::SigSet sigset
2195 int sig
2196
2197
a0d0e21e
LW
2198MODULE = Termios PACKAGE = POSIX::Termios PREFIX = cf
2199
2200POSIX::Termios
2201new(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
2214void
2215DESTROY(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
2224SysRet
2225getattr(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
2233SysRet
2234setattr(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
2243speed_t
2244cfgetispeed(termios_ref)
2245 POSIX::Termios termios_ref
2246
2247speed_t
2248cfgetospeed(termios_ref)
2249 POSIX::Termios termios_ref
2250
2251tcflag_t
2252getiflag(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
2263tcflag_t
2264getoflag(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
2275tcflag_t
2276getcflag(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
2287tcflag_t
2288getlflag(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
2299cc_t
2300getcc(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
2314SysRet
2315cfsetispeed(termios_ref, speed)
2316 POSIX::Termios termios_ref
2317 speed_t speed
2318
2319SysRet
2320cfsetospeed(termios_ref, speed)
2321 POSIX::Termios termios_ref
2322 speed_t speed
2323
2324void
2325setiflag(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
2335void
2336setoflag(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
2346void
2347setcflag(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
2357void
2358setlflag(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
2368void
2369setcc(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
2384MODULE = FileHandle PACKAGE = FileHandle PREFIX = f
2385
2386SV *
2387fgetpos(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
2396SysRet
2397fsetpos(handle, pos)
2398 InputStream handle
2399 SV * pos
2400 CODE:
2401 RETVAL = fsetpos(handle, (Fpos_t*)SvPVX(pos));
2402 OUTPUT:
2403 RETVAL
2404
2405int
2406ungetc(handle, c)
2407 InputStream handle
2408 int c
2409 CODE:
2410 RETVAL = ungetc(c, handle);
2411 OUTPUT:
2412 RETVAL
2413
2414OutputStream
2415new_tmpfile()
2416 CODE:
2417 RETVAL = tmpfile();
2418 OUTPUT:
2419 RETVAL
2304df62
AD
2420
2421int
a0d0e21e
LW
2422ferror(handle)
2423 InputStream handle
2424
2425SysRet
2426fflush(handle)
2427 OutputStream handle
2428
2429void
2430setbuf(handle, buf)
2431 OutputStream handle
2432 char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0;
2433
2434SysRet
2435setvbuf(handle, buf, type, size)
2436 OutputStream handle
2437 char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
2438 int type
2439 int size
2440
2441MODULE = POSIX PACKAGE = POSIX
2442
2443double
2304df62
AD
2444constant(name,arg)
2445 char * name
2446 int arg
2447
2448int
2449isalnum(charstring)
2450 char * charstring
2451 CODE:
2452 char *s;
2453 RETVAL = 1;
85e6fe83 2454 for (s = charstring; *s && RETVAL; s++)
2304df62
AD
2455 if (!isalnum(*s))
2456 RETVAL = 0;
2457 OUTPUT:
2458 RETVAL
2459
2460int
2461isalpha(charstring)
2462 char * charstring
2463 CODE:
2464 char *s;
2465 RETVAL = 1;
85e6fe83 2466 for (s = charstring; *s && RETVAL; s++)
2304df62
AD
2467 if (!isalpha(*s))
2468 RETVAL = 0;
2469 OUTPUT:
2470 RETVAL
2471
2472int
2473iscntrl(charstring)
2474 char * charstring
2475 CODE:
2476 char *s;
2477 RETVAL = 1;
85e6fe83 2478 for (s = charstring; *s && RETVAL; s++)
2304df62
AD
2479 if (!iscntrl(*s))
2480 RETVAL = 0;
2481 OUTPUT:
2482 RETVAL
2483
2484int
2485isdigit(charstring)
2486 char * charstring
2487 CODE:
2488 char *s;
2489 RETVAL = 1;
85e6fe83 2490 for (s = charstring; *s && RETVAL; s++)
2304df62
AD
2491 if (!isdigit(*s))
2492 RETVAL = 0;
2493 OUTPUT:
2494 RETVAL
2495
2496int
2497isgraph(charstring)
2498 char * charstring
2499 CODE:
2500 char *s;
2501 RETVAL = 1;
85e6fe83 2502 for (s = charstring; *s && RETVAL; s++)
2304df62
AD
2503 if (!isgraph(*s))
2504 RETVAL = 0;
2505 OUTPUT:
2506 RETVAL
2507
2508int
2509islower(charstring)
2510 char * charstring
2511 CODE:
2512 char *s;
2513 RETVAL = 1;
85e6fe83 2514 for (s = charstring; *s && RETVAL; s++)
2304df62
AD
2515 if (!islower(*s))
2516 RETVAL = 0;
2517 OUTPUT:
2518 RETVAL
2519
2520int
2521isprint(charstring)
2522 char * charstring
2523 CODE:
2524 char *s;
2525 RETVAL = 1;
85e6fe83 2526 for (s = charstring; *s && RETVAL; s++)
2304df62
AD
2527 if (!isprint(*s))
2528 RETVAL = 0;
2529 OUTPUT:
2530 RETVAL
2531
2532int
2533ispunct(charstring)
2534 char * charstring
2535 CODE:
2536 char *s;
2537 RETVAL = 1;
85e6fe83 2538 for (s = charstring; *s && RETVAL; s++)
2304df62
AD
2539 if (!ispunct(*s))
2540 RETVAL = 0;
2541 OUTPUT:
2542 RETVAL
2543
2544int
2545isspace(charstring)
2546 char * charstring
2547 CODE:
2548 char *s;
2549 RETVAL = 1;
85e6fe83 2550 for (s = charstring; *s && RETVAL; s++)
2304df62
AD
2551 if (!isspace(*s))
2552 RETVAL = 0;
2553 OUTPUT:
2554 RETVAL
8990e307
LW
2555
2556int
2304df62
AD
2557isupper(charstring)
2558 char * charstring
2559 CODE:
2560 char *s;
2561 RETVAL = 1;
85e6fe83 2562 for (s = charstring; *s && RETVAL; s++)
2304df62
AD
2563 if (!isupper(*s))
2564 RETVAL = 0;
2565 OUTPUT:
2566 RETVAL
8990e307
LW
2567
2568int
2304df62
AD
2569isxdigit(charstring)
2570 char * charstring
2571 CODE:
2572 char *s;
2573 RETVAL = 1;
85e6fe83 2574 for (s = charstring; *s && RETVAL; s++)
2304df62
AD
2575 if (!isxdigit(*s))
2576 RETVAL = 0;
2577 OUTPUT:
2578 RETVAL
2579
2580SysRet
2581open(filename, flags = O_RDONLY, mode = 0666)
2582 char * filename
2583 int flags
a0d0e21e 2584 Mode_t mode
2304df62
AD
2585
2586HV *
2587localeconv()
2588 CODE:
a0d0e21e 2589#ifdef HAS_LOCALECONV
2304df62
AD
2590 struct lconv *lcbuf;
2591 RETVAL = newHV();
2592 if (lcbuf = localeconv()) {
2593 /* the strings */
2594 if (lcbuf->decimal_point && *lcbuf->decimal_point)
2595 hv_store(RETVAL, "decimal_point", 13,
2596 newSVpv(lcbuf->decimal_point, 0), 0);
2597 if (lcbuf->thousands_sep && *lcbuf->thousands_sep)
2598 hv_store(RETVAL, "thousands_sep", 13,
2599 newSVpv(lcbuf->thousands_sep, 0), 0);
2600 if (lcbuf->grouping && *lcbuf->grouping)
2601 hv_store(RETVAL, "grouping", 8,
2602 newSVpv(lcbuf->grouping, 0), 0);
2603 if (lcbuf->int_curr_symbol && *lcbuf->int_curr_symbol)
2604 hv_store(RETVAL, "int_curr_symbol", 15,
2605 newSVpv(lcbuf->int_curr_symbol, 0), 0);
2606 if (lcbuf->currency_symbol && *lcbuf->currency_symbol)
2607 hv_store(RETVAL, "currency_symbol", 15,
2608 newSVpv(lcbuf->currency_symbol, 0), 0);
2609 if (lcbuf->mon_decimal_point && *lcbuf->mon_decimal_point)
2610 hv_store(RETVAL, "mon_decimal_point", 17,
2611 newSVpv(lcbuf->mon_decimal_point, 0), 0);
2612 if (lcbuf->mon_thousands_sep && *lcbuf->mon_thousands_sep)
2613 hv_store(RETVAL, "mon_thousands_sep", 17,
2614 newSVpv(lcbuf->mon_thousands_sep, 0), 0);
2615 if (lcbuf->mon_grouping && *lcbuf->mon_grouping)
2616 hv_store(RETVAL, "mon_grouping", 12,
2617 newSVpv(lcbuf->mon_grouping, 0), 0);
2618 if (lcbuf->positive_sign && *lcbuf->positive_sign)
2619 hv_store(RETVAL, "positive_sign", 13,
2620 newSVpv(lcbuf->positive_sign, 0), 0);
2621 if (lcbuf->negative_sign && *lcbuf->negative_sign)
2622 hv_store(RETVAL, "negative_sign", 13,
2623 newSVpv(lcbuf->negative_sign, 0), 0);
2624 /* the integers */
2625 if (lcbuf->int_frac_digits != CHAR_MAX)
2626 hv_store(RETVAL, "int_frac_digits", 15,
2627 newSViv(lcbuf->int_frac_digits), 0);
2628 if (lcbuf->frac_digits != CHAR_MAX)
2629 hv_store(RETVAL, "frac_digits", 11,
2630 newSViv(lcbuf->frac_digits), 0);
2631 if (lcbuf->p_cs_precedes != CHAR_MAX)
2632 hv_store(RETVAL, "p_cs_precedes", 13,
2633 newSViv(lcbuf->p_cs_precedes), 0);
2634 if (lcbuf->p_sep_by_space != CHAR_MAX)
2635 hv_store(RETVAL, "p_sep_by_space", 14,
2636 newSViv(lcbuf->p_sep_by_space), 0);
2637 if (lcbuf->n_cs_precedes != CHAR_MAX)
2638 hv_store(RETVAL, "n_cs_precedes", 13,
2639 newSViv(lcbuf->n_cs_precedes), 0);
2640 if (lcbuf->n_sep_by_space != CHAR_MAX)
2641 hv_store(RETVAL, "n_sep_by_space", 14,
2642 newSViv(lcbuf->n_sep_by_space), 0);
2643 if (lcbuf->p_sign_posn != CHAR_MAX)
2644 hv_store(RETVAL, "p_sign_posn", 11,
2645 newSViv(lcbuf->p_sign_posn), 0);
2646 if (lcbuf->n_sign_posn != CHAR_MAX)
2647 hv_store(RETVAL, "n_sign_posn", 11,
2648 newSViv(lcbuf->n_sign_posn), 0);
2649 }
a0d0e21e
LW
2650#else
2651 localeconv(); /* A stub to call not_here(). */
2652#endif
2304df62
AD
2653 OUTPUT:
2654 RETVAL
2655
2656char *
2657setlocale(category, locale)
2658 int category
2659 char * locale
2660
2661double
2662acos(x)
2663 double x
2664
2665double
2666asin(x)
2667 double x
2668
2669double
2670atan(x)
2671 double x
2672
2673double
2674ceil(x)
2675 double x
2676
2677double
2678cosh(x)
2679 double x
2680
2681double
2682floor(x)
2683 double x
2684
2685double
2686fmod(x,y)
2687 double x
2688 double y
2689
2690void
2691frexp(x)
2692 double x
2693 PPCODE:
2694 int expvar;
2304df62
AD
2695 /* (We already know stack is long enough.) */
2696 PUSHs(sv_2mortal(newSVnv(frexp(x,&expvar))));
2697 PUSHs(sv_2mortal(newSViv(expvar)));
2698
2699double
2700ldexp(x,exp)
2701 double x
2702 int exp
2703
2704double
2705log10(x)
2706 double x
2707
2708void
2709modf(x)
2710 double x
2711 PPCODE:
2712 double intvar;
2304df62
AD
2713 /* (We already know stack is long enough.) */
2714 PUSHs(sv_2mortal(newSVnv(modf(x,&intvar))));
2715 PUSHs(sv_2mortal(newSVnv(intvar)));
2716
2717double
2718sinh(x)
2719 double x
2720
2721double
2722tanh(x)
2723 double x
2724
2725SysRet
2726sigaction(sig, action, oldaction = 0)
2727 int sig
2728 POSIX::SigAction action
2729 POSIX::SigAction oldaction
2730 CODE:
2731
2732# This code is really grody because we're trying to make the signal
2733# interface look beautiful, which is hard.
2734
2735 if (!siggv)
85e6fe83 2736 gv_fetchpv("SIG", TRUE, SVt_PVHV);
2304df62
AD
2737
2738 {
2739 struct sigaction act;
2740 struct sigaction oact;
2741 POSIX__SigSet sigset;
2742 SV** svp;
2743 SV** sigsvp = hv_fetch(GvHVn(siggv),
2744 sig_name[sig],
2745 strlen(sig_name[sig]),
2746 TRUE);
2747
2748 /* Remember old handler name if desired. */
2749 if (oldaction) {
2750 char *hand = SvPVx(*sigsvp, na);
2751 svp = hv_fetch(oldaction, "HANDLER", 7, TRUE);
2752 sv_setpv(*svp, *hand ? hand : "DEFAULT");
2753 }
2754
2755 if (action) {
2756 /* Vector new handler through %SIG. (We always use sighandler
2757 for the C signal handler, which reads %SIG to dispatch.) */
2758 svp = hv_fetch(action, "HANDLER", 7, FALSE);
2759 if (!svp)
2760 croak("Can't supply an action without a HANDLER");
2761 sv_setpv(*sigsvp, SvPV(*svp, na));
2762 mg_set(*sigsvp); /* handles DEFAULT and IGNORE */
2763 act.sa_handler = sighandler;
2764
2765 /* Set up any desired mask. */
2766 svp = hv_fetch(action, "MASK", 4, FALSE);
2767 if (svp && sv_isa(*svp, "POSIX::SigSet")) {
a0d0e21e
LW
2768 unsigned long tmp;
2769 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2770 sigset = (sigset_t*) tmp;
2304df62
AD
2771 act.sa_mask = *sigset;
2772 }
2773 else
85e6fe83 2774 sigemptyset(& act.sa_mask);
2304df62
AD
2775
2776 /* Set up any desired flags. */
2777 svp = hv_fetch(action, "FLAGS", 5, FALSE);
2778 act.sa_flags = svp ? SvIV(*svp) : 0;
2779 }
2780
2781 /* Now work around sigaction oddities */
2782 if (action && oldaction)
85e6fe83 2783 RETVAL = sigaction(sig, & act, & oact);
2304df62 2784 else if (action)
85e6fe83 2785 RETVAL = sigaction(sig, & act, (struct sigaction*)0);
2304df62 2786 else if (oldaction)
85e6fe83 2787 RETVAL = sigaction(sig, (struct sigaction*)0, & oact);
a0d0e21e
LW
2788 else
2789 RETVAL = -1;
2304df62
AD
2790
2791 if (oldaction) {
2792 /* Get back the mask. */
2793 svp = hv_fetch(oldaction, "MASK", 4, TRUE);
a0d0e21e
LW
2794 if (sv_isa(*svp, "POSIX::SigSet")) {
2795 unsigned long tmp;
2796 tmp = (unsigned long)SvNV((SV*)SvRV(*svp));
2797 sigset = (sigset_t*) tmp;
2798 }
2304df62
AD
2799 else {
2800 sigset = (sigset_t*)safemalloc(sizeof(sigset_t));
2801 sv_setptrobj(*svp, sigset, "POSIX::SigSet");
2802 }
2803 *sigset = oact.sa_mask;
2804
2805 /* Get back the flags. */
2806 svp = hv_fetch(oldaction, "FLAGS", 5, TRUE);
2807 sv_setiv(*svp, oact.sa_flags);
2808 }
2809 }
2810 OUTPUT:
2811 RETVAL
2812
2813SysRet
2814sigpending(sigset)
2815 POSIX::SigSet sigset
2816
2817SysRet
2818sigprocmask(how, sigset, oldsigset = 0)
2819 int how
2820 POSIX::SigSet sigset
2821 POSIX::SigSet oldsigset
2822
2823SysRet
2824sigsuspend(signal_mask)
2825 POSIX::SigSet signal_mask
2826
2304df62
AD
2827void
2828_exit(status)
2829 int status
8990e307 2830
85e6fe83 2831SysRet
8990e307
LW
2832close(fd)
2833 int fd
2834
85e6fe83 2835SysRet
8990e307
LW
2836dup(fd)
2837 int fd
2838
85e6fe83 2839SysRet
8990e307
LW
2840dup2(fd1, fd2)
2841 int fd1
2842 int fd2
2843
94b6baf5 2844SysRetLong
a0d0e21e 2845lseek(fd, offset, whence)
85e6fe83
LW
2846 int fd
2847 Off_t offset
2848 int whence
8990e307 2849
85e6fe83 2850SysRet
8990e307
LW
2851nice(incr)
2852 int incr
2853
2854int
8990e307 2855pipe()
85e6fe83
LW
2856 PPCODE:
2857 int fds[2];
85e6fe83
LW
2858 if (pipe(fds) != -1) {
2859 EXTEND(sp,2);
2860 PUSHs(sv_2mortal(newSViv(fds[0])));
2861 PUSHs(sv_2mortal(newSViv(fds[1])));
2862 }
8990e307 2863
85e6fe83 2864SysRet
a0d0e21e
LW
2865read(fd, buffer, nbytes)
2866 int fd
2867 char * buffer = sv_grow(ST(1),SvIV(ST(2))+1);
2868 size_t nbytes
2869 CLEANUP:
2870 if (RETVAL >= 0) {
2871 SvCUR(ST(1)) = RETVAL;
2872 SvPOK_only(ST(1));
2873 *SvEND(ST(1)) = '\0';
2874 if (tainting)
2875 sv_magic(ST(1), 0, 't', 0, 0);
2876 }
8990e307 2877
85e6fe83
LW
2878SysRet
2879setgid(gid)
2880 Gid_t gid
8990e307 2881
85e6fe83 2882SysRet
8990e307
LW
2883setpgid(pid, pgid)
2884 pid_t pid
2885 pid_t pgid
2886
8990e307
LW
2887pid_t
2888setsid()
2889
85e6fe83
LW
2890SysRet
2891setuid(uid)
2892 Uid_t uid
8990e307
LW
2893
2894pid_t
2895tcgetpgrp(fd)
2896 int fd
2897
85e6fe83 2898SysRet
8990e307
LW
2899tcsetpgrp(fd, pgrp_id)
2900 int fd
2901 pid_t pgrp_id
2902
2903int
8990e307 2904uname()
2304df62 2905 PPCODE:
a0d0e21e 2906#ifdef HAS_UNAME
85e6fe83 2907 struct utsname buf;
85e6fe83 2908 if (uname(&buf) >= 0) {
8990e307 2909 EXTEND(sp, 5);
85e6fe83
LW
2910 PUSHs(sv_2mortal(newSVpv(buf.sysname, 0)));
2911 PUSHs(sv_2mortal(newSVpv(buf.nodename, 0)));
2912 PUSHs(sv_2mortal(newSVpv(buf.release, 0)));
2913 PUSHs(sv_2mortal(newSVpv(buf.version, 0)));
2914 PUSHs(sv_2mortal(newSVpv(buf.machine, 0)));
8990e307 2915 }
a0d0e21e
LW
2916#else
2917 uname((char *) 0); /* A stub to call not_here(). */
2918#endif
8990e307 2919
85e6fe83 2920SysRet
a0d0e21e
LW
2921write(fd, buffer, nbytes)
2922 int fd
2923 char * buffer
2924 size_t nbytes
2925
2926char *
2927tmpnam(s = 0)
2928 char * s = 0;
2929
2930void
2931abort()
2932
2933int
2934mblen(s, n)
2935 char * s
2936 size_t n
2937
2938size_t
2939mbstowcs(s, pwcs, n)
2940 wchar_t * s
2941 char * pwcs
2942 size_t n
2943
2944int
2945mbtowc(pwc, s, n)
2946 wchar_t * pwc
2947 char * s
2948 size_t n
2949
2950int
2951wcstombs(s, pwcs, n)
2952 char * s
2953 wchar_t * pwcs
2954 size_t n
2955
2956int
2957wctomb(s, wchar)
2958 char * s
2959 wchar_t wchar
2960
2961int
2962strcoll(s1, s2)
2963 char * s1
2964 char * s2
2965
2966SV *
2967strxfrm(src)
2968 SV * src
85e6fe83 2969 CODE:
a0d0e21e
LW
2970 {
2971 STRLEN srclen;
2972 STRLEN dstlen;
2973 char *p = SvPV(src,srclen);
2974 srclen++;
2975 ST(0) = sv_2mortal(newSV(srclen));
2976 dstlen = strxfrm(SvPVX(ST(0)), p, (size_t)srclen);
2977 if (dstlen > srclen) {
2978 dstlen++;
2979 SvGROW(ST(0), dstlen);
2980 strxfrm(SvPVX(ST(0)), p, (size_t)dstlen);
2981 dstlen--;
2982 }
2983 SvCUR(ST(0)) = dstlen;
2984 SvPOK_only(ST(0));
2985 }
2986
2987SysRet
2988mkfifo(filename, mode)
2989 char * filename
2990 Mode_t mode
2991
2992SysRet
2993tcdrain(fd)
2994 int fd
2995
2996
2997SysRet
2998tcflow(fd, action)
2999 int fd
3000 int action
3001
3002
3003SysRet
3004tcflush(fd, queue_selector)
3005 int fd
3006 int queue_selector
3007
3008SysRet
3009tcsendbreak(fd, duration)
3010 int fd
3011 int duration
3012
3013char *
3014asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3015 int sec
3016 int min
3017 int hour
3018 int mday
3019 int mon
3020 int year
3021 int wday
3022 int yday
3023 int isdst
3024 CODE:
3025 {
3026 struct tm mytm;
3027 mytm.tm_sec = sec;
3028 mytm.tm_min = min;
3029 mytm.tm_hour = hour;
3030 mytm.tm_mday = mday;
3031 mytm.tm_mon = mon;
3032 mytm.tm_year = year;
3033 mytm.tm_wday = wday;
3034 mytm.tm_yday = yday;
3035 mytm.tm_isdst = isdst;
3036 RETVAL = asctime(&mytm);
3037 }
3038 OUTPUT:
3039 RETVAL
3040
3041long
3042clock()
3043
3044char *
3045ctime(time)
3046 Time_t * time
8990e307 3047
a0d0e21e
LW
3048double
3049difftime(time1, time2)
3050 Time_t time1
3051 Time_t time2
3052
3053SysRetLong
3054mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3055 int sec
3056 int min
3057 int hour
3058 int mday
3059 int mon
3060 int year
3061 int wday
3062 int yday
3063 int isdst
3064 CODE:
3065 {
3066 struct tm mytm;
3067 mytm.tm_sec = sec;
3068 mytm.tm_min = min;
3069 mytm.tm_hour = hour;
3070 mytm.tm_mday = mday;
3071 mytm.tm_mon = mon;
3072 mytm.tm_year = year;
3073 mytm.tm_wday = wday;
3074 mytm.tm_yday = yday;
3075 mytm.tm_isdst = isdst;
3076 RETVAL = mktime(&mytm);
3077 }
85e6fe83
LW
3078 OUTPUT:
3079 RETVAL
a0d0e21e
LW
3080
3081char *
3082strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
3083 char * fmt
3084 int sec
3085 int min
3086 int hour
3087 int mday
3088 int mon
3089 int year
3090 int wday
3091 int yday
3092 int isdst
3093 CODE:
3094 {
3095 char tmpbuf[128];
3096 struct tm mytm;
3097 int len;
3098 mytm.tm_sec = sec;
3099 mytm.tm_min = min;
3100 mytm.tm_hour = hour;
3101 mytm.tm_mday = mday;
3102 mytm.tm_mon = mon;
3103 mytm.tm_year = year;
3104 mytm.tm_wday = wday;
3105 mytm.tm_yday = yday;
3106 mytm.tm_isdst = isdst;
3107 len = strftime(tmpbuf, sizeof tmpbuf, fmt, &mytm);
3108 ST(0) = sv_2mortal(newSVpv(tmpbuf, len));
3109 }
3110
3111void
3112tzset()
3113
3114void
3115tzname()
3116 PPCODE:
3117 EXTEND(sp,2);
3118 PUSHs(sv_2mortal(newSVpv(tzname[0],strlen(tzname[0]))));
3119 PUSHs(sv_2mortal(newSVpv(tzname[1],strlen(tzname[1]))));
3120
3121SysRet
3122access(filename, mode)
3123 char * filename
3124 Mode_t mode
3125
3126char *
3127ctermid(s = 0)
3128 char * s = 0;
3129
3130char *
3131cuserid(s = 0)
3132 char * s = 0;
3133
3134SysRetLong
3135fpathconf(fd, name)
3136 int fd
3137 int name
3138
3139SysRetLong
3140pathconf(filename, name)
3141 char * filename
3142 int name
3143
3144SysRet
3145pause()
3146
3147SysRetLong
3148sysconf(name)
3149 int name
3150
3151char *
3152ttyname(fd)
3153 int fd