source: trunk/third/perl/iperlsys.h @ 14545

Revision 14545, 47.4 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14544, which included commits to RCS files with non-trunk default branches.
Line 
1/*
2 * iperlsys.h - Perl's interface to the system
3 *
4 * This file defines the system level functionality that perl needs.
5 *
6 * When using C, this definition is in the form of a set of macros
7 * that can be #defined to the system-level function (or a wrapper
8 * provided elsewhere).
9 *
10 * When using C++ with -DPERL_OBJECT, this definition is in the
11 * form of a set of virtual base classes which must be subclassed to
12 * provide a real implementation.  The Perl Object will use instances
13 * of this implementation to use the system-level functionality.
14 *
15 * GSAR 21-JUN-98
16 */
17
18#ifndef __Inc__IPerl___
19#define __Inc__IPerl___
20
21/*
22 *      PerlXXX_YYY explained - DickH and DougL @ ActiveState.com
23 *
24 * XXX := functional group
25 * YYY := stdlib/OS function name
26 *
27 * Continuing with the theme of PerlIO, all OS functionality was
28 * encapsulated into one of several interfaces.
29 *
30 * PerlIO - stdio
31 * PerlLIO - low level I/O
32 * PerlMem - malloc, realloc, free
33 * PerlDir - directory related
34 * PerlEnv - process environment handling
35 * PerlProc - process control
36 * PerlSock - socket functions
37 *
38 *
39 * The features of this are:
40 * 1. All OS dependant code is in the Perl Host and not the Perl Core.
41 *    (At least this is the holy grail goal of this work)
42 * 2. The Perl Host (see perl.h for description) can provide a new and
43 *    improved interface to OS functionality if required.
44 * 3. Developers can easily hook into the OS calls for instrumentation
45 *    or diagnostic purposes.
46 *
47 * What was changed to do this:
48 * 1. All calls to OS functions were replaced with PerlXXX_YYY
49 *
50 */
51
52
53/*
54    Interface for perl stdio functions
55*/
56
57
58/* Clean up (or at least document) the various possible #defines.
59   This section attempts to match the 5.003_03 Configure variables
60   onto the 5.003_02 header file values.
61   I can't figure out where USE_STDIO was supposed to be set.
62   --AD
63*/
64#ifndef USE_PERLIO
65# define PERLIO_IS_STDIO
66#endif
67
68/* Below is the 5.003_02 stuff. */
69#ifdef USE_STDIO
70#  ifndef PERLIO_IS_STDIO
71#      define PERLIO_IS_STDIO
72#  endif
73#else
74extern void PerlIO_init (void);
75#endif
76
77#ifndef Sighandler_t
78typedef Signal_t (*Sighandler_t) (int);
79#endif
80
81#if defined(PERL_IMPLICIT_SYS)
82
83#ifndef PerlIO
84typedef struct _PerlIO PerlIO;
85#endif
86
87/* IPerlStdIO           */
88struct IPerlStdIO;
89struct IPerlStdIOInfo;
90typedef PerlIO*         (*LPStdin)(struct IPerlStdIO*);
91typedef PerlIO*         (*LPStdout)(struct IPerlStdIO*);
92typedef PerlIO*         (*LPStderr)(struct IPerlStdIO*);
93typedef PerlIO*         (*LPOpen)(struct IPerlStdIO*, const char*,
94                            const char*);
95typedef int             (*LPClose)(struct IPerlStdIO*, PerlIO*);
96typedef int             (*LPEof)(struct IPerlStdIO*, PerlIO*);
97typedef int             (*LPError)(struct IPerlStdIO*, PerlIO*);
98typedef void            (*LPClearerr)(struct IPerlStdIO*, PerlIO*);
99typedef int             (*LPGetc)(struct IPerlStdIO*, PerlIO*);
100typedef char*           (*LPGetBase)(struct IPerlStdIO*, PerlIO*);
101typedef int             (*LPGetBufsiz)(struct IPerlStdIO*, PerlIO*);
102typedef int             (*LPGetCnt)(struct IPerlStdIO*, PerlIO*);
103typedef char*           (*LPGetPtr)(struct IPerlStdIO*, PerlIO*);
104typedef char*           (*LPGets)(struct IPerlStdIO*, PerlIO*, char*, int);
105typedef int             (*LPPutc)(struct IPerlStdIO*, PerlIO*, int);
106typedef int             (*LPPuts)(struct IPerlStdIO*, PerlIO*, const char*);
107typedef int             (*LPFlush)(struct IPerlStdIO*, PerlIO*);
108typedef int             (*LPUngetc)(struct IPerlStdIO*, PerlIO*,int);
109typedef int             (*LPFileno)(struct IPerlStdIO*, PerlIO*);
110typedef PerlIO*         (*LPFdopen)(struct IPerlStdIO*, int, const char*);
111typedef PerlIO*         (*LPReopen)(struct IPerlStdIO*, const char*,
112                            const char*, PerlIO*);
113typedef SSize_t         (*LPRead)(struct IPerlStdIO*, PerlIO*, void*, Size_t);
114typedef SSize_t         (*LPWrite)(struct IPerlStdIO*, PerlIO*, const void*,
115                            Size_t);
116typedef void            (*LPSetBuf)(struct IPerlStdIO*, PerlIO*, char*);
117typedef int             (*LPSetVBuf)(struct IPerlStdIO*, PerlIO*, char*, int,
118                            Size_t);
119typedef void            (*LPSetCnt)(struct IPerlStdIO*, PerlIO*, int);
120typedef void            (*LPSetPtrCnt)(struct IPerlStdIO*, PerlIO*, char*,
121                            int);
122typedef void            (*LPSetlinebuf)(struct IPerlStdIO*, PerlIO*);
123typedef int             (*LPPrintf)(struct IPerlStdIO*, PerlIO*, const char*,
124                            ...);
125typedef int             (*LPVprintf)(struct IPerlStdIO*, PerlIO*, const char*,
126                            va_list);
127typedef long            (*LPTell)(struct IPerlStdIO*, PerlIO*);
128typedef int             (*LPSeek)(struct IPerlStdIO*, PerlIO*, Off_t, int);
129typedef void            (*LPRewind)(struct IPerlStdIO*, PerlIO*);
130typedef PerlIO*         (*LPTmpfile)(struct IPerlStdIO*);
131typedef int             (*LPGetpos)(struct IPerlStdIO*, PerlIO*, Fpos_t*);
132typedef int             (*LPSetpos)(struct IPerlStdIO*, PerlIO*,
133                            const Fpos_t*);
134typedef void            (*LPInit)(struct IPerlStdIO*);
135typedef void            (*LPInitOSExtras)(struct IPerlStdIO*);
136typedef PerlIO*         (*LPFdupopen)(struct IPerlStdIO*, PerlIO*);
137
138struct IPerlStdIO
139{
140    LPStdin             pStdin;
141    LPStdout            pStdout;
142    LPStderr            pStderr;
143    LPOpen              pOpen;
144    LPClose             pClose;
145    LPEof               pEof;
146    LPError             pError;
147    LPClearerr          pClearerr;
148    LPGetc              pGetc;
149    LPGetBase           pGetBase;
150    LPGetBufsiz         pGetBufsiz;
151    LPGetCnt            pGetCnt;
152    LPGetPtr            pGetPtr;
153    LPGets              pGets;
154    LPPutc              pPutc;
155    LPPuts              pPuts;
156    LPFlush             pFlush;
157    LPUngetc            pUngetc;
158    LPFileno            pFileno;
159    LPFdopen            pFdopen;
160    LPReopen            pReopen;
161    LPRead              pRead;
162    LPWrite             pWrite;
163    LPSetBuf            pSetBuf;
164    LPSetVBuf           pSetVBuf;
165    LPSetCnt            pSetCnt;
166    LPSetPtrCnt         pSetPtrCnt;
167    LPSetlinebuf        pSetlinebuf;
168    LPPrintf            pPrintf;
169    LPVprintf           pVprintf;
170    LPTell              pTell;
171    LPSeek              pSeek;
172    LPRewind            pRewind;
173    LPTmpfile           pTmpfile;
174    LPGetpos            pGetpos;
175    LPSetpos            pSetpos;
176    LPInit              pInit;
177    LPInitOSExtras      pInitOSExtras;
178    LPFdupopen          pFdupopen;
179};
180
181struct IPerlStdIOInfo
182{
183    unsigned long       nCount;     /* number of entries expected */
184    struct IPerlStdIO   perlStdIOList;
185};
186
187#ifdef USE_STDIO_PTR
188#  define PerlIO_has_cntptr(f)          1       
189#  ifdef STDIO_CNT_LVALUE
190#    define PerlIO_canset_cnt(f)        1     
191#    ifdef STDIO_PTR_LVALUE
192#      define PerlIO_fast_gets(f)       1       
193#    endif
194#  else
195#    define PerlIO_canset_cnt(f)        0     
196#  endif
197#else  /* USE_STDIO_PTR */
198#  define PerlIO_has_cntptr(f)          0
199#  define PerlIO_canset_cnt(f)          0
200#endif /* USE_STDIO_PTR */
201
202#ifndef PerlIO_fast_gets
203#define PerlIO_fast_gets(f)             0       
204#endif
205
206#ifdef FILE_base
207#define PerlIO_has_base(f)              1
208#else
209#define PerlIO_has_base(f)              0
210#endif
211
212#define PerlIO_stdin()                                                  \
213        (*PL_StdIO->pStdin)(PL_StdIO)
214#define PerlIO_stdout()                                                 \
215        (*PL_StdIO->pStdout)(PL_StdIO)
216#define PerlIO_stderr()                                                 \
217        (*PL_StdIO->pStderr)(PL_StdIO)
218#define PerlIO_open(x,y)                                                \
219        (*PL_StdIO->pOpen)(PL_StdIO, (x),(y))
220#define PerlIO_close(f)                                                 \
221        (*PL_StdIO->pClose)(PL_StdIO, (f))
222#define PerlIO_eof(f)                                                   \
223        (*PL_StdIO->pEof)(PL_StdIO, (f))
224#define PerlIO_error(f)                                                 \
225        (*PL_StdIO->pError)(PL_StdIO, (f))
226#define PerlIO_clearerr(f)                                              \
227        (*PL_StdIO->pClearerr)(PL_StdIO, (f))
228#define PerlIO_getc(f)                                                  \
229        (*PL_StdIO->pGetc)(PL_StdIO, (f))
230#define PerlIO_get_base(f)                                              \
231        (*PL_StdIO->pGetBase)(PL_StdIO, (f))
232#define PerlIO_get_bufsiz(f)                                            \
233        (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f))
234#define PerlIO_get_cnt(f)                                               \
235        (*PL_StdIO->pGetCnt)(PL_StdIO, (f))
236#define PerlIO_get_ptr(f)                                               \
237        (*PL_StdIO->pGetPtr)(PL_StdIO, (f))
238#define PerlIO_putc(f,c)                                                \
239        (*PL_StdIO->pPutc)(PL_StdIO, (f),(c))
240#define PerlIO_puts(f,s)                                                \
241        (*PL_StdIO->pPuts)(PL_StdIO, (f),(s))
242#define PerlIO_flush(f)                                                 \
243        (*PL_StdIO->pFlush)(PL_StdIO, (f))
244#define PerlIO_gets(s, n, fp)                                           \
245        (*PL_StdIO->pGets)(PL_StdIO, (fp), s, n)
246#define PerlIO_ungetc(f,c)                                              \
247        (*PL_StdIO->pUngetc)(PL_StdIO, (f),(c))
248#define PerlIO_fileno(f)                                                \
249        (*PL_StdIO->pFileno)(PL_StdIO, (f))
250#define PerlIO_fdopen(f, s)                                             \
251        (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s))
252#define PerlIO_reopen(p, m, f)                                          \
253        (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f))
254#define PerlIO_read(f,buf,count)                                        \
255        (SSize_t)(*PL_StdIO->pRead)(PL_StdIO, (f), (buf), (count))
256#define PerlIO_write(f,buf,count)                                       \
257        (*PL_StdIO->pWrite)(PL_StdIO, (f), (buf), (count))
258#define PerlIO_setbuf(f,b)                                              \
259        (*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b))
260#define PerlIO_setvbuf(f,b,t,s)                                         \
261        (*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s))
262#define PerlIO_set_cnt(f,c)                                             \
263        (*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c))
264#define PerlIO_set_ptrcnt(f,p,c)                                        \
265        (*PL_StdIO->pSetPtrCnt)(PL_StdIO, (f), (p), (c))
266#define PerlIO_setlinebuf(f)                                            \
267        (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f))
268#define PerlIO_printf           Perl_fprintf_nocontext
269#define PerlIO_stdoutf          *PL_StdIO->pPrintf
270#define PerlIO_vprintf(f,fmt,a)                                         \
271        (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a)         
272#define PerlIO_tell(f)                                                  \
273        (*PL_StdIO->pTell)(PL_StdIO, (f))
274#define PerlIO_seek(f,o,w)                                              \
275        (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w))
276#define PerlIO_getpos(f,p)                                              \
277        (*PL_StdIO->pGetpos)(PL_StdIO, (f),(p))
278#define PerlIO_setpos(f,p)                                              \
279        (*PL_StdIO->pSetpos)(PL_StdIO, (f),(p))
280#define PerlIO_rewind(f)                                                \
281        (*PL_StdIO->pRewind)(PL_StdIO, (f))
282#define PerlIO_tmpfile()                                                \
283        (*PL_StdIO->pTmpfile)(PL_StdIO)
284#define PerlIO_init()                                                   \
285        (*PL_StdIO->pInit)(PL_StdIO)
286#undef  init_os_extras
287#define init_os_extras()                                                \
288        (*PL_StdIO->pInitOSExtras)(PL_StdIO)
289#define PerlIO_fdupopen(f)                                              \
290        (*PL_StdIO->pFdupopen)(PL_StdIO, (f))
291
292#else   /* PERL_IMPLICIT_SYS */
293
294#include "perlsdio.h"
295#include "perl.h"
296#define PerlIO_fdupopen(f)              (f)
297
298#endif  /* PERL_IMPLICIT_SYS */
299
300#ifndef PERLIO_IS_STDIO
301#ifdef USE_SFIO
302#include "perlsfio.h"
303#endif /* USE_SFIO */
304#endif /* PERLIO_IS_STDIO */
305
306#ifndef EOF
307#define EOF (-1)
308#endif
309
310/* This is to catch case with no stdio */
311#ifndef BUFSIZ
312#define BUFSIZ 1024
313#endif
314
315#ifndef SEEK_SET
316#define SEEK_SET 0
317#endif
318
319#ifndef SEEK_CUR
320#define SEEK_CUR 1
321#endif
322
323#ifndef SEEK_END
324#define SEEK_END 2
325#endif
326
327#ifndef PerlIO
328struct _PerlIO;
329#define PerlIO struct _PerlIO
330#endif /* No PerlIO */
331
332#ifndef Fpos_t
333#define Fpos_t long
334#endif
335
336#ifndef NEXT30_NO_ATTRIBUTE
337#ifndef HASATTRIBUTE       /* disable GNU-cc attribute checking? */
338#ifdef  __attribute__      /* Avoid possible redefinition errors */
339#undef  __attribute__
340#endif
341#define __attribute__(attr)
342#endif
343#endif
344
345#ifndef PerlIO_stdoutf
346extern int      PerlIO_stdoutf          (const char *,...)
347                                        __attribute__((__format__ (__printf__, 1, 2)));
348#endif
349#ifndef PerlIO_puts
350extern int      PerlIO_puts             (PerlIO *,const char *);
351#endif
352#ifndef PerlIO_open
353extern PerlIO * PerlIO_open             (const char *,const char *);
354#endif
355#ifndef PerlIO_close
356extern int      PerlIO_close            (PerlIO *);
357#endif
358#ifndef PerlIO_eof
359extern int      PerlIO_eof              (PerlIO *);
360#endif
361#ifndef PerlIO_error
362extern int      PerlIO_error            (PerlIO *);
363#endif
364#ifndef PerlIO_clearerr
365extern void     PerlIO_clearerr         (PerlIO *);
366#endif
367#ifndef PerlIO_getc
368extern int      PerlIO_getc             (PerlIO *);
369#endif
370#ifndef PerlIO_putc
371extern int      PerlIO_putc             (PerlIO *,int);
372#endif
373#ifndef PerlIO_flush
374extern int      PerlIO_flush            (PerlIO *);
375#endif
376#ifndef PerlIO_ungetc
377extern int      PerlIO_ungetc           (PerlIO *,int);
378#endif
379#ifndef PerlIO_fileno
380extern int      PerlIO_fileno           (PerlIO *);
381#endif
382#ifndef PerlIO_fdopen
383extern PerlIO * PerlIO_fdopen           (int, const char *);
384#endif
385#ifndef PerlIO_importFILE
386extern PerlIO * PerlIO_importFILE       (FILE *,int);
387#endif
388#ifndef PerlIO_exportFILE
389extern FILE *   PerlIO_exportFILE       (PerlIO *,int);
390#endif
391#ifndef PerlIO_findFILE
392extern FILE *   PerlIO_findFILE         (PerlIO *);
393#endif
394#ifndef PerlIO_releaseFILE
395extern void     PerlIO_releaseFILE      (PerlIO *,FILE *);
396#endif
397#ifndef PerlIO_read
398extern SSize_t  PerlIO_read             (PerlIO *,void *,Size_t);
399#endif
400#ifndef PerlIO_write
401extern SSize_t  PerlIO_write            (PerlIO *,const void *,Size_t);
402#endif
403#ifndef PerlIO_setlinebuf
404extern void     PerlIO_setlinebuf       (PerlIO *);
405#endif
406#ifndef PerlIO_printf
407extern int      PerlIO_printf           (PerlIO *, const char *,...)
408                                        __attribute__((__format__ (__printf__, 2, 3)));
409#endif
410#ifndef PerlIO_sprintf
411extern int      PerlIO_sprintf          (char *, int, const char *,...)
412                                        __attribute__((__format__ (__printf__, 3, 4)));
413#endif
414#ifndef PerlIO_vprintf
415extern int      PerlIO_vprintf          (PerlIO *, const char *, va_list);
416#endif
417#ifndef PerlIO_tell
418extern Off_t    PerlIO_tell             (PerlIO *);
419#endif
420#ifndef PerlIO_seek
421extern int      PerlIO_seek             (PerlIO *, Off_t, int);
422#endif
423#ifndef PerlIO_rewind
424extern void     PerlIO_rewind           (PerlIO *);
425#endif
426#ifndef PerlIO_has_base
427extern int      PerlIO_has_base         (PerlIO *);
428#endif
429#ifndef PerlIO_has_cntptr
430extern int      PerlIO_has_cntptr       (PerlIO *);
431#endif
432#ifndef PerlIO_fast_gets
433extern int      PerlIO_fast_gets        (PerlIO *);
434#endif
435#ifndef PerlIO_canset_cnt
436extern int      PerlIO_canset_cnt       (PerlIO *);
437#endif
438#ifndef PerlIO_get_ptr
439extern STDCHAR * PerlIO_get_ptr         (PerlIO *);
440#endif
441#ifndef PerlIO_get_cnt
442extern int      PerlIO_get_cnt          (PerlIO *);
443#endif
444#ifndef PerlIO_set_cnt
445extern void     PerlIO_set_cnt          (PerlIO *,int);
446#endif
447#ifndef PerlIO_set_ptrcnt
448extern void     PerlIO_set_ptrcnt       (PerlIO *,STDCHAR *,int);
449#endif
450#ifndef PerlIO_get_base
451extern STDCHAR * PerlIO_get_base        (PerlIO *);
452#endif
453#ifndef PerlIO_get_bufsiz
454extern int      PerlIO_get_bufsiz       (PerlIO *);
455#endif
456#ifndef PerlIO_tmpfile
457extern PerlIO * PerlIO_tmpfile          (void);
458#endif
459#ifndef PerlIO_stdin
460extern PerlIO * PerlIO_stdin    (void);
461#endif
462#ifndef PerlIO_stdout
463extern PerlIO * PerlIO_stdout   (void);
464#endif
465#ifndef PerlIO_stderr
466extern PerlIO * PerlIO_stderr   (void);
467#endif
468#ifndef PerlIO_getpos
469extern int      PerlIO_getpos           (PerlIO *,Fpos_t *);
470#endif
471#ifndef PerlIO_setpos
472extern int      PerlIO_setpos           (PerlIO *,const Fpos_t *);
473#endif
474#ifndef PerlIO_fdupopen
475extern PerlIO * PerlIO_fdupopen         (PerlIO *);
476#endif
477
478
479/*
480 *   Interface for directory functions
481 */
482
483#if defined(PERL_IMPLICIT_SYS)
484
485/* IPerlDir             */
486struct IPerlDir;
487struct IPerlDirInfo;
488typedef int             (*LPMakedir)(struct IPerlDir*, const char*, int);
489typedef int             (*LPChdir)(struct IPerlDir*, const char*);
490typedef int             (*LPRmdir)(struct IPerlDir*, const char*);
491typedef int             (*LPDirClose)(struct IPerlDir*, DIR*);
492typedef DIR*            (*LPDirOpen)(struct IPerlDir*, char*);
493typedef struct direct*  (*LPDirRead)(struct IPerlDir*, DIR*);
494typedef void            (*LPDirRewind)(struct IPerlDir*, DIR*);
495typedef void            (*LPDirSeek)(struct IPerlDir*, DIR*, long);
496typedef long            (*LPDirTell)(struct IPerlDir*, DIR*);
497#ifdef WIN32
498typedef char*           (*LPDirMapPathA)(struct IPerlDir*, const char*);
499typedef WCHAR*          (*LPDirMapPathW)(struct IPerlDir*, const WCHAR*);
500#endif
501
502struct IPerlDir
503{
504    LPMakedir           pMakedir;
505    LPChdir             pChdir;
506    LPRmdir             pRmdir;
507    LPDirClose          pClose;
508    LPDirOpen           pOpen;
509    LPDirRead           pRead;
510    LPDirRewind         pRewind;
511    LPDirSeek           pSeek;
512    LPDirTell           pTell;
513#ifdef WIN32
514    LPDirMapPathA       pMapPathA;
515    LPDirMapPathW       pMapPathW;
516#endif
517};
518
519struct IPerlDirInfo
520{
521    unsigned long       nCount;     /* number of entries expected */
522    struct IPerlDir     perlDirList;
523};
524
525#define PerlDir_mkdir(name, mode)                               \
526        (*PL_Dir->pMakedir)(PL_Dir, (name), (mode))
527#define PerlDir_chdir(name)                                     \
528        (*PL_Dir->pChdir)(PL_Dir, (name))
529#define PerlDir_rmdir(name)                                     \
530        (*PL_Dir->pRmdir)(PL_Dir, (name))
531#define PerlDir_close(dir)                                      \
532        (*PL_Dir->pClose)(PL_Dir, (dir))
533#define PerlDir_open(name)                                      \
534        (*PL_Dir->pOpen)(PL_Dir, (name))
535#define PerlDir_read(dir)                                       \
536        (*PL_Dir->pRead)(PL_Dir, (dir))
537#define PerlDir_rewind(dir)                                     \
538        (*PL_Dir->pRewind)(PL_Dir, (dir))
539#define PerlDir_seek(dir, loc)                                  \
540        (*PL_Dir->pSeek)(PL_Dir, (dir), (loc))
541#define PerlDir_tell(dir)                                       \
542        (*PL_Dir->pTell)(PL_Dir, (dir))
543#ifdef WIN32
544#define PerlDir_mapA(dir)                                       \
545        (*PL_Dir->pMapPathA)(PL_Dir, (dir))
546#define PerlDir_mapW(dir)                                       \
547        (*PL_Dir->pMapPathW)(PL_Dir, (dir))
548#endif
549
550#else   /* PERL_IMPLICIT_SYS */
551
552#define PerlDir_mkdir(name, mode)       Mkdir((name), (mode))
553#ifdef VMS
554#  define PerlDir_chdir(n)              chdir(((n) && *(n)) ? (n) : "SYS$LOGIN")
555#else
556#  define PerlDir_chdir(name)           chdir((name))
557#endif
558#define PerlDir_rmdir(name)             rmdir((name))
559#define PerlDir_close(dir)              closedir((dir))
560#define PerlDir_open(name)              opendir((name))
561#define PerlDir_read(dir)               readdir((dir))
562#define PerlDir_rewind(dir)             rewinddir((dir))
563#define PerlDir_seek(dir, loc)          seekdir((dir), (loc))
564#define PerlDir_tell(dir)               telldir((dir))
565#ifdef WIN32
566#define PerlDir_mapA(dir)               dir
567#define PerlDir_mapW(dir)               dir
568#endif
569
570#endif  /* PERL_IMPLICIT_SYS */
571
572/*
573    Interface for perl environment functions
574*/
575
576#if defined(PERL_IMPLICIT_SYS)
577
578/* IPerlEnv             */
579struct IPerlEnv;
580struct IPerlEnvInfo;
581typedef char*           (*LPEnvGetenv)(struct IPerlEnv*, const char*);
582typedef int             (*LPEnvPutenv)(struct IPerlEnv*, const char*);
583typedef char*           (*LPEnvGetenv_len)(struct IPerlEnv*,
584                                    const char *varname, unsigned long *len);
585typedef int             (*LPEnvUname)(struct IPerlEnv*, struct utsname *name);
586typedef void            (*LPEnvClearenv)(struct IPerlEnv*);
587typedef void*           (*LPEnvGetChildenv)(struct IPerlEnv*);
588typedef void            (*LPEnvFreeChildenv)(struct IPerlEnv*, void* env);
589typedef char*           (*LPEnvGetChilddir)(struct IPerlEnv*);
590typedef void            (*LPEnvFreeChilddir)(struct IPerlEnv*, char* dir);
591#ifdef HAS_ENVGETENV
592typedef char*           (*LPENVGetenv)(struct IPerlEnv*, const char *varname);
593typedef char*           (*LPENVGetenv_len)(struct IPerlEnv*,
594                                    const char *varname, unsigned long *len);
595#endif
596#ifdef WIN32
597typedef unsigned long   (*LPEnvOsID)(struct IPerlEnv*);
598typedef char*           (*LPEnvLibPath)(struct IPerlEnv*, const char*);
599typedef char*           (*LPEnvSiteLibPath)(struct IPerlEnv*, const char*);
600typedef char*           (*LPEnvVendorLibPath)(struct IPerlEnv*, const char*);
601typedef void            (*LPEnvGetChildIO)(struct IPerlEnv*, child_IO_table*);
602#endif
603
604struct IPerlEnv
605{
606    LPEnvGetenv         pGetenv;
607    LPEnvPutenv         pPutenv;
608    LPEnvGetenv_len     pGetenv_len;
609    LPEnvUname          pEnvUname;
610    LPEnvClearenv       pClearenv;
611    LPEnvGetChildenv    pGetChildenv;
612    LPEnvFreeChildenv   pFreeChildenv;
613    LPEnvGetChilddir    pGetChilddir;
614    LPEnvFreeChilddir   pFreeChilddir;
615#ifdef HAS_ENVGETENV
616    LPENVGetenv         pENVGetenv;
617    LPENVGetenv_len     pENVGetenv_len;
618#endif
619#ifdef WIN32
620    LPEnvOsID           pEnvOsID;
621    LPEnvLibPath        pLibPath;
622    LPEnvSiteLibPath    pSiteLibPath;
623    LPEnvVendorLibPath  pVendorLibPath;
624    LPEnvGetChildIO     pGetChildIO;
625#endif
626};
627
628struct IPerlEnvInfo
629{
630    unsigned long       nCount;     /* number of entries expected */
631    struct IPerlEnv     perlEnvList;
632};
633
634#define PerlEnv_putenv(str)                                     \
635        (*PL_Env->pPutenv)(PL_Env,(str))
636#define PerlEnv_getenv(str)                                     \
637        (*PL_Env->pGetenv)(PL_Env,(str))
638#define PerlEnv_getenv_len(str,l)                               \
639        (*PL_Env->pGetenv_len)(PL_Env,(str), (l))
640#define PerlEnv_clearenv()                                      \
641        (*PL_Env->pClearenv)(PL_Env)
642#define PerlEnv_get_childenv()                                  \
643        (*PL_Env->pGetChildenv)(PL_Env)
644#define PerlEnv_free_childenv(e)                                \
645        (*PL_Env->pFreeChildenv)(PL_Env, (e))
646#define PerlEnv_get_childdir()                                  \
647        (*PL_Env->pGetChilddir)(PL_Env)
648#define PerlEnv_free_childdir(d)                                \
649        (*PL_Env->pFreeChilddir)(PL_Env, (d))
650#ifdef HAS_ENVGETENV
651#  define PerlEnv_ENVgetenv(str)                                \
652        (*PL_Env->pENVGetenv)(PL_Env,(str))
653#  define PerlEnv_ENVgetenv_len(str,l)                          \
654        (*PL_Env->pENVGetenv_len)(PL_Env,(str), (l))
655#else
656#  define PerlEnv_ENVgetenv(str)                                \
657        PerlEnv_getenv((str))
658#  define PerlEnv_ENVgetenv_len(str,l)                          \
659        PerlEnv_getenv_len((str),(l))
660#endif
661#define PerlEnv_uname(name)                                     \
662        (*PL_Env->pEnvUname)(PL_Env,(name))
663#ifdef WIN32
664#define PerlEnv_os_id()                                         \
665        (*PL_Env->pEnvOsID)(PL_Env)
666#define PerlEnv_lib_path(str)                                   \
667        (*PL_Env->pLibPath)(PL_Env,(str))
668#define PerlEnv_sitelib_path(str)                               \
669        (*PL_Env->pSiteLibPath)(PL_Env,(str))
670#define PerlEnv_vendorlib_path(str)                             \
671        (*PL_Env->pVendorLibPath)(PL_Env,(str))
672#define PerlEnv_get_child_IO(ptr)                               \
673        (*PL_Env->pGetChildIO)(PL_Env, ptr)
674#endif
675
676#else   /* PERL_IMPLICIT_SYS */
677
678#define PerlEnv_putenv(str)             putenv((str))
679#define PerlEnv_getenv(str)             getenv((str))
680#define PerlEnv_getenv_len(str,l)       getenv_len((str), (l))
681#define PerlEnv_clearenv()              clearenv()
682#define PerlEnv_get_childenv()          get_childenv()
683#define PerlEnv_free_childenv(e)        free_childenv((e))
684#define PerlEnv_get_childdir()          get_childdir()
685#define PerlEnv_free_childdir(d)        free_childdir((d))
686#ifdef HAS_ENVGETENV
687#  define PerlEnv_ENVgetenv(str)        ENVgetenv((str))
688#  define PerlEnv_ENVgetenv_len(str,l)  ENVgetenv_len((str), (l))
689#else
690#  define PerlEnv_ENVgetenv(str)        PerlEnv_getenv((str))
691#  define PerlEnv_ENVgetenv_len(str,l)  PerlEnv_getenv_len((str), (l))
692#endif
693#define PerlEnv_uname(name)             uname((name))
694
695#ifdef WIN32
696#define PerlEnv_os_id()                 win32_os_id()
697#define PerlEnv_lib_path(str)           win32_get_privlib(str)
698#define PerlEnv_sitelib_path(str)       win32_get_sitelib(str)
699#define PerlEnv_vendorlib_path(str)     win32_get_vendorlib(str)
700#define PerlEnv_get_child_IO(ptr)       win32_get_child_IO(ptr)
701#endif
702
703#endif  /* PERL_IMPLICIT_SYS */
704
705/*
706    Interface for perl low-level IO functions
707*/
708
709#if defined(PERL_IMPLICIT_SYS)
710
711/* IPerlLIO             */
712struct IPerlLIO;
713struct IPerlLIOInfo;
714typedef int             (*LPLIOAccess)(struct IPerlLIO*, const char*, int);
715typedef int             (*LPLIOChmod)(struct IPerlLIO*, const char*, int);
716typedef int             (*LPLIOChown)(struct IPerlLIO*, const char*, uid_t,
717                            gid_t);
718typedef int             (*LPLIOChsize)(struct IPerlLIO*, int, long);
719typedef int             (*LPLIOClose)(struct IPerlLIO*, int);
720typedef int             (*LPLIODup)(struct IPerlLIO*, int);
721typedef int             (*LPLIODup2)(struct IPerlLIO*, int, int);
722typedef int             (*LPLIOFlock)(struct IPerlLIO*, int, int);
723typedef int             (*LPLIOFileStat)(struct IPerlLIO*, int, struct stat*);
724typedef int             (*LPLIOIOCtl)(struct IPerlLIO*, int, unsigned int,
725                            char*);
726typedef int             (*LPLIOIsatty)(struct IPerlLIO*, int);
727typedef int             (*LPLIOLink)(struct IPerlLIO*, const char*,
728                                     const char *);
729typedef long            (*LPLIOLseek)(struct IPerlLIO*, int, long, int);
730typedef int             (*LPLIOLstat)(struct IPerlLIO*, const char*,
731                            struct stat*);
732typedef char*           (*LPLIOMktemp)(struct IPerlLIO*, char*);
733typedef int             (*LPLIOOpen)(struct IPerlLIO*, const char*, int);       
734typedef int             (*LPLIOOpen3)(struct IPerlLIO*, const char*, int, int);
735typedef int             (*LPLIORead)(struct IPerlLIO*, int, void*, unsigned int);
736typedef int             (*LPLIORename)(struct IPerlLIO*, const char*,
737                            const char*);
738typedef int             (*LPLIOSetmode)(struct IPerlLIO*, int, int);
739typedef int             (*LPLIONameStat)(struct IPerlLIO*, const char*,
740                            struct stat*);
741typedef char*           (*LPLIOTmpnam)(struct IPerlLIO*, char*);
742typedef int             (*LPLIOUmask)(struct IPerlLIO*, int);
743typedef int             (*LPLIOUnlink)(struct IPerlLIO*, const char*);
744typedef int             (*LPLIOUtime)(struct IPerlLIO*, char*, struct utimbuf*);
745typedef int             (*LPLIOWrite)(struct IPerlLIO*, int, const void*,
746                            unsigned int);
747
748struct IPerlLIO
749{
750    LPLIOAccess         pAccess;
751    LPLIOChmod          pChmod;
752    LPLIOChown          pChown;
753    LPLIOChsize         pChsize;
754    LPLIOClose          pClose;
755    LPLIODup            pDup;
756    LPLIODup2           pDup2;
757    LPLIOFlock          pFlock;
758    LPLIOFileStat       pFileStat;
759    LPLIOIOCtl          pIOCtl;
760    LPLIOIsatty         pIsatty;
761    LPLIOLink           pLink;
762    LPLIOLseek          pLseek;
763    LPLIOLstat          pLstat;
764    LPLIOMktemp         pMktemp;
765    LPLIOOpen           pOpen;
766    LPLIOOpen3          pOpen3;
767    LPLIORead           pRead;
768    LPLIORename         pRename;
769    LPLIOSetmode        pSetmode;
770    LPLIONameStat       pNameStat;
771    LPLIOTmpnam         pTmpnam;
772    LPLIOUmask          pUmask;
773    LPLIOUnlink         pUnlink;
774    LPLIOUtime          pUtime;
775    LPLIOWrite          pWrite;
776};
777
778struct IPerlLIOInfo
779{
780    unsigned long       nCount;     /* number of entries expected */
781    struct IPerlLIO     perlLIOList;
782};
783
784#define PerlLIO_access(file, mode)                                      \
785        (*PL_LIO->pAccess)(PL_LIO, (file), (mode))
786#define PerlLIO_chmod(file, mode)                                       \
787        (*PL_LIO->pChmod)(PL_LIO, (file), (mode))
788#define PerlLIO_chown(file, owner, group)                               \
789        (*PL_LIO->pChown)(PL_LIO, (file), (owner), (group))
790#define PerlLIO_chsize(fd, size)                                        \
791        (*PL_LIO->pChsize)(PL_LIO, (fd), (size))
792#define PerlLIO_close(fd)                                               \
793        (*PL_LIO->pClose)(PL_LIO, (fd))
794#define PerlLIO_dup(fd)                                                 \
795        (*PL_LIO->pDup)(PL_LIO, (fd))
796#define PerlLIO_dup2(fd1, fd2)                                          \
797        (*PL_LIO->pDup2)(PL_LIO, (fd1), (fd2))
798#define PerlLIO_flock(fd, op)                                           \
799        (*PL_LIO->pFlock)(PL_LIO, (fd), (op))
800#define PerlLIO_fstat(fd, buf)                                          \
801        (*PL_LIO->pFileStat)(PL_LIO, (fd), (buf))
802#define PerlLIO_ioctl(fd, u, buf)                                       \
803        (*PL_LIO->pIOCtl)(PL_LIO, (fd), (u), (buf))
804#define PerlLIO_isatty(fd)                                              \
805        (*PL_LIO->pIsatty)(PL_LIO, (fd))
806#define PerlLIO_link(oldname, newname)                                  \
807        (*PL_LIO->pLink)(PL_LIO, (oldname), (newname))
808#define PerlLIO_lseek(fd, offset, mode)                                 \
809        (*PL_LIO->pLseek)(PL_LIO, (fd), (offset), (mode))
810#define PerlLIO_lstat(name, buf)                                        \
811        (*PL_LIO->pLstat)(PL_LIO, (name), (buf))
812#define PerlLIO_mktemp(file)                                            \
813        (*PL_LIO->pMktemp)(PL_LIO, (file))
814#define PerlLIO_open(file, flag)                                        \
815        (*PL_LIO->pOpen)(PL_LIO, (file), (flag))
816#define PerlLIO_open3(file, flag, perm)                                 \
817        (*PL_LIO->pOpen3)(PL_LIO, (file), (flag), (perm))
818#define PerlLIO_read(fd, buf, count)                                    \
819        (*PL_LIO->pRead)(PL_LIO, (fd), (buf), (count))
820#define PerlLIO_rename(oname, newname)                                  \
821        (*PL_LIO->pRename)(PL_LIO, (oname), (newname))
822#define PerlLIO_setmode(fd, mode)                                       \
823        (*PL_LIO->pSetmode)(PL_LIO, (fd), (mode))
824#define PerlLIO_stat(name, buf)                                         \
825        (*PL_LIO->pNameStat)(PL_LIO, (name), (buf))
826#define PerlLIO_tmpnam(str)                                             \
827        (*PL_LIO->pTmpnam)(PL_LIO, (str))
828#define PerlLIO_umask(mode)                                             \
829        (*PL_LIO->pUmask)(PL_LIO, (mode))
830#define PerlLIO_unlink(file)                                            \
831        (*PL_LIO->pUnlink)(PL_LIO, (file))
832#define PerlLIO_utime(file, time)                                       \
833        (*PL_LIO->pUtime)(PL_LIO, (file), (time))
834#define PerlLIO_write(fd, buf, count)                                   \
835        (*PL_LIO->pWrite)(PL_LIO, (fd), (buf), (count))
836
837#else   /* PERL_IMPLICIT_SYS */
838
839#define PerlLIO_access(file, mode)      access((file), (mode))
840#define PerlLIO_chmod(file, mode)       chmod((file), (mode))
841#define PerlLIO_chown(file, owner, grp) chown((file), (owner), (grp))
842#define PerlLIO_chsize(fd, size)        chsize((fd), (size))
843#define PerlLIO_close(fd)               close((fd))
844#define PerlLIO_dup(fd)                 dup((fd))
845#define PerlLIO_dup2(fd1, fd2)          dup2((fd1), (fd2))
846#define PerlLIO_flock(fd, op)           FLOCK((fd), (op))
847#define PerlLIO_fstat(fd, buf)          Fstat((fd), (buf))
848#define PerlLIO_ioctl(fd, u, buf)       ioctl((fd), (u), (buf))
849#define PerlLIO_isatty(fd)              isatty((fd))
850#define PerlLIO_link(oldname, newname)  link((oldname), (newname))
851#define PerlLIO_lseek(fd, offset, mode) lseek((fd), (offset), (mode))
852#define PerlLIO_stat(name, buf)         Stat((name), (buf))
853#ifdef HAS_LSTAT
854#  define PerlLIO_lstat(name, buf)      lstat((name), (buf))
855#else
856#  define PerlLIO_lstat(name, buf)      PerlLIO_stat((name), (buf))
857#endif
858#define PerlLIO_mktemp(file)            mktemp((file))
859#define PerlLIO_mkstemp(file)           mkstemp((file))
860#define PerlLIO_open(file, flag)        open((file), (flag))
861#define PerlLIO_open3(file, flag, perm) open((file), (flag), (perm))
862#define PerlLIO_read(fd, buf, count)    read((fd), (buf), (count))
863#define PerlLIO_rename(old, new)        rename((old), (new))
864#define PerlLIO_setmode(fd, mode)       setmode((fd), (mode))
865#define PerlLIO_tmpnam(str)             tmpnam((str))
866#define PerlLIO_umask(mode)             umask((mode))
867#define PerlLIO_unlink(file)            unlink((file))
868#define PerlLIO_utime(file, time)       utime((file), (time))
869#define PerlLIO_write(fd, buf, count)   write((fd), (buf), (count))
870
871#endif  /* PERL_IMPLICIT_SYS */
872
873/*
874    Interface for perl memory allocation
875*/
876
877#if defined(PERL_IMPLICIT_SYS)
878
879/* IPerlMem             */
880struct IPerlMem;
881struct IPerlMemInfo;
882typedef void*           (*LPMemMalloc)(struct IPerlMem*, size_t);
883typedef void*           (*LPMemRealloc)(struct IPerlMem*, void*, size_t);
884typedef void            (*LPMemFree)(struct IPerlMem*, void*);
885typedef void*           (*LPMemCalloc)(struct IPerlMem*, size_t, size_t);
886typedef void            (*LPMemGetLock)(struct IPerlMem*);
887typedef void            (*LPMemFreeLock)(struct IPerlMem*);
888typedef int             (*LPMemIsLocked)(struct IPerlMem*);
889
890struct IPerlMem
891{
892    LPMemMalloc         pMalloc;
893    LPMemRealloc        pRealloc;
894    LPMemFree           pFree;
895    LPMemCalloc         pCalloc;
896    LPMemGetLock        pGetLock;
897    LPMemFreeLock       pFreeLock;
898    LPMemIsLocked       pIsLocked;
899};
900
901struct IPerlMemInfo
902{
903    unsigned long       nCount;     /* number of entries expected */
904    struct IPerlMem     perlMemList;
905};
906
907/* Interpreter specific memory macros */
908#define PerlMem_malloc(size)                                \
909        (*PL_Mem->pMalloc)(PL_Mem, (size))
910#define PerlMem_realloc(buf, size)                          \
911        (*PL_Mem->pRealloc)(PL_Mem, (buf), (size))
912#define PerlMem_free(buf)                                   \
913        (*PL_Mem->pFree)(PL_Mem, (buf))
914#define PerlMem_calloc(num, size)                           \
915        (*PL_Mem->pCalloc)(PL_Mem, (num), (size))
916#define PerlMem_get_lock()                                  \
917        (*PL_Mem->pGetLock)(PL_Mem)
918#define PerlMem_free_lock()                                 \
919        (*PL_Mem->pFreeLock)(PL_Mem)
920#define PerlMem_is_locked()                                 \
921        (*PL_Mem->pIsLocked)(PL_Mem)
922
923/* Shared memory macros */
924#define PerlMemShared_malloc(size)                          \
925        (*PL_MemShared->pMalloc)(PL_Mem, (size))
926#define PerlMemShared_realloc(buf, size)                    \
927        (*PL_MemShared->pRealloc)(PL_Mem, (buf), (size))
928#define PerlMemShared_free(buf)                             \
929        (*PL_MemShared->pFree)(PL_Mem, (buf))
930#define PerlMemShared_calloc(num, size)                     \
931        (*PL_MemShared->pCalloc)(PL_Mem, (num), (size))
932#define PerlMemShared_get_lock()                            \
933        (*PL_MemShared->pGetLock)(PL_Mem)
934#define PerlMemShared_free_lock()                           \
935        (*PL_MemShared->pFreeLock)(PL_Mem)
936#define PerlMemShared_is_locked()                           \
937        (*PL_MemShared->pIsLocked)(PL_Mem)
938
939
940/* Parse tree memory macros */
941#define PerlMemParse_malloc(size)                           \
942        (*PL_MemParse->pMalloc)(PL_Mem, (size))
943#define PerlMemParse_realloc(buf, size)                     \
944        (*PL_MemParse->pRealloc)(PL_Mem, (buf), (size))
945#define PerlMemParse_free(buf)                              \
946        (*PL_MemParse->pFree)(PL_Mem, (buf))
947#define PerlMemParse_calloc(num, size)                      \
948        (*PL_MemParse->pCalloc)(PL_Mem, (num), (size))
949#define PerlMemParse_get_lock()                             \
950        (*PL_MemParse->pGetLock)(PL_Mem)
951#define PerlMemParse_free_lock()                            \
952        (*PL_MemParse->pFreeLock)(PL_Mem)
953#define PerlMemParse_is_locked()                            \
954        (*PL_MemParse->pIsLocked)(PL_Mem)
955
956
957#else   /* PERL_IMPLICIT_SYS */
958
959/* Interpreter specific memory macros */
960#define PerlMem_malloc(size)            malloc((size))
961#define PerlMem_realloc(buf, size)      realloc((buf), (size))
962#define PerlMem_free(buf)               free((buf))
963#define PerlMem_calloc(num, size)       calloc((num), (size))
964#define PerlMem_get_lock()             
965#define PerlMem_free_lock()
966#define PerlMem_is_locked()             0
967
968/* Shared memory macros */
969#define PerlMemShared_malloc(size)              malloc((size))
970#define PerlMemShared_realloc(buf, size)        realloc((buf), (size))
971#define PerlMemShared_free(buf)                 free((buf))
972#define PerlMemShared_calloc(num, size)         calloc((num), (size))
973#define PerlMemShared_get_lock()               
974#define PerlMemShared_free_lock()
975#define PerlMemShared_is_locked()               0
976
977/* Parse tree memory macros */
978#define PerlMemParse_malloc(size)       malloc((size))
979#define PerlMemParse_realloc(buf, size) realloc((buf), (size))
980#define PerlMemParse_free(buf)          free((buf))
981#define PerlMemParse_calloc(num, size)  calloc((num), (size))
982#define PerlMemParse_get_lock()         
983#define PerlMemParse_free_lock()
984#define PerlMemParse_is_locked()        0
985
986#endif  /* PERL_IMPLICIT_SYS */
987
988/*
989    Interface for perl process functions
990*/
991
992
993#if defined(PERL_IMPLICIT_SYS)
994
995#ifndef jmp_buf
996#include <setjmp.h>
997#endif
998
999/* IPerlProc            */
1000struct IPerlProc;
1001struct IPerlProcInfo;
1002typedef void            (*LPProcAbort)(struct IPerlProc*);
1003typedef char*           (*LPProcCrypt)(struct IPerlProc*, const char*,
1004                            const char*);
1005typedef void            (*LPProcExit)(struct IPerlProc*, int);
1006typedef void            (*LPProc_Exit)(struct IPerlProc*, int);
1007typedef int             (*LPProcExecl)(struct IPerlProc*, const char*,
1008                            const char*, const char*, const char*,
1009                            const char*);
1010typedef int             (*LPProcExecv)(struct IPerlProc*, const char*,
1011                            const char*const*);
1012typedef int             (*LPProcExecvp)(struct IPerlProc*, const char*,
1013                            const char*const*);
1014typedef uid_t           (*LPProcGetuid)(struct IPerlProc*);
1015typedef uid_t           (*LPProcGeteuid)(struct IPerlProc*);
1016typedef gid_t           (*LPProcGetgid)(struct IPerlProc*);
1017typedef gid_t           (*LPProcGetegid)(struct IPerlProc*);
1018typedef char*           (*LPProcGetlogin)(struct IPerlProc*);
1019typedef int             (*LPProcKill)(struct IPerlProc*, int, int);
1020typedef int             (*LPProcKillpg)(struct IPerlProc*, int, int);
1021typedef int             (*LPProcPauseProc)(struct IPerlProc*);
1022typedef PerlIO*         (*LPProcPopen)(struct IPerlProc*, const char*,
1023                            const char*);
1024typedef int             (*LPProcPclose)(struct IPerlProc*, PerlIO*);
1025typedef int             (*LPProcPipe)(struct IPerlProc*, int*);
1026typedef int             (*LPProcSetuid)(struct IPerlProc*, uid_t);
1027typedef int             (*LPProcSetgid)(struct IPerlProc*, gid_t);
1028typedef int             (*LPProcSleep)(struct IPerlProc*, unsigned int);
1029typedef int             (*LPProcTimes)(struct IPerlProc*, struct tms*);
1030typedef int             (*LPProcWait)(struct IPerlProc*, int*);
1031typedef int             (*LPProcWaitpid)(struct IPerlProc*, int, int*, int);
1032typedef Sighandler_t    (*LPProcSignal)(struct IPerlProc*, int, Sighandler_t);
1033typedef int             (*LPProcFork)(struct IPerlProc*);
1034typedef int             (*LPProcGetpid)(struct IPerlProc*);
1035#ifdef WIN32
1036typedef void*           (*LPProcDynaLoader)(struct IPerlProc*, const char*);
1037typedef void            (*LPProcGetOSError)(struct IPerlProc*,
1038                            SV* sv, DWORD dwErr);
1039typedef void            (*LPProcFreeBuf)(struct IPerlProc*, char*);
1040typedef BOOL            (*LPProcDoCmd)(struct IPerlProc*, char*);
1041typedef int             (*LPProcSpawn)(struct IPerlProc*, char*);
1042typedef int             (*LPProcSpawnvp)(struct IPerlProc*, int, const char*,
1043                            const char*const*);
1044typedef int             (*LPProcASpawn)(struct IPerlProc*, void*, void**, void**);
1045#endif
1046
1047struct IPerlProc
1048{
1049    LPProcAbort         pAbort;
1050    LPProcCrypt         pCrypt;
1051    LPProcExit          pExit;
1052    LPProc_Exit         p_Exit;
1053    LPProcExecl         pExecl;
1054    LPProcExecv         pExecv;
1055    LPProcExecvp        pExecvp;
1056    LPProcGetuid        pGetuid;
1057    LPProcGeteuid       pGeteuid;
1058    LPProcGetgid        pGetgid;
1059    LPProcGetegid       pGetegid;
1060    LPProcGetlogin      pGetlogin;
1061    LPProcKill          pKill;
1062    LPProcKillpg        pKillpg;
1063    LPProcPauseProc     pPauseProc;
1064    LPProcPopen         pPopen;
1065    LPProcPclose        pPclose;
1066    LPProcPipe          pPipe;
1067    LPProcSetuid        pSetuid;
1068    LPProcSetgid        pSetgid;
1069    LPProcSleep         pSleep;
1070    LPProcTimes         pTimes;
1071    LPProcWait          pWait;
1072    LPProcWaitpid       pWaitpid;
1073    LPProcSignal        pSignal;
1074    LPProcFork          pFork;
1075    LPProcGetpid        pGetpid;
1076#ifdef WIN32
1077    LPProcDynaLoader    pDynaLoader;
1078    LPProcGetOSError    pGetOSError;
1079    LPProcDoCmd         pDoCmd;
1080    LPProcSpawn         pSpawn;
1081    LPProcSpawnvp       pSpawnvp;
1082    LPProcASpawn        pASpawn;
1083#endif
1084};
1085
1086struct IPerlProcInfo
1087{
1088    unsigned long       nCount;     /* number of entries expected */
1089    struct IPerlProc    perlProcList;
1090};
1091
1092#define PerlProc_abort()                                                \
1093        (*PL_Proc->pAbort)(PL_Proc)
1094#define PerlProc_crypt(c,s)                                             \
1095        (*PL_Proc->pCrypt)(PL_Proc, (c), (s))
1096#define PerlProc_exit(s)                                                \
1097        (*PL_Proc->pExit)(PL_Proc, (s))
1098#define PerlProc__exit(s)                                               \
1099        (*PL_Proc->p_Exit)(PL_Proc, (s))
1100#define PerlProc_execl(c, w, x, y, z)                                   \
1101        (*PL_Proc->pExecl)(PL_Proc, (c), (w), (x), (y), (z))
1102#define PerlProc_execv(c, a)                                            \
1103        (*PL_Proc->pExecv)(PL_Proc, (c), (a))
1104#define PerlProc_execvp(c, a)                                           \
1105        (*PL_Proc->pExecvp)(PL_Proc, (c), (a))
1106#define PerlProc_getuid()                                               \
1107        (*PL_Proc->pGetuid)(PL_Proc)
1108#define PerlProc_geteuid()                                              \
1109        (*PL_Proc->pGeteuid)(PL_Proc)
1110#define PerlProc_getgid()                                               \
1111        (*PL_Proc->pGetgid)(PL_Proc)
1112#define PerlProc_getegid()                                              \
1113        (*PL_Proc->pGetegid)(PL_Proc)
1114#define PerlProc_getlogin()                                             \
1115        (*PL_Proc->pGetlogin)(PL_Proc)
1116#define PerlProc_kill(i, a)                                             \
1117        (*PL_Proc->pKill)(PL_Proc, (i), (a))
1118#define PerlProc_killpg(i, a)                                           \
1119        (*PL_Proc->pKillpg)(PL_Proc, (i), (a))
1120#define PerlProc_pause()                                                \
1121        (*PL_Proc->pPauseProc)(PL_Proc)
1122#define PerlProc_popen(c, m)                                            \
1123        (*PL_Proc->pPopen)(PL_Proc, (c), (m))
1124#define PerlProc_pclose(f)                                              \
1125        (*PL_Proc->pPclose)(PL_Proc, (f))
1126#define PerlProc_pipe(fd)                                               \
1127        (*PL_Proc->pPipe)(PL_Proc, (fd))
1128#define PerlProc_setuid(u)                                              \
1129        (*PL_Proc->pSetuid)(PL_Proc, (u))
1130#define PerlProc_setgid(g)                                              \
1131        (*PL_Proc->pSetgid)(PL_Proc, (g))
1132#define PerlProc_sleep(t)                                               \
1133        (*PL_Proc->pSleep)(PL_Proc, (t))
1134#define PerlProc_times(t)                                               \
1135        (*PL_Proc->pTimes)(PL_Proc, (t))
1136#define PerlProc_wait(t)                                                \
1137        (*PL_Proc->pWait)(PL_Proc, (t))
1138#define PerlProc_waitpid(p,s,f)                                         \
1139        (*PL_Proc->pWaitpid)(PL_Proc, (p), (s), (f))
1140#define PerlProc_signal(n, h)                                           \
1141        (*PL_Proc->pSignal)(PL_Proc, (n), (h))
1142#define PerlProc_fork()                                                 \
1143        (*PL_Proc->pFork)(PL_Proc)
1144#define PerlProc_getpid()                                               \
1145        (*PL_Proc->pGetpid)(PL_Proc)
1146#define PerlProc_setjmp(b, n) Sigsetjmp((b), (n))
1147#define PerlProc_longjmp(b, n) Siglongjmp((b), (n))
1148
1149#ifdef WIN32
1150#define PerlProc_DynaLoad(f)                                            \
1151        (*PL_Proc->pDynaLoader)(PL_Proc, (f))
1152#define PerlProc_GetOSError(s,e)                                        \
1153        (*PL_Proc->pGetOSError)(PL_Proc, (s), (e))
1154#define PerlProc_Cmd(s)                                                 \
1155        (*PL_Proc->pDoCmd)(PL_Proc, (s))
1156#define do_spawn(s)                                                     \
1157        (*PL_Proc->pSpawn)(PL_Proc, (s))
1158#define do_spawnvp(m, c, a)                                             \
1159        (*PL_Proc->pSpawnvp)(PL_Proc, (m), (c), (a))
1160#define PerlProc_aspawn(m,c,a)                                          \
1161        (*PL_Proc->pASpawn)(PL_Proc, (m), (c), (a))
1162#endif
1163
1164#else   /* PERL_IMPLICIT_SYS */
1165
1166#define PerlProc_abort()        abort()
1167#define PerlProc_crypt(c,s)     crypt((c), (s))
1168#define PerlProc_exit(s)        exit((s))
1169#define PerlProc__exit(s)       _exit((s))
1170#define PerlProc_execl(c,w,x,y,z)                                       \
1171        execl((c), (w), (x), (y), (z))
1172#define PerlProc_execv(c, a)    execv((c), (a))
1173#define PerlProc_execvp(c, a)   execvp((c), (a))
1174#define PerlProc_getuid()       getuid()
1175#define PerlProc_geteuid()      geteuid()
1176#define PerlProc_getgid()       getgid()
1177#define PerlProc_getegid()      getegid()
1178#define PerlProc_getlogin()     getlogin()
1179#define PerlProc_kill(i, a)     kill((i), (a))
1180#define PerlProc_killpg(i, a)   killpg((i), (a))
1181#define PerlProc_pause()        Pause()
1182#define PerlProc_popen(c, m)    my_popen((c), (m))
1183#define PerlProc_pclose(f)      my_pclose((f))
1184#define PerlProc_pipe(fd)       pipe((fd))
1185#define PerlProc_setuid(u)      setuid((u))
1186#define PerlProc_setgid(g)      setgid((g))
1187#define PerlProc_sleep(t)       sleep((t))
1188#define PerlProc_times(t)       times((t))
1189#define PerlProc_wait(t)        wait((t))
1190#define PerlProc_waitpid(p,s,f) waitpid((p), (s), (f))
1191#define PerlProc_setjmp(b, n)   Sigsetjmp((b), (n))
1192#define PerlProc_longjmp(b, n)  Siglongjmp((b), (n))
1193#define PerlProc_signal(n, h)   signal((n), (h))
1194#define PerlProc_fork()         fork()
1195#define PerlProc_getpid()       getpid()
1196
1197#ifdef WIN32
1198#define PerlProc_DynaLoad(f)                                            \
1199        win32_dynaload((f))
1200#define PerlProc_GetOSError(s,e)                                        \
1201        win32_str_os_error((s), (e))
1202#endif
1203#endif  /* PERL_IMPLICIT_SYS */
1204
1205/*
1206    Interface for perl socket functions
1207*/
1208
1209#if defined(PERL_IMPLICIT_SYS)
1210
1211/* PerlSock             */
1212struct IPerlSock;
1213struct IPerlSockInfo;
1214typedef u_long          (*LPHtonl)(struct IPerlSock*, u_long);
1215typedef u_short         (*LPHtons)(struct IPerlSock*, u_short);
1216typedef u_long          (*LPNtohl)(struct IPerlSock*, u_long);
1217typedef u_short         (*LPNtohs)(struct IPerlSock*, u_short);
1218typedef SOCKET          (*LPAccept)(struct IPerlSock*, SOCKET,
1219                            struct sockaddr*, int*);
1220typedef int             (*LPBind)(struct IPerlSock*, SOCKET,
1221                            const struct sockaddr*, int);
1222typedef int             (*LPConnect)(struct IPerlSock*, SOCKET,
1223                            const struct sockaddr*, int);
1224typedef void            (*LPEndhostent)(struct IPerlSock*);
1225typedef void            (*LPEndnetent)(struct IPerlSock*);
1226typedef void            (*LPEndprotoent)(struct IPerlSock*);
1227typedef void            (*LPEndservent)(struct IPerlSock*);
1228typedef int             (*LPGethostname)(struct IPerlSock*, char*, int);
1229typedef int             (*LPGetpeername)(struct IPerlSock*, SOCKET,
1230                            struct sockaddr*, int*);
1231typedef struct hostent* (*LPGethostbyaddr)(struct IPerlSock*, const char*,
1232                            int, int);
1233typedef struct hostent* (*LPGethostbyname)(struct IPerlSock*, const char*);
1234typedef struct hostent* (*LPGethostent)(struct IPerlSock*);
1235typedef struct netent*  (*LPGetnetbyaddr)(struct IPerlSock*, long, int);
1236typedef struct netent*  (*LPGetnetbyname)(struct IPerlSock*, const char*);
1237typedef struct netent*  (*LPGetnetent)(struct IPerlSock*);
1238typedef struct protoent*(*LPGetprotobyname)(struct IPerlSock*, const char*);
1239typedef struct protoent*(*LPGetprotobynumber)(struct IPerlSock*, int);
1240typedef struct protoent*(*LPGetprotoent)(struct IPerlSock*);
1241typedef struct servent* (*LPGetservbyname)(struct IPerlSock*, const char*,
1242                            const char*);
1243typedef struct servent* (*LPGetservbyport)(struct IPerlSock*, int,
1244                            const char*);
1245typedef struct servent* (*LPGetservent)(struct IPerlSock*);
1246typedef int             (*LPGetsockname)(struct IPerlSock*, SOCKET,
1247                            struct sockaddr*, int*);
1248typedef int             (*LPGetsockopt)(struct IPerlSock*, SOCKET, int, int,
1249                            char*, int*);
1250typedef unsigned long   (*LPInetAddr)(struct IPerlSock*, const char*);
1251typedef char*           (*LPInetNtoa)(struct IPerlSock*, struct in_addr);
1252typedef int             (*LPListen)(struct IPerlSock*, SOCKET, int);
1253typedef int             (*LPRecv)(struct IPerlSock*, SOCKET, char*, int, int);
1254typedef int             (*LPRecvfrom)(struct IPerlSock*, SOCKET, char*, int,
1255                            int, struct sockaddr*, int*);
1256typedef int             (*LPSelect)(struct IPerlSock*, int, char*, char*,
1257                            char*, const struct timeval*);
1258typedef int             (*LPSend)(struct IPerlSock*, SOCKET, const char*, int,
1259                            int);
1260typedef int             (*LPSendto)(struct IPerlSock*, SOCKET, const char*,
1261                            int, int, const struct sockaddr*, int);
1262typedef void            (*LPSethostent)(struct IPerlSock*, int);
1263typedef void            (*LPSetnetent)(struct IPerlSock*, int);
1264typedef void            (*LPSetprotoent)(struct IPerlSock*, int);
1265typedef void            (*LPSetservent)(struct IPerlSock*, int);
1266typedef int             (*LPSetsockopt)(struct IPerlSock*, SOCKET, int, int,
1267                            const char*, int);
1268typedef int             (*LPShutdown)(struct IPerlSock*, SOCKET, int);
1269typedef SOCKET          (*LPSocket)(struct IPerlSock*, int, int, int);
1270typedef int             (*LPSocketpair)(struct IPerlSock*, int, int, int,
1271                            int*);
1272#ifdef WIN32
1273typedef int             (*LPClosesocket)(struct IPerlSock*, SOCKET s);
1274#endif
1275
1276struct IPerlSock
1277{
1278    LPHtonl             pHtonl;
1279    LPHtons             pHtons;
1280    LPNtohl             pNtohl;
1281    LPNtohs             pNtohs;
1282    LPAccept            pAccept;
1283    LPBind              pBind;
1284    LPConnect           pConnect;
1285    LPEndhostent        pEndhostent;
1286    LPEndnetent         pEndnetent;
1287    LPEndprotoent       pEndprotoent;
1288    LPEndservent        pEndservent;
1289    LPGethostname       pGethostname;
1290    LPGetpeername       pGetpeername;
1291    LPGethostbyaddr     pGethostbyaddr;
1292    LPGethostbyname     pGethostbyname;
1293    LPGethostent        pGethostent;
1294    LPGetnetbyaddr      pGetnetbyaddr;
1295    LPGetnetbyname      pGetnetbyname;
1296    LPGetnetent         pGetnetent;
1297    LPGetprotobyname    pGetprotobyname;
1298    LPGetprotobynumber  pGetprotobynumber;
1299    LPGetprotoent       pGetprotoent;
1300    LPGetservbyname     pGetservbyname;
1301    LPGetservbyport     pGetservbyport;
1302    LPGetservent        pGetservent;
1303    LPGetsockname       pGetsockname;
1304    LPGetsockopt        pGetsockopt;
1305    LPInetAddr          pInetAddr;
1306    LPInetNtoa          pInetNtoa;
1307    LPListen            pListen;
1308    LPRecv              pRecv;
1309    LPRecvfrom          pRecvfrom;
1310    LPSelect            pSelect;
1311    LPSend              pSend;
1312    LPSendto            pSendto;
1313    LPSethostent        pSethostent;
1314    LPSetnetent         pSetnetent;
1315    LPSetprotoent       pSetprotoent;
1316    LPSetservent        pSetservent;
1317    LPSetsockopt        pSetsockopt;
1318    LPShutdown          pShutdown;
1319    LPSocket            pSocket;
1320    LPSocketpair        pSocketpair;
1321#ifdef WIN32
1322    LPClosesocket       pClosesocket;
1323#endif
1324};
1325
1326struct IPerlSockInfo
1327{
1328    unsigned long       nCount;     /* number of entries expected */
1329    struct IPerlSock    perlSockList;
1330};
1331
1332#define PerlSock_htonl(x)                                               \
1333        (*PL_Sock->pHtonl)(PL_Sock, x)
1334#define PerlSock_htons(x)                                               \
1335        (*PL_Sock->pHtons)(PL_Sock, x)
1336#define PerlSock_ntohl(x)                                               \
1337        (*PL_Sock->pNtohl)(PL_Sock, x)
1338#define PerlSock_ntohs(x)                                               \
1339        (*PL_Sock->pNtohs)(PL_Sock, x)
1340#define PerlSock_accept(s, a, l)                                        \
1341        (*PL_Sock->pAccept)(PL_Sock, s, a, l)
1342#define PerlSock_bind(s, n, l)                                          \
1343        (*PL_Sock->pBind)(PL_Sock, s, n, l)
1344#define PerlSock_connect(s, n, l)                                       \
1345        (*PL_Sock->pConnect)(PL_Sock, s, n, l)
1346#define PerlSock_endhostent()                                           \
1347        (*PL_Sock->pEndhostent)(PL_Sock)
1348#define PerlSock_endnetent()                                            \
1349        (*PL_Sock->pEndnetent)(PL_Sock)
1350#define PerlSock_endprotoent()                                          \
1351        (*PL_Sock->pEndprotoent)(PL_Sock)
1352#define PerlSock_endservent()                                           \
1353        (*PL_Sock->pEndservent)(PL_Sock)
1354#define PerlSock_gethostbyaddr(a, l, t)                                 \
1355        (*PL_Sock->pGethostbyaddr)(PL_Sock, a, l, t)
1356#define PerlSock_gethostbyname(n)                                       \
1357        (*PL_Sock->pGethostbyname)(PL_Sock, n)
1358#define PerlSock_gethostent()                                           \
1359        (*PL_Sock->pGethostent)(PL_Sock)
1360#define PerlSock_gethostname(n, l)                                      \
1361        (*PL_Sock->pGethostname)(PL_Sock, n, l)
1362#define PerlSock_getnetbyaddr(n, t)                                     \
1363        (*PL_Sock->pGetnetbyaddr)(PL_Sock, n, t)
1364#define PerlSock_getnetbyname(c)                                        \
1365        (*PL_Sock->pGetnetbyname)(PL_Sock, c)
1366#define PerlSock_getnetent()                                            \
1367        (*PL_Sock->pGetnetent)(PL_Sock)
1368#define PerlSock_getpeername(s, n, l)                                   \
1369        (*PL_Sock->pGetpeername)(PL_Sock, s, n, l)
1370#define PerlSock_getprotobyname(n)                                      \
1371        (*PL_Sock->pGetprotobyname)(PL_Sock, n)
1372#define PerlSock_getprotobynumber(n)                                    \
1373        (*PL_Sock->pGetprotobynumber)(PL_Sock, n)
1374#define PerlSock_getprotoent()                                          \
1375        (*PL_Sock->pGetprotoent)(PL_Sock)
1376#define PerlSock_getservbyname(n, p)                                    \
1377        (*PL_Sock->pGetservbyname)(PL_Sock, n, p)
1378#define PerlSock_getservbyport(port, p)                                 \
1379        (*PL_Sock->pGetservbyport)(PL_Sock, port, p)
1380#define PerlSock_getservent()                                           \
1381        (*PL_Sock->pGetservent)(PL_Sock)
1382#define PerlSock_getsockname(s, n, l)                                   \
1383        (*PL_Sock->pGetsockname)(PL_Sock, s, n, l)
1384#define PerlSock_getsockopt(s,l,n,v,i)                                  \
1385        (*PL_Sock->pGetsockopt)(PL_Sock, s, l, n, v, i)
1386#define PerlSock_inet_addr(c)                                           \
1387        (*PL_Sock->pInetAddr)(PL_Sock, c)
1388#define PerlSock_inet_ntoa(i)                                           \
1389        (*PL_Sock->pInetNtoa)(PL_Sock, i)
1390#define PerlSock_listen(s, b)                                           \
1391        (*PL_Sock->pListen)(PL_Sock, s, b)
1392#define PerlSock_recv(s, b, l, f)                                       \
1393        (*PL_Sock->pRecv)(PL_Sock, s, b, l, f)
1394#define PerlSock_recvfrom(s,b,l,f,from,fromlen)                         \
1395        (*PL_Sock->pRecvfrom)(PL_Sock, s, b, l, f, from, fromlen)
1396#define PerlSock_select(n, r, w, e, t)                                  \
1397        (*PL_Sock->pSelect)(PL_Sock, n, (char*)r, (char*)w, (char*)e, t)
1398#define PerlSock_send(s, b, l, f)                                       \
1399        (*PL_Sock->pSend)(PL_Sock, s, b, l, f)
1400#define PerlSock_sendto(s, b, l, f, t, tlen)                            \
1401        (*PL_Sock->pSendto)(PL_Sock, s, b, l, f, t, tlen)
1402#define PerlSock_sethostent(f)                                          \
1403        (*PL_Sock->pSethostent)(PL_Sock, f)
1404#define PerlSock_setnetent(f)                                           \
1405        (*PL_Sock->pSetnetent)(PL_Sock, f)
1406#define PerlSock_setprotoent(f)                                         \
1407        (*PL_Sock->pSetprotoent)(PL_Sock, f)
1408#define PerlSock_setservent(f)                                          \
1409        (*PL_Sock->pSetservent)(PL_Sock, f)
1410#define PerlSock_setsockopt(s, l, n, v, len)                            \
1411        (*PL_Sock->pSetsockopt)(PL_Sock, s, l, n, v, len)
1412#define PerlSock_shutdown(s, h)                                         \
1413        (*PL_Sock->pShutdown)(PL_Sock, s, h)
1414#define PerlSock_socket(a, t, p)                                        \
1415        (*PL_Sock->pSocket)(PL_Sock, a, t, p)
1416#define PerlSock_socketpair(a, t, p, f)                                 \
1417        (*PL_Sock->pSocketpair)(PL_Sock, a, t, p, f)
1418
1419#ifdef WIN32
1420#define PerlSock_closesocket(s)                                         \
1421        (*PL_Sock->pClosesocket)(PL_Sock, s)
1422#endif
1423
1424#else   /* PERL_IMPLICIT_SYS */
1425
1426#define PerlSock_htonl(x)               htonl(x)
1427#define PerlSock_htons(x)               htons(x)
1428#define PerlSock_ntohl(x)               ntohl(x)
1429#define PerlSock_ntohs(x)               ntohs(x)
1430#define PerlSock_accept(s, a, l)        accept(s, a, l)
1431#define PerlSock_bind(s, n, l)          bind(s, n, l)
1432#define PerlSock_connect(s, n, l)       connect(s, n, l)
1433
1434#define PerlSock_gethostbyaddr(a, l, t) gethostbyaddr(a, l, t)
1435#define PerlSock_gethostbyname(n)       gethostbyname(n)
1436#define PerlSock_gethostent             gethostent
1437#define PerlSock_endhostent             endhostent
1438#define PerlSock_gethostname(n, l)      gethostname(n, l)
1439
1440#define PerlSock_getnetbyaddr(n, t)     getnetbyaddr(n, t)
1441#define PerlSock_getnetbyname(n)        getnetbyname(n)
1442#define PerlSock_getnetent              getnetent
1443#define PerlSock_endnetent              endnetent
1444#define PerlSock_getpeername(s, n, l)   getpeername(s, n, l)
1445
1446#define PerlSock_getprotobyname(n)      getprotobyname(n)
1447#define PerlSock_getprotobynumber(n)    getprotobynumber(n)
1448#define PerlSock_getprotoent            getprotoent
1449#define PerlSock_endprotoent            endprotoent
1450
1451#define PerlSock_getservbyname(n, p)    getservbyname(n, p)
1452#define PerlSock_getservbyport(port, p) getservbyport(port, p)
1453#define PerlSock_getservent             getservent
1454#define PerlSock_endservent             endservent
1455
1456#define PerlSock_getsockname(s, n, l)   getsockname(s, n, l)
1457#define PerlSock_getsockopt(s,l,n,v,i)  getsockopt(s, l, n, v, i)
1458#define PerlSock_inet_addr(c)           inet_addr(c)
1459#define PerlSock_inet_ntoa(i)           inet_ntoa(i)
1460#define PerlSock_listen(s, b)           listen(s, b)
1461#define PerlSock_recv(s, b, l, f)       recv(s, b, l, f)
1462#define PerlSock_recvfrom(s, b, l, f, from, fromlen)                    \
1463        recvfrom(s, b, l, f, from, fromlen)
1464#define PerlSock_select(n, r, w, e, t)  select(n, r, w, e, t)
1465#define PerlSock_send(s, b, l, f)       send(s, b, l, f)
1466#define PerlSock_sendto(s, b, l, f, t, tlen)                            \
1467        sendto(s, b, l, f, t, tlen)
1468#define PerlSock_sethostent(f)          sethostent(f)
1469#define PerlSock_setnetent(f)           setnetent(f)
1470#define PerlSock_setprotoent(f)         setprotoent(f)
1471#define PerlSock_setservent(f)          setservent(f)
1472#define PerlSock_setsockopt(s, l, n, v, len)                            \
1473        setsockopt(s, l, n, v, len)
1474#define PerlSock_shutdown(s, h)         shutdown(s, h)
1475#define PerlSock_socket(a, t, p)        socket(a, t, p)
1476#define PerlSock_socketpair(a, t, p, f) socketpair(a, t, p, f)
1477
1478#ifdef WIN32
1479#define PerlSock_closesocket(s)         closesocket(s)
1480#endif
1481
1482#endif  /* PERL_IMPLICIT_SYS */
1483
1484#endif  /* __Inc__IPerl___ */
1485
Note: See TracBrowser for help on using the repository browser.