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

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