[win32] change#1060 was inexplicably missing some of the "ensure
[p5sagit/p5-mst-13.2.git] / win32 / GenCAPI.pl
CommitLineData
e3b8966e 1
2# creates a C API file from proto.h
3# takes one argument, the path to lib/CORE directory.
4# creates 2 files: "PerlCAPI.cpp" and "PerlCAPI.h".
5
6my $hdrfile = "$ARGV[0]\\PerlCAPI.h";
7my $infile = '..\\proto.h';
8my $embedfile = '..\\embed.h';
9my $separateObj = 0;
10
11my %skip_list;
12my %embed;
13
14sub readembed(\%$) {
15 my ($syms, $file) = @_;
16 my ($line, @words);
17 %$syms = ();
18 local (*FILE, $_);
19 open(FILE, "< $file")
20 or die "$0: Can't open $file: $!\n";
21 while ($line = <FILE>) {
22 chop($line);
23 if ($line =~ /^#define\s+\w+/) {
24 $line =~ s/^#define\s+//;
25 @words = split ' ', $line;
26# print "$words[0]\t$words[1]\n";
27 $$syms{$words[0]} = $words[1];
28 }
29 }
30 close(FILE);
31}
32
33readembed %embed, $embedfile;
34
35sub skip_these {
36 my $list = shift;
37 foreach my $symbol (@$list) {
38 $skip_list{$symbol} = 1;
39 }
40}
41
42skip_these [qw(
43cando
44cast_ulong
45my_chsize
46condpair_magic
47deb
48deb_growlevel
49debprofdump
50debop
51debstack
52debstackptrs
58a50f62 53dump_fds
54dump_mstats
e3b8966e 55fprintf
56find_threadsv
57magic_mutexfree
58a50f62 58my_memcmp
59my_memset
e3b8966e 60my_pclose
61my_popen
62my_swap
63my_htonl
64my_ntohl
65new_struct_thread
66same_dirent
67unlnk
68unlock_condpair
69safexmalloc
70safexcalloc
71safexrealloc
72safexfree
73Perl_GetVars
74)];
75
76
77
78if (!open(INFILE, "<$infile")) {
79 print "open of $infile failed: $!\n";
80 return 1;
81}
82
83if (!open(OUTFILE, ">PerlCAPI.cpp")) {
84 print "open of PerlCAPI.cpp failed: $!\n";
85 return 1;
86}
87
b207eff1 88print OUTFILE <<ENDCODE;
89#include "EXTERN.h"
90#include "perl.h"
91#include "XSUB.h"
92
93#define DESTRUCTORFUNC (void (*)(void*))
94
95ENDCODE
96
97print OUTFILE "#ifdef SetCPerlObj_defined\n" unless ($separateObj == 0);
98
99print OUTFILE <<ENDCODE;
100extern "C" void SetCPerlObj(CPerlObj* pP)
101{
102 pPerl = pP;
103}
104
105ENDCODE
106
e3b8966e 107print OUTFILE "#endif\n" unless ($separateObj == 0);
108
109while () {
110 last unless defined ($_ = <INFILE>);
111 if (/^VIRTUAL\s/) {
112 while (!/;$/) {
113 chomp;
114 $_ .= <INFILE>;
115 }
116 $_ =~ s/^VIRTUAL\s*//;
117 $_ =~ s/\s*__attribute__.*$/;/;
118 if ( /(.*)\s([A-z_]*[0-9A-z_]+\s)_\(\((.*)\)\);/ ||
119 /(.*)\*([A-z_]*[0-9A-z_]+\s)_\(\((.*)\)\);/ ) {
120 $type = $1;
121 $name = $2;
122 $args = $3;
123
124 $name =~ s/\s*$//;
125 $type =~ s/\s*$//;
126 next if (defined $skip_list{$name});
127
128 if($args eq "ARGSproto") {
129 $args = "void";
130 }
131
132 $return = ($type eq "void" or $type eq "Free_t") ? "\t" : "\treturn";
133
134 if(defined $embed{$name}) {
135 $funcName = $embed{$name};
136 } else {
137 $funcName = $name;
138 }
139
140 @args = split(',', $args);
141 if ($args[$#args] =~ /\s*\.\.\.\s*/) {
142 if(($name eq "croak") or ($name eq "deb") or ($name eq "die")
143 or ($name eq "form") or ($name eq "warn")) {
144 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
e3b8966e 145 $args[0] =~ /(\w+)\W*$/;
146 $arg = $1;
b207eff1 147 print OUTFILE <<ENDCODE;
148
149#undef $name
150extern "C" $type $funcName ($args)
151{
152 char *pstr;
153 char *pmsg;
154 va_list args;
155 va_start(args, $arg);
156 pmsg = pPerl->Perl_mess($arg, &args);
157 New(0, pstr, strlen(pmsg)+1, char);
158 strcpy(pstr, pmsg);
159$return pPerl->Perl_$name(pstr);
160 va_end(args);
161}
162ENDCODE
e3b8966e 163 print OUTFILE "#endif\n" unless ($separateObj == 0);
164 }
165 elsif($name eq "newSVpvf") {
166 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
e3b8966e 167 $args[0] =~ /(\w+)\W*$/;
168 $arg = $1;
b207eff1 169 print OUTFILE <<ENDCODE;
170
171#undef $name
172extern "C" $type $funcName ($args)
173{
174 SV *sv;
175 va_list args;
176 va_start(args, $arg);
177 sv = pPerl->Perl_newSV(0);
178 pPerl->Perl_sv_vcatpvfn(sv, $arg, strlen($arg), &args, NULL, 0, NULL);
179 va_end(args);
180 return sv;
181}
182ENDCODE
e3b8966e 183 print OUTFILE "#endif\n" unless ($separateObj == 0);
184 }
185 elsif($name eq "sv_catpvf") {
186 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
e3b8966e 187 $args[0] =~ /(\w+)\W*$/;
188 $arg0 = $1;
189 $args[1] =~ /(\w+)\W*$/;
190 $arg1 = $1;
b207eff1 191 print OUTFILE <<ENDCODE;
192
193#undef $name
194extern "C" $type $funcName ($args)
195{
196 va_list args;
197 va_start(args, $arg1);
198 pPerl->Perl_sv_vcatpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
199 va_end(args);
200}
201ENDCODE
e3b8966e 202 print OUTFILE "#endif\n" unless ($separateObj == 0);
203 }
204 elsif($name eq "sv_setpvf") {
205 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
e3b8966e 206 $args[0] =~ /(\w+)\W*$/;
207 $arg0 = $1;
208 $args[1] =~ /(\w+)\W*$/;
209 $arg1 = $1;
b207eff1 210 print OUTFILE <<ENDCODE;
211
212#undef $name
213extern "C" $type $funcName ($args)
214{
215 va_list args;
216 va_start(args, $arg1);
217 pPerl->Perl_sv_vsetpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
218 va_end(args);
219}
220ENDCODE
e3b8966e 221 print OUTFILE "#endif\n" unless ($separateObj == 0);
222 }
223 elsif($name eq "fprintf") {
224 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
e3b8966e 225 $args[0] =~ /(\w+)\W*$/;
226 $arg0 = $1;
227 $args[1] =~ /(\w+)\W*$/;
228 $arg1 = $1;
b207eff1 229 print OUTFILE <<ENDCODE;
230
231#undef $name
232extern "C" $type $name ($args)
233{
234 int nRet;
235 va_list args;
236 va_start(args, $arg1);
237 nRet = PerlIO_vprintf($arg0, $arg1, args);
238 va_end(args);
239 return nRet;
240}
241ENDCODE
e3b8966e 242 print OUTFILE "#endif\n" unless ($separateObj == 0);
243 } else {
244 print "Warning: can't handle varargs function '$name'\n";
245 }
246 next;
247 }
248
249 # newXS special case
250 if ($name eq "newXS") {
251 next;
252 }
253
254 print OUTFILE "\n#ifdef $name" . "defined" unless ($separateObj == 0);
255
256 # handle specical case for save_destructor
257 if ($name eq "save_destructor") {
258 next;
259 }
260 # handle specical case for sighandler
261 if ($name eq "sighandler") {
262 next;
263 }
264 # handle special case for sv_grow
265 if ($name eq "sv_grow" and $args eq "SV* sv, unsigned long newlen") {
266 next;
267 }
268 # handle special case for newSV
269 if ($name eq "newSV" and $args eq "I32 x, STRLEN len") {
270 next;
271 }
272 # handle special case for perl_parse
273 if ($name eq "perl_parse") {
b207eff1 274 print OUTFILE <<ENDCODE;
275
276#undef $name
277extern "C" $type $name ($args)
278{
279 return pPerl->perl_parse(xsinit, argc, argv, env);
280}
281ENDCODE
e3b8966e 282 print OUTFILE "#endif\n" unless ($separateObj == 0);
283 next;
284 }
35ff7856 285 # handle special case for perl_atexit
286 if ($name eq "perl_atexit") {
287 print OUTFILE <<ENDCODE;
288
289#undef $name
290extern "C" $type $name ($args)
291{
58a50f62 292 pPerl->perl_atexit(fn, ptr);
35ff7856 293}
294ENDCODE
295 print OUTFILE "#endif\n" unless ($separateObj == 0);
296 next;
297 }
298
e3b8966e 299
9e6b2b00 300 if($name eq "byterun" and $args eq "struct bytestream bs") {
301 next;
302 }
303
e3b8966e 304 # foo(void);
305 if ($args eq "void") {
b207eff1 306 print OUTFILE <<ENDCODE;
307
308#undef $name
309extern "C" $type $funcName ()
310{
311$return pPerl->$funcName();
312}
313
314ENDCODE
e3b8966e 315 print OUTFILE "#endif\n" unless ($separateObj == 0);
316 next;
317 }
318
319 # foo(char *s, const int bar);
b207eff1 320 print OUTFILE <<ENDCODE;
321
322#undef $name
323extern "C" $type $funcName ($args)
324{
b207eff1 325ENDCODE
35ff7856 326 print OUTFILE "$return pPerl->$funcName";
e3b8966e 327 $doneone = 0;
328 foreach $arg (@args) {
329 if ($arg =~ /(\w+)\W*$/) {
330 if ($doneone) {
331 print OUTFILE ", $1";
332 }
333 else {
334 print OUTFILE "($1";
335 $doneone++;
336 }
337 }
338 }
339 print OUTFILE ");\n}\n";
340 print OUTFILE "#endif\n" unless ($separateObj == 0);
341 }
342 else {
343 print "failed to match $_";
344 }
345 }
346}
347
348close INFILE;
349
350%skip_list = ();
351
352skip_these [qw(
353strchop
354filemode
355lastfd
356oldname
357curinterp
358Argv
359Cmd
360sortcop
361sortstash
362firstgv
363secondgv
364sortstack
365signalstack
366mystrk
367dumplvl
368oldlastpm
369gensym
370preambled
371preambleav
372Ilaststatval
373Ilaststype
374mess_sv
375ors
376opsave
377eval_mutex
378orslen
379ofmt
380mh
381modcount
382generation
383DBcv
384archpat_auto
385sortcxix
386lastgotoprobe
387regdummy
388regparse
389regxend
390regcode
391regnaughty
392regsawback
393regprecomp
394regnpar
395regsize
396regflags
397regseen
398seen_zerolen
399rx
400extralen
401colorset
402colors
403reginput
404regbol
405regeol
406regstartp
407regendp
408reglastparen
409regtill
410regprev
411reg_start_tmp
412reg_start_tmpl
413regdata
414bostr
415reg_flags
416reg_eval_set
417regnarrate
418regprogram
419regindent
420regcc
421in_clean_objs
422in_clean_all
423linestart
424pending_ident
425statusvalue_vms
426sublex_info
427thrsv
428threadnum
429piMem
430piENV
431piStdIO
432piLIO
433piDir
434piSock
435piProc
436cshname
437threadsv_names
438thread
439nthreads
440thr_key
441threads_mutex
442malloc_mutex
443svref_mutex
444sv_mutex
445nthreads_cond
446eval_cond
447cryptseen
448cshlen
449)];
450
451sub readvars(\%$$) {
452 my ($syms, $file, $pre) = @_;
453 %$syms = ();
454 local (*FILE, $_);
455 open(FILE, "< $file")
456 or die "$0: Can't open $file: $!\n";
457 while (<FILE>) {
458 s/[ \t]*#.*//; # Delete comments.
459 if (/PERLVARI?C?\($pre(\w+),\s*([^,)]+)/) {
460 $$syms{$1} = $2;
461 }
462 }
463 close(FILE);
464}
465
466my %intrp;
467my %thread;
468my %globvar;
469
470readvars %intrp, '..\intrpvar.h','I';
471readvars %thread, '..\thrdvar.h','T';
472readvars %globvar, '..\perlvars.h','G';
473
474open(HDRFILE, ">$hdrfile") or die "$0: Can't open $hdrfile: $!\n";
b207eff1 475print HDRFILE <<ENDCODE;
476void SetCPerlObj(void* pP);
477CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename);
478
479ENDCODE
e3b8966e 480
481sub DoVariable($$) {
482 my $name = shift;
483 my $type = shift;
484
485 return if (defined $skip_list{$name});
486 return if ($type eq 'struct perl_thread *');
487
488 print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
b207eff1 489 print OUTFILE <<ENDCODE;
490extern "C" $type * _Perl_$name ()
491{
492 return (($type *)&pPerl->Perl_$name);
493}
494
495ENDCODE
496
e3b8966e 497 print OUTFILE "#endif\n" unless ($separateObj == 0);
498
b207eff1 499 print HDRFILE <<ENDCODE;
500
501#undef Perl_$name
502$type * _Perl_$name ();
503#define Perl_$name (*_Perl_$name())
504
505ENDCODE
506
e3b8966e 507}
508
509foreach $key (keys %intrp) {
510 DoVariable ($key, $intrp{$key});
511}
512
513foreach $key (keys %thread) {
514 DoVariable ($key, $thread{$key});
515}
516
517foreach $key (keys %globvar) {
518 DoVariable ($key, $globvar{$key});
519}
520
521print OUTFILE <<EOCODE;
522
523
524extern "C" {
9e6b2b00 525
526
527char ** _Perl_op_desc(void)
528{
529 return pPerl->Perl_get_op_descs();
530}
531
532char ** _Perl_op_name(void)
533{
534 return pPerl->Perl_get_op_names();
535}
536
537char * _Perl_no_modify(void)
538{
539 return pPerl->Perl_get_no_modify();
540}
541
542U32 * _Perl_opargs(void)
543{
544 return pPerl->Perl_get_opargs();
545}
546
b207eff1 547void xs_handler(CV* cv, CPerlObj* p)
e3b8966e 548{
549 void(*func)(CV*);
550 SV* sv;
551 MAGIC* m = pPerl->Perl_mg_find((SV*)cv, '~');
552 if(m != NULL)
553 {
554 sv = m->mg_obj;
555 if(SvIOK(sv))
556 {
557 func = (void(*)(CV*))SvIVX(sv);
558 }
559 else
560 {
561 func = (void(*)(CV*))pPerl->Perl_sv_2iv(sv);
562 }
e3b8966e 563 func(cv);
564 }
565}
566
567CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename)
568{
569 CV* cv = pPerl->Perl_newXS(name, xs_handler, filename);
570 pPerl->Perl_sv_magic((SV*)cv, pPerl->Perl_sv_2mortal(pPerl->Perl_newSViv((IV)subaddr)), '~', "CAPI", 4);
571 return cv;
572}
573
b207eff1 574
575void Perl_deb(const char pat, ...)
576{
577}
578
e3b8966e 579#undef piMem
580#undef piENV
581#undef piStdIO
582#undef piLIO
583#undef piDir
584#undef piSock
585#undef piProc
586
587int * _win32_errno(void)
588{
589 return &pPerl->ErrorNo();
590}
591
592FILE* _win32_stdin(void)
593{
594 return (FILE*)pPerl->piStdIO->Stdin();
595}
596
597FILE* _win32_stdout(void)
598{
599 return (FILE*)pPerl->piStdIO->Stdout();
600}
601
602FILE* _win32_stderr(void)
603{
604 return (FILE*)pPerl->piStdIO->Stderr();
605}
606
607int _win32_ferror(FILE *fp)
608{
609 return pPerl->piStdIO->Error((PerlIO*)fp, ErrorNo());
610}
611
612int _win32_feof(FILE *fp)
613{
614 return pPerl->piStdIO->Eof((PerlIO*)fp, ErrorNo());
615}
616
617char* _win32_strerror(int e)
618{
619 return strerror(e);
620}
621
622void _win32_perror(const char *str)
623{
624 perror(str);
625}
626
627int _win32_vfprintf(FILE *pf, const char *format, va_list arg)
628{
629 return pPerl->piStdIO->Vprintf((PerlIO*)pf, ErrorNo(), format, arg);
630}
631
632int _win32_vprintf(const char *format, va_list arg)
633{
634 return pPerl->piStdIO->Vprintf(pPerl->piStdIO->Stdout(), ErrorNo(), format, arg);
635}
636
637int _win32_fprintf(FILE *pf, const char *format, ...)
638{
639 int ret;
640 va_list args;
641 va_start(args, format);
642 ret = _win32_vfprintf(pf, format, args);
643 va_end(args);
644 return ret;
645}
646
647int _win32_printf(const char *format, ...)
648{
649 int ret;
650 va_list args;
651 va_start(args, format);
652 ret = _win32_vprintf(format, args);
653 va_end(args);
654 return ret;
655}
656
657size_t _win32_fread(void *buf, size_t size, size_t count, FILE *pf)
658{
659 return pPerl->piStdIO->Read((PerlIO*)pf, buf, (size*count), ErrorNo());
660}
661
662size_t _win32_fwrite(const void *buf, size_t size, size_t count, FILE *pf)
663{
664 return pPerl->piStdIO->Write((PerlIO*)pf, buf, (size*count), ErrorNo());
665}
666
667FILE* _win32_fopen(const char *path, const char *mode)
668{
669 return (FILE*)pPerl->piStdIO->Open(path, mode, ErrorNo());
670}
671
672FILE* _win32_fdopen(int fh, const char *mode)
673{
674 return (FILE*)pPerl->piStdIO->Fdopen(fh, mode, ErrorNo());
675}
676
677FILE* _win32_freopen(const char *path, const char *mode, FILE *pf)
678{
679 return (FILE*)pPerl->piStdIO->Reopen(path, mode, (PerlIO*)pf, ErrorNo());
680}
681
682int _win32_fclose(FILE *pf)
683{
684 return pPerl->piStdIO->Close((PerlIO*)pf, ErrorNo());
685}
686
687int _win32_fputs(const char *s,FILE *pf)
688{
689 return pPerl->piStdIO->Puts((PerlIO*)pf, s, ErrorNo());
690}
691
692int _win32_fputc(int c,FILE *pf)
693{
694 return pPerl->piStdIO->Putc((PerlIO*)pf, c, ErrorNo());
695}
696
697int _win32_ungetc(int c,FILE *pf)
698{
699 return pPerl->piStdIO->Ungetc((PerlIO*)pf, c, ErrorNo());
700}
701
702int _win32_getc(FILE *pf)
703{
704 return pPerl->piStdIO->Getc((PerlIO*)pf, ErrorNo());
705}
706
707int _win32_fileno(FILE *pf)
708{
709 return pPerl->piStdIO->Fileno((PerlIO*)pf, ErrorNo());
710}
711
712void _win32_clearerr(FILE *pf)
713{
714 pPerl->piStdIO->Clearerr((PerlIO*)pf, ErrorNo());
715}
716
717int _win32_fflush(FILE *pf)
718{
719 return pPerl->piStdIO->Flush((PerlIO*)pf, ErrorNo());
720}
721
722long _win32_ftell(FILE *pf)
723{
724 return pPerl->piStdIO->Tell((PerlIO*)pf, ErrorNo());
725}
726
727int _win32_fseek(FILE *pf,long offset,int origin)
728{
729 return pPerl->piStdIO->Seek((PerlIO*)pf, offset, origin, ErrorNo());
730}
731
732int _win32_fgetpos(FILE *pf,fpos_t *p)
733{
734 return pPerl->piStdIO->Getpos((PerlIO*)pf, p, ErrorNo());
735}
736
737int _win32_fsetpos(FILE *pf,const fpos_t *p)
738{
739 return pPerl->piStdIO->Setpos((PerlIO*)pf, p, ErrorNo());
740}
741
742void _win32_rewind(FILE *pf)
743{
744 pPerl->piStdIO->Rewind((PerlIO*)pf, ErrorNo());
745}
746
747FILE* _win32_tmpfile(void)
748{
749 return (FILE*)pPerl->piStdIO->Tmpfile(ErrorNo());
750}
751
752void _win32_setbuf(FILE *pf, char *buf)
753{
754 pPerl->piStdIO->SetBuf((PerlIO*)pf, buf, ErrorNo());
755}
756
757int _win32_setvbuf(FILE *pf, char *buf, int type, size_t size)
758{
759 return pPerl->piStdIO->SetVBuf((PerlIO*)pf, buf, type, size, ErrorNo());
760}
761
9e6b2b00 762char* _win32_fgets(char *s, int n, FILE *pf)
763{
764 return pPerl->piStdIO->Gets((PerlIO*)pf, s, n, ErrorNo());
765}
766
767char* _win32_gets(char *s)
768{
769 return _win32_fgets(s, 80, (FILE*)pPerl->piStdIO->Stdin());
770}
771
e3b8966e 772int _win32_fgetc(FILE *pf)
773{
774 return pPerl->piStdIO->Getc((PerlIO*)pf, ErrorNo());
775}
776
777int _win32_putc(int c, FILE *pf)
778{
779 return pPerl->piStdIO->Putc((PerlIO*)pf, c, ErrorNo());
780}
781
782int _win32_puts(const char *s)
783{
784 return pPerl->piStdIO->Puts(pPerl->piStdIO->Stdout(), s, ErrorNo());
785}
786
787int _win32_getchar(void)
788{
789 return pPerl->piStdIO->Getc(pPerl->piStdIO->Stdin(), ErrorNo());
790}
791
792int _win32_putchar(int c)
793{
794 return pPerl->piStdIO->Putc(pPerl->piStdIO->Stdout(), c, ErrorNo());
795}
796
797void* _win32_malloc(size_t size)
798{
799 return pPerl->piMem->Malloc(size);
800}
801
802void* _win32_calloc(size_t numitems, size_t size)
803{
804 return pPerl->piMem->Malloc(numitems*size);
805}
806
807void* _win32_realloc(void *block, size_t size)
808{
809 return pPerl->piMem->Realloc(block, size);
810}
811
812void _win32_free(void *block)
813{
814 pPerl->piMem->Free(block);
815}
816
817void _win32_abort(void)
818{
819 pPerl->piProc->Abort();
820}
821
822int _win32_pipe(int *phandles, unsigned int psize, int textmode)
823{
824 return pPerl->piProc->Pipe(phandles);
825}
826
827FILE* _win32_popen(const char *command, const char *mode)
828{
829 return (FILE*)pPerl->piProc->Popen(command, mode);
830}
831
832int _win32_pclose(FILE *pf)
833{
834 return pPerl->piProc->Pclose((PerlIO*)pf);
835}
836
837unsigned _win32_sleep(unsigned int t)
838{
839 return pPerl->piProc->Sleep(t);
840}
841
842int _win32_spawnvp(int mode, const char *cmdname, const char *const *argv)
843{
844 return pPerl->piProc->Spawnvp(mode, cmdname, argv);
845}
846
847int _win32_mkdir(const char *dir, int mode)
848{
849 return pPerl->piDir->Makedir(dir, mode, ErrorNo());
850}
851
852int _win32_rmdir(const char *dir)
853{
854 return pPerl->piDir->Rmdir(dir, ErrorNo());
855}
856
857int _win32_chdir(const char *dir)
858{
859 return pPerl->piDir->Chdir(dir, ErrorNo());
860}
861
862#undef stat
863int _win32_fstat(int fd,struct stat *sbufptr)
864{
865 return pPerl->piLIO->FileStat(fd, sbufptr, ErrorNo());
866}
867
868int _win32_stat(const char *name,struct stat *sbufptr)
869{
870 return pPerl->piLIO->NameStat(name, sbufptr, ErrorNo());
871}
872
873int _win32_setmode(int fd, int mode)
874{
875 return pPerl->piLIO->Setmode(fd, mode, ErrorNo());
876}
877
878long _win32_lseek(int fd, long offset, int origin)
879{
880 return pPerl->piLIO->Lseek(fd, offset, origin, ErrorNo());
881}
882
883long _win32_tell(int fd)
884{
885 return pPerl->piStdIO->Tell((PerlIO*)fd, ErrorNo());
886}
887
888int _win32_dup(int fd)
889{
890 return pPerl->piLIO->Dup(fd, ErrorNo());
891}
892
893int _win32_dup2(int h1, int h2)
894{
895 return pPerl->piLIO->Dup2(h1, h2, ErrorNo());
896}
897
898int _win32_open(const char *path, int oflag,...)
899{
900 return pPerl->piLIO->Open(path, oflag, ErrorNo());
901}
902
903int _win32_close(int fd)
904{
905 return pPerl->piLIO->Close(fd, ErrorNo());
906}
907
908int _win32_read(int fd, void *buf, unsigned int cnt)
909{
910 return pPerl->piLIO->Read(fd, buf, cnt, ErrorNo());
911}
912
913int _win32_write(int fd, const void *buf, unsigned int cnt)
914{
915 return pPerl->piLIO->Write(fd, buf, cnt, ErrorNo());
916}
917
918int _win32_times(struct tms *timebuf)
919{
920 return pPerl->piProc->Times(timebuf);
921}
922
923int _win32_ioctl(int i, unsigned int u, char *data)
924{
925 return pPerl->piLIO->IOCtl(i, u, data, ErrorNo());
926}
927
928int _win32_utime(const char *f, struct utimbuf *t)
929{
930 return pPerl->piLIO->Utime((char*)f, t, ErrorNo());
931}
932
933char* _win32_getenv(const char *name)
934{
935 return pPerl->piENV->Getenv(name, ErrorNo());
936}
937
938int _win32_open_osfhandle(long handle, int flags)
939{
940 return pPerl->piStdIO->OpenOSfhandle(handle, flags);
941}
942
943long _win32_get_osfhandle(int fd)
944{
945 return pPerl->piStdIO->GetOSfhandle(fd);
946}
891fc7f2 947
948u_long _win32_htonl (u_long hostlong)
949{
950 return pPerl->piSock->Htonl(hostlong);
951}
952
953u_short _win32_htons (u_short hostshort)
954{
955 return pPerl->piSock->Htons(hostshort);
956}
957
958u_long _win32_ntohl (u_long netlong)
959{
960 return pPerl->piSock->Ntohl(netlong);
961}
962
963u_short _win32_ntohs (u_short netshort)
964{
965 return pPerl->piSock->Ntohs(netshort);
966}
967
968unsigned long _win32_inet_addr (const char * cp)
969{
970 return pPerl->piSock->InetAddr(cp, ErrorNo());
971}
972
973char * _win32_inet_ntoa (struct in_addr in)
974{
975 return pPerl->piSock->InetNtoa(in, ErrorNo());
976}
977
978SOCKET _win32_socket (int af, int type, int protocol)
979{
980 return pPerl->piSock->Socket(af, type, protocol, ErrorNo());
981}
982
983int _win32_bind (SOCKET s, const struct sockaddr *addr, int namelen)
984{
985 return pPerl->piSock->Bind(s, addr, namelen, ErrorNo());
986}
987
988int _win32_listen (SOCKET s, int backlog)
989{
990 return pPerl->piSock->Listen(s, backlog, ErrorNo());
991}
992
993SOCKET _win32_accept (SOCKET s, struct sockaddr *addr, int *addrlen)
994{
995 return pPerl->piSock->Accept(s, addr, addrlen, ErrorNo());
996}
997
998int _win32_connect (SOCKET s, const struct sockaddr *name, int namelen)
999{
1000 return pPerl->piSock->Connect(s, name, namelen, ErrorNo());
1001}
1002
1003int _win32_send (SOCKET s, const char * buf, int len, int flags)
1004{
1005 return pPerl->piSock->Send(s, buf, len, flags, ErrorNo());
1006}
1007
1008int _win32_sendto (SOCKET s, const char * buf, int len, int flags,
1009 const struct sockaddr *to, int tolen)
1010{
1011 return pPerl->piSock->Sendto(s, buf, len, flags, to, tolen, ErrorNo());
1012}
1013
1014int _win32_recv (SOCKET s, char * buf, int len, int flags)
1015{
9e6b2b00 1016 return pPerl->piSock->Recv(s, buf, len, flags, ErrorNo());
891fc7f2 1017}
1018
1019int _win32_recvfrom (SOCKET s, char * buf, int len, int flags,
1020 struct sockaddr *from, int * fromlen)
1021{
1022 return pPerl->piSock->Recvfrom(s, buf, len, flags, from, fromlen, ErrorNo());
1023}
1024
1025int _win32_shutdown (SOCKET s, int how)
1026{
1027 return pPerl->piSock->Shutdown(s, how, ErrorNo());
1028}
1029
1030int _win32_closesocket (SOCKET s)
1031{
9e6b2b00 1032 return pPerl->piSock->Closesocket(s, ErrorNo());
891fc7f2 1033}
1034
1035int _win32_ioctlsocket (SOCKET s, long cmd, u_long *argp)
1036{
9e6b2b00 1037 return pPerl->piSock->Ioctlsocket(s, cmd, argp, ErrorNo());
891fc7f2 1038}
1039
1040int _win32_setsockopt (SOCKET s, int level, int optname,
1041 const char * optval, int optlen)
1042{
1043 return pPerl->piSock->Setsockopt(s, level, optname, optval, optlen, ErrorNo());
1044}
1045
1046int _win32_getsockopt (SOCKET s, int level, int optname, char * optval, int *optlen)
1047{
1048 return pPerl->piSock->Getsockopt(s, level, optname, optval, optlen, ErrorNo());
1049}
1050
1051int _win32_getpeername (SOCKET s, struct sockaddr *name, int * namelen)
1052{
1053 return pPerl->piSock->Getpeername(s, name, namelen, ErrorNo());
1054}
1055
1056int _win32_getsockname (SOCKET s, struct sockaddr *name, int * namelen)
1057{
1058 return pPerl->piSock->Getsockname(s, name, namelen, ErrorNo());
1059}
1060
1061int _win32_gethostname (char * name, int namelen)
1062{
1063 return pPerl->piSock->Gethostname(name, namelen, ErrorNo());
1064}
1065
1066struct hostent * _win32_gethostbyname(const char * name)
1067{
1068 return pPerl->piSock->Gethostbyname(name, ErrorNo());
1069}
1070
1071struct hostent * _win32_gethostbyaddr(const char * addr, int len, int type)
1072{
1073 return pPerl->piSock->Gethostbyaddr(addr, len, type, ErrorNo());
1074}
1075
1076struct protoent * _win32_getprotobyname(const char * name)
1077{
1078 return pPerl->piSock->Getprotobyname(name, ErrorNo());
1079}
1080
1081struct protoent * _win32_getprotobynumber(int proto)
1082{
1083 return pPerl->piSock->Getprotobynumber(proto, ErrorNo());
1084}
1085
1086struct servent * _win32_getservbyname(const char * name, const char * proto)
1087{
1088 return pPerl->piSock->Getservbyname(name, proto, ErrorNo());
1089}
1090
1091struct servent * _win32_getservbyport(int port, const char * proto)
1092{
1093 return pPerl->piSock->Getservbyport(port, proto, ErrorNo());
1094}
1095
1096int _win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds,
1097 const struct timeval *timeout)
1098{
1099 return pPerl->piSock->Select(nfds, (char*)rfds, (char*)wfds, (char*)xfds, timeout, ErrorNo());
1100}
1101
1102void _win32_endnetent(void)
1103{
1104 pPerl->piSock->Endnetent(ErrorNo());
1105}
1106
1107void _win32_endhostent(void)
1108{
1109 pPerl->piSock->Endhostent(ErrorNo());
1110}
1111
1112void _win32_endprotoent(void)
1113{
1114 pPerl->piSock->Endprotoent(ErrorNo());
1115}
1116
1117void _win32_endservent(void)
1118{
1119 pPerl->piSock->Endservent(ErrorNo());
1120}
1121
1122struct netent * _win32_getnetent(void)
1123{
1124 return pPerl->piSock->Getnetent(ErrorNo());
1125}
1126
1127struct netent * _win32_getnetbyname(char *name)
1128{
1129 return pPerl->piSock->Getnetbyname(name, ErrorNo());
1130}
1131
1132struct netent * _win32_getnetbyaddr(long net, int type)
1133{
1134 return pPerl->piSock->Getnetbyaddr(net, type, ErrorNo());
1135}
1136
1137struct protoent *_win32_getprotoent(void)
1138{
1139 return pPerl->piSock->Getprotoent(ErrorNo());
1140}
1141
1142struct servent *_win32_getservent(void)
1143{
1144 return pPerl->piSock->Getservent(ErrorNo());
1145}
1146
1147void _win32_sethostent(int stayopen)
1148{
1149 pPerl->piSock->Sethostent(stayopen, ErrorNo());
1150}
1151
1152void _win32_setnetent(int stayopen)
1153{
1154 pPerl->piSock->Setnetent(stayopen, ErrorNo());
1155}
1156
1157void _win32_setprotoent(int stayopen)
1158{
1159 pPerl->piSock->Setprotoent(stayopen, ErrorNo());
1160}
1161
1162void _win32_setservent(int stayopen)
1163{
1164 pPerl->piSock->Setservent(stayopen, ErrorNo());
1165}
e3b8966e 1166} /* extern "C" */
1167EOCODE
1168
1169
1170print HDRFILE <<EOCODE;
9e6b2b00 1171#undef Perl_op_desc
1172char ** _Perl_op_desc ();
1173#define Perl_op_desc (_Perl_op_desc())
1174
1175#undef Perl_op_name
1176char ** _Perl_op_name ();
1177#define Perl_op_name (_Perl_op_name())
1178
1179#undef Perl_no_modify
58a50f62 1180char * _Perl_no_modify ();
9e6b2b00 1181#define Perl_no_modify (_Perl_no_modify())
1182
1183#undef Perl_opargs
58a50f62 1184U32 * _Perl_opargs ();
9e6b2b00 1185#define Perl_opargs (_Perl_opargs())
1186
1187
e3b8966e 1188#undef win32_errno
1189#undef win32_stdin
1190#undef win32_stdout
1191#undef win32_stderr
1192#undef win32_ferror
1193#undef win32_feof
1194#undef win32_fprintf
1195#undef win32_printf
1196#undef win32_vfprintf
1197#undef win32_vprintf
1198#undef win32_fread
1199#undef win32_fwrite
1200#undef win32_fopen
1201#undef win32_fdopen
1202#undef win32_freopen
1203#undef win32_fclose
1204#undef win32_fputs
1205#undef win32_fputc
1206#undef win32_ungetc
1207#undef win32_getc
1208#undef win32_fileno
1209#undef win32_clearerr
1210#undef win32_fflush
1211#undef win32_ftell
1212#undef win32_fseek
1213#undef win32_fgetpos
1214#undef win32_fsetpos
1215#undef win32_rewind
1216#undef win32_tmpfile
1217#undef win32_abort
1218#undef win32_fstat
1219#undef win32_stat
1220#undef win32_pipe
1221#undef win32_popen
1222#undef win32_pclose
1223#undef win32_setmode
1224#undef win32_lseek
1225#undef win32_tell
1226#undef win32_dup
1227#undef win32_dup2
1228#undef win32_open
1229#undef win32_close
1230#undef win32_eof
1231#undef win32_read
1232#undef win32_write
1233#undef win32_mkdir
1234#undef win32_rmdir
1235#undef win32_chdir
1236#undef win32_setbuf
1237#undef win32_setvbuf
1238#undef win32_fgetc
9e6b2b00 1239#undef win32_fgets
1240#undef win32_gets
e3b8966e 1241#undef win32_putc
1242#undef win32_puts
1243#undef win32_getchar
1244#undef win32_putchar
1245#undef win32_malloc
1246#undef win32_calloc
1247#undef win32_realloc
1248#undef win32_free
1249#undef win32_sleep
1250#undef win32_times
1251#undef win32_stat
1252#undef win32_ioctl
1253#undef win32_utime
1254#undef win32_getenv
1255
891fc7f2 1256#undef win32_htonl
1257#undef win32_htons
1258#undef win32_ntohl
1259#undef win32_ntohs
1260#undef win32_inet_addr
1261#undef win32_inet_ntoa
1262
1263#undef win32_socket
1264#undef win32_bind
1265#undef win32_listen
1266#undef win32_accept
1267#undef win32_connect
1268#undef win32_send
1269#undef win32_sendto
1270#undef win32_recv
1271#undef win32_recvfrom
1272#undef win32_shutdown
1273#undef win32_closesocket
1274#undef win32_ioctlsocket
1275#undef win32_setsockopt
1276#undef win32_getsockopt
1277#undef win32_getpeername
1278#undef win32_getsockname
1279#undef win32_gethostname
1280#undef win32_gethostbyname
1281#undef win32_gethostbyaddr
1282#undef win32_getprotobyname
1283#undef win32_getprotobynumber
1284#undef win32_getservbyname
1285#undef win32_getservbyport
1286#undef win32_select
1287#undef win32_endhostent
1288#undef win32_endnetent
1289#undef win32_endprotoent
1290#undef win32_endservent
1291#undef win32_getnetent
1292#undef win32_getnetbyname
1293#undef win32_getnetbyaddr
1294#undef win32_getprotoent
1295#undef win32_getservent
1296#undef win32_sethostent
1297#undef win32_setnetent
1298#undef win32_setprotoent
1299#undef win32_setservent
1300
e3b8966e 1301#define win32_errno _win32_errno
1302#define win32_stdin _win32_stdin
1303#define win32_stdout _win32_stdout
1304#define win32_stderr _win32_stderr
1305#define win32_ferror _win32_ferror
1306#define win32_feof _win32_feof
1307#define win32_strerror _win32_strerror
1308#define win32_perror _win32_perror
1309#define win32_fprintf _win32_fprintf
1310#define win32_printf _win32_printf
1311#define win32_vfprintf _win32_vfprintf
1312#define win32_vprintf _win32_vprintf
1313#define win32_fread _win32_fread
1314#define win32_fwrite _win32_fwrite
1315#define win32_fopen _win32_fopen
1316#define win32_fdopen _win32_fdopen
1317#define win32_freopen _win32_freopen
1318#define win32_fclose _win32_fclose
1319#define win32_fputs _win32_fputs
1320#define win32_fputc _win32_fputc
1321#define win32_ungetc _win32_ungetc
1322#define win32_getc _win32_getc
1323#define win32_fileno _win32_fileno
1324#define win32_clearerr _win32_clearerr
1325#define win32_fflush _win32_fflush
1326#define win32_ftell _win32_ftell
1327#define win32_fseek _win32_fseek
1328#define win32_fgetpos _win32_fgetpos
1329#define win32_fsetpos _win32_fsetpos
1330#define win32_rewind _win32_rewind
1331#define win32_tmpfile _win32_tmpfile
1332#define win32_abort _win32_abort
1333#define win32_fstat _win32_fstat
1334#define win32_stat _win32_stat
1335#define win32_pipe _win32_pipe
1336#define win32_popen _win32_popen
1337#define win32_pclose _win32_pclose
1338#define win32_setmode _win32_setmode
1339#define win32_lseek _win32_lseek
1340#define win32_tell _win32_tell
1341#define win32_dup _win32_dup
1342#define win32_dup2 _win32_dup2
1343#define win32_open _win32_open
1344#define win32_close _win32_close
1345#define win32_eof _win32_eof
1346#define win32_read _win32_read
1347#define win32_write _win32_write
1348#define win32_mkdir _win32_mkdir
1349#define win32_rmdir _win32_rmdir
1350#define win32_chdir _win32_chdir
1351#define win32_setbuf _win32_setbuf
1352#define win32_setvbuf _win32_setvbuf
1353#define win32_fgetc _win32_fgetc
9e6b2b00 1354#define win32_fgets _win32_fgets
1355#define win32_gets _win32_gets
e3b8966e 1356#define win32_putc _win32_putc
1357#define win32_puts _win32_puts
1358#define win32_getchar _win32_getchar
1359#define win32_putchar _win32_putchar
1360#define win32_malloc _win32_malloc
1361#define win32_calloc _win32_calloc
1362#define win32_realloc _win32_realloc
1363#define win32_free _win32_free
1364#define win32_sleep _win32_sleep
1365#define win32_spawnvp _win32_spawnvp
1366#define win32_times _win32_times
1367#define win32_stat _win32_stat
1368#define win32_ioctl _win32_ioctl
1369#define win32_utime _win32_utime
1370#define win32_getenv _win32_getenv
1371#define win32_open_osfhandle _win32_open_osfhandle
1372#define win32_get_osfhandle _win32_get_osfhandle
1373
891fc7f2 1374#define win32_htonl _win32_htonl
1375#define win32_htons _win32_htons
1376#define win32_ntohl _win32_ntohl
1377#define win32_ntohs _win32_ntohs
1378#define win32_inet_addr _win32_inet_addr
1379#define win32_inet_ntoa _win32_inet_ntoa
1380
1381#define win32_socket _win32_socket
1382#define win32_bind _win32_bind
1383#define win32_listen _win32_listen
1384#define win32_accept _win32_accept
1385#define win32_connect _win32_connect
1386#define win32_send _win32_send
1387#define win32_sendto _win32_sendto
1388#define win32_recv _win32_recv
1389#define win32_recvfrom _win32_recvfrom
1390#define win32_shutdown _win32_shutdown
1391#define win32_closesocket _win32_closesocket
1392#define win32_ioctlsocket _win32_ioctlsocket
1393#define win32_setsockopt _win32_setsockopt
1394#define win32_getsockopt _win32_getsockopt
1395#define win32_getpeername _win32_getpeername
1396#define win32_getsockname _win32_getsockname
1397#define win32_gethostname _win32_gethostname
1398#define win32_gethostbyname _win32_gethostbyname
1399#define win32_gethostbyaddr _win32_gethostbyaddr
1400#define win32_getprotobyname _win32_getprotobyname
1401#define win32_getprotobynumber _win32_getprotobynumber
1402#define win32_getservbyname _win32_getservbyname
1403#define win32_getservbyport _win32_getservbyport
1404#define win32_select _win32_select
1405#define win32_endhostent _win32_endhostent
1406#define win32_endnetent _win32_endnetent
1407#define win32_endprotoent _win32_endprotoent
1408#define win32_endservent _win32_endservent
1409#define win32_getnetent _win32_getnetent
1410#define win32_getnetbyname _win32_getnetbyname
1411#define win32_getnetbyaddr _win32_getnetbyaddr
1412#define win32_getprotoent _win32_getprotoent
1413#define win32_getservent _win32_getservent
1414#define win32_sethostent _win32_sethostent
1415#define win32_setnetent _win32_setnetent
1416#define win32_setprotoent _win32_setprotoent
1417#define win32_setservent _win32_setservent
1418
e3b8966e 1419int * _win32_errno(void);
1420FILE* _win32_stdin(void);
1421FILE* _win32_stdout(void);
1422FILE* _win32_stderr(void);
1423int _win32_ferror(FILE *fp);
1424int _win32_feof(FILE *fp);
1425char* _win32_strerror(int e);
1426void _win32_perror(const char *str);
1427int _win32_fprintf(FILE *pf, const char *format, ...);
1428int _win32_printf(const char *format, ...);
1429int _win32_vfprintf(FILE *pf, const char *format, va_list arg);
1430int _win32_vprintf(const char *format, va_list arg);
1431size_t _win32_fread(void *buf, size_t size, size_t count, FILE *pf);
1432size_t _win32_fwrite(const void *buf, size_t size, size_t count, FILE *pf);
1433FILE* _win32_fopen(const char *path, const char *mode);
1434FILE* _win32_fdopen(int fh, const char *mode);
1435FILE* _win32_freopen(const char *path, const char *mode, FILE *pf);
1436int _win32_fclose(FILE *pf);
1437int _win32_fputs(const char *s,FILE *pf);
1438int _win32_fputc(int c,FILE *pf);
1439int _win32_ungetc(int c,FILE *pf);
1440int _win32_getc(FILE *pf);
1441int _win32_fileno(FILE *pf);
1442void _win32_clearerr(FILE *pf);
1443int _win32_fflush(FILE *pf);
1444long _win32_ftell(FILE *pf);
1445int _win32_fseek(FILE *pf,long offset,int origin);
1446int _win32_fgetpos(FILE *pf,fpos_t *p);
1447int _win32_fsetpos(FILE *pf,const fpos_t *p);
1448void _win32_rewind(FILE *pf);
1449FILE* _win32_tmpfile(void);
1450void _win32_abort(void);
1451int _win32_fstat(int fd,struct stat *sbufptr);
1452int _win32_stat(const char *name,struct stat *sbufptr);
1453int _win32_pipe( int *phandles, unsigned int psize, int textmode );
1454FILE* _win32_popen( const char *command, const char *mode );
1455int _win32_pclose( FILE *pf);
1456int _win32_setmode( int fd, int mode);
1457long _win32_lseek( int fd, long offset, int origin);
1458long _win32_tell( int fd);
1459int _win32_dup( int fd);
1460int _win32_dup2(int h1, int h2);
1461int _win32_open(const char *path, int oflag,...);
1462int _win32_close(int fd);
1463int _win32_eof(int fd);
1464int _win32_read(int fd, void *buf, unsigned int cnt);
1465int _win32_write(int fd, const void *buf, unsigned int cnt);
1466int _win32_mkdir(const char *dir, int mode);
1467int _win32_rmdir(const char *dir);
1468int _win32_chdir(const char *dir);
1469void _win32_setbuf(FILE *pf, char *buf);
1470int _win32_setvbuf(FILE *pf, char *buf, int type, size_t size);
1471char* _win32_fgets(char *s, int n, FILE *pf);
1472char* _win32_gets(char *s);
1473int _win32_fgetc(FILE *pf);
1474int _win32_putc(int c, FILE *pf);
1475int _win32_puts(const char *s);
1476int _win32_getchar(void);
1477int _win32_putchar(int c);
1478void* _win32_malloc(size_t size);
1479void* _win32_calloc(size_t numitems, size_t size);
1480void* _win32_realloc(void *block, size_t size);
1481void _win32_free(void *block);
1482unsigned _win32_sleep(unsigned int);
1483int _win32_spawnvp(int mode, const char *cmdname, const char *const *argv);
1484int _win32_times(struct tms *timebuf);
1485int _win32_stat(const char *path, struct stat *buf);
1486int _win32_ioctl(int i, unsigned int u, char *data);
1487int _win32_utime(const char *f, struct utimbuf *t);
1488char* _win32_getenv(const char *name);
1489int _win32_open_osfhandle(long handle, int flags);
1490long _win32_get_osfhandle(int fd);
1491
891fc7f2 1492u_long _win32_htonl (u_long hostlong);
1493u_short _win32_htons (u_short hostshort);
1494u_long _win32_ntohl (u_long netlong);
1495u_short _win32_ntohs (u_short netshort);
1496unsigned long _win32_inet_addr (const char * cp);
1497char * _win32_inet_ntoa (struct in_addr in);
1498
1499SOCKET _win32_socket (int af, int type, int protocol);
1500int _win32_bind (SOCKET s, const struct sockaddr *addr, int namelen);
1501int _win32_listen (SOCKET s, int backlog);
1502SOCKET _win32_accept (SOCKET s, struct sockaddr *addr, int *addrlen);
1503int _win32_connect (SOCKET s, const struct sockaddr *name, int namelen);
1504int _win32_send (SOCKET s, const char * buf, int len, int flags);
1505int _win32_sendto (SOCKET s, const char * buf, int len, int flags,
1506 const struct sockaddr *to, int tolen);
1507int _win32_recv (SOCKET s, char * buf, int len, int flags);
1508int _win32_recvfrom (SOCKET s, char * buf, int len, int flags,
1509 struct sockaddr *from, int * fromlen);
1510int _win32_shutdown (SOCKET s, int how);
1511int _win32_closesocket (SOCKET s);
1512int _win32_ioctlsocket (SOCKET s, long cmd, u_long *argp);
1513int _win32_setsockopt (SOCKET s, int level, int optname,
1514 const char * optval, int optlen);
1515int _win32_getsockopt (SOCKET s, int level, int optname, char * optval, int *optlen);
1516int _win32_getpeername (SOCKET s, struct sockaddr *name, int * namelen);
1517int _win32_getsockname (SOCKET s, struct sockaddr *name, int * namelen);
1518int _win32_gethostname (char * name, int namelen);
1519struct hostent * _win32_gethostbyname(const char * name);
1520struct hostent * _win32_gethostbyaddr(const char * addr, int len, int type);
1521struct protoent * _win32_getprotobyname(const char * name);
1522struct protoent * _win32_getprotobynumber(int proto);
1523struct servent * _win32_getservbyname(const char * name, const char * proto);
1524struct servent * _win32_getservbyport(int port, const char * proto);
1525int _win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds,
1526 const struct timeval *timeout);
1527void _win32_endnetent(void);
1528void _win32_endhostent(void);
1529void _win32_endprotoent(void);
1530void _win32_endservent(void);
1531struct netent * _win32_getnetent(void);
1532struct netent * _win32_getnetbyname(char *name);
1533struct netent * _win32_getnetbyaddr(long net, int type);
1534struct protoent *_win32_getprotoent(void);
1535struct servent *_win32_getservent(void);
1536void _win32_sethostent(int stayopen);
1537void _win32_setnetent(int stayopen);
1538void _win32_setprotoent(int stayopen);
1539void _win32_setservent(int stayopen);
1540
e3b8966e 1541#pragma warning(once : 4113)
1542EOCODE
1543
1544
1545close HDRFILE;
1546close OUTFILE;