perldelta - Fix a typo and remove a trailing space
[perl.git] / XSUB.h
1 /*    XSUB.h
2  *
3  *    Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
4  *    2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  *
9  */
10
11 #ifndef _INC_PERL_XSUB_H
12 #define _INC_PERL_XSUB_H 1
13
14 /* first, some documentation for xsubpp-generated items */
15
16 /*
17 =head1 C<xsubpp> variables and internal functions
18
19 =for apidoc Amn|char*|CLASS
20 Variable which is setup by C<xsubpp> to indicate the 
21 class name for a C++ XS constructor.  This is always a C<char*>.  See C<THIS>.
22
23 =for apidoc Amn|(whatever)|RETVAL
24 Variable which is setup by C<xsubpp> to hold the return value for an 
25 XSUB.  This is always the proper type for the XSUB.  See 
26 L<perlxs/"The RETVAL Variable">.
27
28 =for apidoc Amn|(whatever)|THIS
29 Variable which is setup by C<xsubpp> to designate the object in a C++ 
30 XSUB.  This is always the proper type for the C++ object.  See C<CLASS> and 
31 L<perlxs/"Using XS With C++">.
32
33 =for apidoc Amn|I32|ax
34 Variable which is setup by C<xsubpp> to indicate the stack base offset,
35 used by the C<ST>, C<XSprePUSH> and C<XSRETURN> macros.  The C<dMARK> macro
36 must be called prior to setup the C<MARK> variable.
37
38 =for apidoc Amn|I32|items
39 Variable which is setup by C<xsubpp> to indicate the number of 
40 items on the stack.  See L<perlxs/"Variable-length Parameter Lists">.
41
42 =for apidoc Amn|I32|ix
43 Variable which is setup by C<xsubpp> to indicate which of an 
44 XSUB's aliases was used to invoke it.  See L<perlxs/"The ALIAS: Keyword">.
45
46 =for apidoc Am|SV*|ST|int ix
47 Used to access elements on the XSUB's stack.
48
49 =for apidoc AmU||XS
50 Macro to declare an XSUB and its C parameter list.  This is handled by
51 C<xsubpp>.  It is the same as using the more explicit XS_EXTERNAL macro.
52
53 =for apidoc AmU||XS_INTERNAL
54 Macro to declare an XSUB and its C parameter list without exporting the symbols.
55 This is handled by C<xsubpp> and generally preferable over exporting the XSUB
56 symbols unnecessarily.
57
58 =for apidoc AmU||XS_EXTERNAL
59 Macro to declare an XSUB and its C parameter list explicitly exporting the symbols.
60
61 =for apidoc Ams||dAX
62 Sets up the C<ax> variable.
63 This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
64
65 =for apidoc Ams||dAXMARK
66 Sets up the C<ax> variable and stack marker variable C<mark>.
67 This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
68
69 =for apidoc Ams||dITEMS
70 Sets up the C<items> variable.
71 This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
72
73 =for apidoc Ams||dXSARGS
74 Sets up stack and mark pointers for an XSUB, calling dSP and dMARK.
75 Sets up the C<ax> and C<items> variables by calling C<dAX> and C<dITEMS>.
76 This is usually handled automatically by C<xsubpp>.
77
78 =for apidoc Ams||dXSI32
79 Sets up the C<ix> variable for an XSUB which has aliases.  This is usually
80 handled automatically by C<xsubpp>.
81
82 =for apidoc Ams||dUNDERBAR
83 Sets up any variable needed by the C<UNDERBAR> macro.  It used to define
84 C<padoff_du>, but it is currently a noop.  However, it is strongly advised
85 to still use it for ensuring past and future compatibility.
86
87 =for apidoc AmU||UNDERBAR
88 The SV* corresponding to the $_ variable.  Works even if there
89 is a lexical $_ in scope.
90
91 =cut
92 */
93
94 #ifndef PERL_UNUSED_ARG
95 #  if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */
96 #    include <note.h>
97 #    define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x))
98 #  else
99 #    define PERL_UNUSED_ARG(x) ((void)x)
100 #  endif
101 #endif
102 #ifndef PERL_UNUSED_VAR
103 #  define PERL_UNUSED_VAR(x) ((void)x)
104 #endif
105
106 #define ST(off) PL_stack_base[ax + (off)]
107
108 /* XSPROTO() is also used by SWIG like this:
109  *
110  *     typedef XSPROTO(SwigPerlWrapper);
111  *     typedef SwigPerlWrapper *SwigPerlWrapperPtr;
112  *
113  * This code needs to be compilable under both C and C++.
114  *
115  * Don't forget to change the __attribute__unused__ version of XS()
116  * below too if you change XSPROTO() here.
117  */
118
119 /* XS_INTERNAL is the explicit static-linkage variant of the default
120  * XS macro.
121  *
122  * XS_EXTERNAL is the same as XS_INTERNAL except it does not include
123  * "STATIC", ie. it exports XSUB symbols. You probably don't want that.
124  */
125
126 #define XSPROTO(name) void name(pTHX_ CV* cv)
127
128 #undef XS
129 #undef XS_EXTERNAL
130 #undef XS_INTERNAL
131 #if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
132 #  define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
133 #  define XS_INTERNAL(name) STATIC XSPROTO(name)
134 #endif
135 #if defined(__SYMBIAN32__)
136 #  define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
137 #  define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
138 #endif
139 #ifndef XS_EXTERNAL
140 #  if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
141 #    define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
142 #    define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
143 #  else
144 #    ifdef __cplusplus
145 #      define XS_EXTERNAL(name) extern "C" XSPROTO(name)
146 #      define XS_INTERNAL(name) static XSPROTO(name)
147 #    else
148 #      define XS_EXTERNAL(name) XSPROTO(name)
149 #      define XS_INTERNAL(name) STATIC XSPROTO(name)
150 #    endif
151 #  endif
152 #endif
153
154 /* We do export xsub symbols by default for the public XS macro.
155  * Try explicitly using XS_INTERNAL/XS_EXTERNAL instead, please. */
156 #define XS(name) XS_EXTERNAL(name)
157
158 #define dAX const I32 ax = (I32)(MARK - PL_stack_base + 1)
159
160 #define dAXMARK                         \
161         I32 ax = POPMARK;       \
162         SV **mark = PL_stack_base + ax++
163
164 #define dITEMS I32 items = (I32)(SP - MARK)
165
166 #if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */
167 #  define dXSARGS \
168         NOTE(ARGUNUSED(cv)) \
169         dSP; dAXMARK; dITEMS
170 #else
171 #  define dXSARGS \
172         dSP; dAXMARK; dITEMS
173 #endif
174
175 #define dXSTARG SV * const targ = ((PL_op->op_private & OPpENTERSUB_HASTARG) \
176                              ? PAD_SV(PL_op->op_targ) : sv_newmortal())
177
178 /* Should be used before final PUSHi etc. if not in PPCODE section. */
179 #define XSprePUSH (sp = PL_stack_base + ax - 1)
180
181 #define XSANY CvXSUBANY(cv)
182
183 #define dXSI32 I32 ix = XSANY.any_i32
184
185 #ifdef __cplusplus
186 #  define XSINTERFACE_CVT(ret,name) ret (*name)(...)
187 #  define XSINTERFACE_CVT_ANON(ret) ret (*)(...)
188 #else
189 #  define XSINTERFACE_CVT(ret,name) ret (*name)()
190 #  define XSINTERFACE_CVT_ANON(ret) ret (*)()
191 #endif
192 #define dXSFUNCTION(ret)                XSINTERFACE_CVT(ret,XSFUNCTION)
193 #define XSINTERFACE_FUNC(ret,cv,f)     ((XSINTERFACE_CVT_ANON(ret))(f))
194 #define XSINTERFACE_FUNC_SET(cv,f)      \
195                 CvXSUBANY(cv).any_dxptr = (void (*) (pTHX_ void*))(f)
196
197 #define dUNDERBAR dNOOP
198 #define UNDERBAR  find_rundefsv()
199
200 /* Simple macros to put new mortal values onto the stack.   */
201 /* Typically used to return values from XS functions.       */
202
203 /*
204 =head1 Stack Manipulation Macros
205
206 =for apidoc Am|void|XST_mIV|int pos|IV iv
207 Place an integer into the specified position C<pos> on the stack.  The
208 value is stored in a new mortal SV.
209
210 =for apidoc Am|void|XST_mNV|int pos|NV nv
211 Place a double into the specified position C<pos> on the stack.  The value
212 is stored in a new mortal SV.
213
214 =for apidoc Am|void|XST_mPV|int pos|char* str
215 Place a copy of a string into the specified position C<pos> on the stack. 
216 The value is stored in a new mortal SV.
217
218 =for apidoc Am|void|XST_mNO|int pos
219 Place C<&PL_sv_no> into the specified position C<pos> on the
220 stack.
221
222 =for apidoc Am|void|XST_mYES|int pos
223 Place C<&PL_sv_yes> into the specified position C<pos> on the
224 stack.
225
226 =for apidoc Am|void|XST_mUNDEF|int pos
227 Place C<&PL_sv_undef> into the specified position C<pos> on the
228 stack.
229
230 =for apidoc Am|void|XSRETURN|int nitems
231 Return from XSUB, indicating number of items on the stack.  This is usually
232 handled by C<xsubpp>.
233
234 =for apidoc Am|void|XSRETURN_IV|IV iv
235 Return an integer from an XSUB immediately.  Uses C<XST_mIV>.
236
237 =for apidoc Am|void|XSRETURN_UV|IV uv
238 Return an integer from an XSUB immediately.  Uses C<XST_mUV>.
239
240 =for apidoc Am|void|XSRETURN_NV|NV nv
241 Return a double from an XSUB immediately.  Uses C<XST_mNV>.
242
243 =for apidoc Am|void|XSRETURN_PV|char* str
244 Return a copy of a string from an XSUB immediately.  Uses C<XST_mPV>.
245
246 =for apidoc Ams||XSRETURN_NO
247 Return C<&PL_sv_no> from an XSUB immediately.  Uses C<XST_mNO>.
248
249 =for apidoc Ams||XSRETURN_YES
250 Return C<&PL_sv_yes> from an XSUB immediately.  Uses C<XST_mYES>.
251
252 =for apidoc Ams||XSRETURN_UNDEF
253 Return C<&PL_sv_undef> from an XSUB immediately.  Uses C<XST_mUNDEF>.
254
255 =for apidoc Ams||XSRETURN_EMPTY
256 Return an empty list from an XSUB immediately.
257
258 =head1 Variables created by C<xsubpp> and C<xsubpp> internal functions
259
260 =for apidoc AmU||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto
261 Used by C<xsubpp> to hook up XSUBs as Perl subs.  Adds Perl prototypes to
262 the subs.
263
264 =for apidoc AmU||XS_VERSION
265 The version identifier for an XS module.  This is usually
266 handled automatically by C<ExtUtils::MakeMaker>.  See C<XS_VERSION_BOOTCHECK>.
267
268 =for apidoc Ams||XS_VERSION_BOOTCHECK
269 Macro to verify that a PM module's $VERSION variable matches the XS
270 module's C<XS_VERSION> variable.  This is usually handled automatically by
271 C<xsubpp>.  See L<perlxs/"The VERSIONCHECK: Keyword">.
272
273 =for apidoc Ams||XS_APIVERSION_BOOTCHECK
274 Macro to verify that the perl api version an XS module has been compiled against
275 matches the api version of the perl interpreter it's being loaded into.
276
277 =head1 Exception Handling (simple) Macros
278
279 =for apidoc Ams||dXCPT
280 Set up necessary local variables for exception handling.
281 See L<perlguts/"Exception Handling">.
282
283 =for apidoc AmU||XCPT_TRY_START
284 Starts a try block.  See L<perlguts/"Exception Handling">.
285
286 =for apidoc AmU||XCPT_TRY_END
287 Ends a try block.  See L<perlguts/"Exception Handling">.
288
289 =for apidoc AmU||XCPT_CATCH
290 Introduces a catch block.  See L<perlguts/"Exception Handling">.
291
292 =for apidoc Ams||XCPT_RETHROW
293 Rethrows a previously caught exception.  See L<perlguts/"Exception Handling">.
294
295 =cut
296 */
297
298 #define XST_mIV(i,v)  (ST(i) = sv_2mortal(newSViv(v))  )
299 #define XST_mUV(i,v)  (ST(i) = sv_2mortal(newSVuv(v))  )
300 #define XST_mNV(i,v)  (ST(i) = sv_2mortal(newSVnv(v))  )
301 #define XST_mPV(i,v)  (ST(i) = sv_2mortal(newSVpv(v,0)))
302 #define XST_mPVN(i,v,n)  (ST(i) = newSVpvn_flags(v,n, SVs_TEMP))
303 #define XST_mNO(i)    (ST(i) = &PL_sv_no   )
304 #define XST_mYES(i)   (ST(i) = &PL_sv_yes  )
305 #define XST_mUNDEF(i) (ST(i) = &PL_sv_undef)
306
307 #define XSRETURN(off)                                   \
308     STMT_START {                                        \
309         const IV tmpXSoff = (off);                      \
310         PL_stack_sp = PL_stack_base + ax + (tmpXSoff - 1);      \
311         return;                                         \
312     } STMT_END
313
314 #define XSRETURN_IV(v) STMT_START { XST_mIV(0,v);  XSRETURN(1); } STMT_END
315 #define XSRETURN_UV(v) STMT_START { XST_mUV(0,v);  XSRETURN(1); } STMT_END
316 #define XSRETURN_NV(v) STMT_START { XST_mNV(0,v);  XSRETURN(1); } STMT_END
317 #define XSRETURN_PV(v) STMT_START { XST_mPV(0,v);  XSRETURN(1); } STMT_END
318 #define XSRETURN_PVN(v,n) STMT_START { XST_mPVN(0,v,n);  XSRETURN(1); } STMT_END
319 #define XSRETURN_NO    STMT_START { XST_mNO(0);    XSRETURN(1); } STMT_END
320 #define XSRETURN_YES   STMT_START { XST_mYES(0);   XSRETURN(1); } STMT_END
321 #define XSRETURN_UNDEF STMT_START { XST_mUNDEF(0); XSRETURN(1); } STMT_END
322 #define XSRETURN_EMPTY STMT_START {                XSRETURN(0); } STMT_END
323
324 #define newXSproto(a,b,c,d)     newXS_flags(a,b,c,d,0)
325
326 #ifdef XS_VERSION
327 #  define XS_VERSION_BOOTCHECK                                          \
328     Perl_xs_version_bootcheck(aTHX_ items, ax, STR_WITH_LEN(XS_VERSION))
329 #else
330 #  define XS_VERSION_BOOTCHECK
331 #endif
332
333 #define XS_APIVERSION_BOOTCHECK                                         \
334     Perl_xs_apiversion_bootcheck(aTHX_ ST(0), STR_WITH_LEN("v" PERL_API_VERSION_STRING))
335
336 #ifdef NO_XSLOCKS
337 #  define dXCPT             dJMPENV; int rEtV = 0
338 #  define XCPT_TRY_START    JMPENV_PUSH(rEtV); if (rEtV == 0)
339 #  define XCPT_TRY_END      JMPENV_POP;
340 #  define XCPT_CATCH        if (rEtV != 0)
341 #  define XCPT_RETHROW      JMPENV_JUMP(rEtV)
342 #endif
343
344 /*
345    The DBM_setFilter & DBM_ckFilter macros are only used by
346    the *DB*_File modules
347 */
348
349 #define DBM_setFilter(db_type,code)                             \
350         STMT_START {                                            \
351             if (db_type)                                        \
352                 RETVAL = sv_mortalcopy(db_type) ;               \
353             ST(0) = RETVAL ;                                    \
354             if (db_type && (code == &PL_sv_undef)) {            \
355                 SvREFCNT_dec(db_type) ;                         \
356                 db_type = NULL ;                                \
357             }                                                   \
358             else if (code) {                                    \
359                 if (db_type)                                    \
360                     sv_setsv(db_type, code) ;                   \
361                 else                                            \
362                     db_type = newSVsv(code) ;                   \
363             }                                                   \
364         } STMT_END
365
366 #define DBM_ckFilter(arg,type,name)                             \
367         STMT_START {                                            \
368         if (db->type) {                                         \
369             if (db->filtering) {                                \
370                 croak("recursion detected in %s", name) ;       \
371             }                                                   \
372             ENTER ;                                             \
373             SAVETMPS ;                                          \
374             SAVEINT(db->filtering) ;                            \
375             db->filtering = TRUE ;                              \
376             SAVE_DEFSV ;                                        \
377             if (name[7] == 's')                                 \
378                 arg = newSVsv(arg);                             \
379             DEFSV_set(arg) ;                                    \
380             SvTEMP_off(arg) ;                                   \
381             PUSHMARK(SP) ;                                      \
382             PUTBACK ;                                           \
383             (void) perl_call_sv(db->type, G_DISCARD);           \
384             SPAGAIN ;                                           \
385             PUTBACK ;                                           \
386             FREETMPS ;                                          \
387             LEAVE ;                                             \
388             if (name[7] == 's'){                                \
389                 arg = sv_2mortal(arg);                          \
390             }                                                   \
391         } } STMT_END                                                     
392
393 #if 1           /* for compatibility */
394 #  define VTBL_sv               &PL_vtbl_sv
395 #  define VTBL_env              &PL_vtbl_env
396 #  define VTBL_envelem          &PL_vtbl_envelem
397 #  define VTBL_sigelem          &PL_vtbl_sigelem
398 #  define VTBL_pack             &PL_vtbl_pack
399 #  define VTBL_packelem         &PL_vtbl_packelem
400 #  define VTBL_dbline           &PL_vtbl_dbline
401 #  define VTBL_isa              &PL_vtbl_isa
402 #  define VTBL_isaelem          &PL_vtbl_isaelem
403 #  define VTBL_arylen           &PL_vtbl_arylen
404 #  define VTBL_glob             &PL_vtbl_glob
405 #  define VTBL_mglob            &PL_vtbl_mglob
406 #  define VTBL_nkeys            &PL_vtbl_nkeys
407 #  define VTBL_taint            &PL_vtbl_taint
408 #  define VTBL_substr           &PL_vtbl_substr
409 #  define VTBL_vec              &PL_vtbl_vec
410 #  define VTBL_pos              &PL_vtbl_pos
411 #  define VTBL_bm               &PL_vtbl_bm
412 #  define VTBL_fm               &PL_vtbl_fm
413 #  define VTBL_uvar             &PL_vtbl_uvar
414 #  define VTBL_defelem          &PL_vtbl_defelem
415 #  define VTBL_regexp           &PL_vtbl_regexp
416 #  define VTBL_regdata          &PL_vtbl_regdata
417 #  define VTBL_regdatum         &PL_vtbl_regdatum
418 #  ifdef USE_LOCALE_COLLATE
419 #    define VTBL_collxfrm       &PL_vtbl_collxfrm
420 #  endif
421 #  define VTBL_amagic           &PL_vtbl_amagic
422 #  define VTBL_amagicelem       &PL_vtbl_amagicelem
423 #endif
424
425 #include "perlapi.h"
426
427 #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_GET_CONTEXT) && !defined(PERL_CORE)
428 #  undef aTHX
429 #  undef aTHX_
430 #  define aTHX          PERL_GET_THX
431 #  define aTHX_         aTHX,
432 #endif
433
434 #if defined(PERL_IMPLICIT_SYS) && !defined(PERL_CORE)
435 #  ifndef NO_XSLOCKS
436 # if defined (NETWARE) && defined (USE_STDIO)
437 #    define times               PerlProc_times
438 #    define setuid              PerlProc_setuid
439 #    define setgid              PerlProc_setgid
440 #    define getpid              PerlProc_getpid
441 #    define pause               PerlProc_pause
442 #    define exit                PerlProc_exit
443 #    define _exit               PerlProc__exit
444 # else
445 #    undef closedir
446 #    undef opendir
447 #    undef stdin
448 #    undef stdout
449 #    undef stderr
450 #    undef feof
451 #    undef ferror
452 #    undef fgetpos
453 #    undef ioctl
454 #    undef getlogin
455 #    undef setjmp
456 #    undef getc
457 #    undef ungetc
458 #    undef fileno
459
460 /* Following symbols were giving redefinition errors while building extensions - sgp 17th Oct 2000 */
461 #ifdef NETWARE
462 #       undef readdir
463 #       undef fstat
464 #       undef stat
465 #       undef longjmp
466 #       undef endhostent
467 #       undef endnetent
468 #       undef endprotoent
469 #       undef endservent
470 #       undef gethostbyaddr
471 #       undef gethostbyname
472 #       undef gethostent
473 #       undef getnetbyaddr
474 #       undef getnetbyname
475 #       undef getnetent
476 #       undef getprotobyname
477 #       undef getprotobynumber
478 #       undef getprotoent
479 #       undef getservbyname
480 #       undef getservbyport
481 #       undef getservent
482 #       undef inet_ntoa
483 #       undef sethostent
484 #       undef setnetent
485 #       undef setprotoent
486 #       undef setservent
487 #endif  /* NETWARE */
488
489 /* to avoid warnings: "xyz" redefined */
490 #ifdef WIN32
491 #    undef  popen
492 #    undef  pclose
493 #endif /* WIN32 */
494
495 #    undef  socketpair
496
497 #    define mkdir               PerlDir_mkdir
498 #    define chdir               PerlDir_chdir
499 #    define rmdir               PerlDir_rmdir
500 #    define closedir            PerlDir_close
501 #    define opendir             PerlDir_open
502 #    define readdir             PerlDir_read
503 #    define rewinddir           PerlDir_rewind
504 #    define seekdir             PerlDir_seek
505 #    define telldir             PerlDir_tell
506 #    define putenv              PerlEnv_putenv
507 #    define getenv              PerlEnv_getenv
508 #    define uname               PerlEnv_uname
509 #    define stdin               PerlSIO_stdin
510 #    define stdout              PerlSIO_stdout
511 #    define stderr              PerlSIO_stderr
512 #    define fopen               PerlSIO_fopen
513 #    define fclose              PerlSIO_fclose
514 #    define feof                PerlSIO_feof
515 #    define ferror              PerlSIO_ferror
516 #    define clearerr            PerlSIO_clearerr
517 #    define getc                PerlSIO_getc
518 #    define fgets               PerlSIO_fgets
519 #    define fputc               PerlSIO_fputc
520 #    define fputs               PerlSIO_fputs
521 #    define fflush              PerlSIO_fflush
522 #    define ungetc              PerlSIO_ungetc
523 #    define fileno              PerlSIO_fileno
524 #    define fdopen              PerlSIO_fdopen
525 #    define freopen             PerlSIO_freopen
526 #    define fread               PerlSIO_fread
527 #    define fwrite              PerlSIO_fwrite
528 #    define setbuf              PerlSIO_setbuf
529 #    define setvbuf             PerlSIO_setvbuf
530 #    define setlinebuf          PerlSIO_setlinebuf
531 #    define stdoutf             PerlSIO_stdoutf
532 #    define vfprintf            PerlSIO_vprintf
533 #    define ftell               PerlSIO_ftell
534 #    define fseek               PerlSIO_fseek
535 #    define fgetpos             PerlSIO_fgetpos
536 #    define fsetpos             PerlSIO_fsetpos
537 #    define frewind             PerlSIO_rewind
538 #    define tmpfile             PerlSIO_tmpfile
539 #    define access              PerlLIO_access
540 #    define chmod               PerlLIO_chmod
541 #    define chsize              PerlLIO_chsize
542 #    define close               PerlLIO_close
543 #    define dup                 PerlLIO_dup
544 #    define dup2                PerlLIO_dup2
545 #    define flock               PerlLIO_flock
546 #    define fstat               PerlLIO_fstat
547 #    define ioctl               PerlLIO_ioctl
548 #    define isatty              PerlLIO_isatty
549 #    define link                PerlLIO_link
550 #    define lseek               PerlLIO_lseek
551 #    define lstat               PerlLIO_lstat
552 #    define mktemp              PerlLIO_mktemp
553 #    define open                PerlLIO_open
554 #    define read                PerlLIO_read
555 #    define rename              PerlLIO_rename
556 #    define setmode             PerlLIO_setmode
557 #    define stat(buf,sb)        PerlLIO_stat(buf,sb)
558 #    define tmpnam              PerlLIO_tmpnam
559 #    define umask               PerlLIO_umask
560 #    define unlink              PerlLIO_unlink
561 #    define utime               PerlLIO_utime
562 #    define write               PerlLIO_write
563 #    define malloc              PerlMem_malloc
564 #    define realloc             PerlMem_realloc
565 #    define free                PerlMem_free
566 #    define abort               PerlProc_abort
567 #    define exit                PerlProc_exit
568 #    define _exit               PerlProc__exit
569 #    define execl               PerlProc_execl
570 #    define execv               PerlProc_execv
571 #    define execvp              PerlProc_execvp
572 #    define getuid              PerlProc_getuid
573 #    define geteuid             PerlProc_geteuid
574 #    define getgid              PerlProc_getgid
575 #    define getegid             PerlProc_getegid
576 #    define getlogin            PerlProc_getlogin
577 #    define kill                PerlProc_kill
578 #    define killpg              PerlProc_killpg
579 #    define pause               PerlProc_pause
580 #    define popen               PerlProc_popen
581 #    define pclose              PerlProc_pclose
582 #    define pipe                PerlProc_pipe
583 #    define setuid              PerlProc_setuid
584 #    define setgid              PerlProc_setgid
585 #    define sleep               PerlProc_sleep
586 #    define times               PerlProc_times
587 #    define wait                PerlProc_wait
588 #    define setjmp              PerlProc_setjmp
589 #    define longjmp             PerlProc_longjmp
590 #    define signal              PerlProc_signal
591 #    define getpid              PerlProc_getpid
592 #    define gettimeofday        PerlProc_gettimeofday
593 #    define htonl               PerlSock_htonl
594 #    define htons               PerlSock_htons
595 #    define ntohl               PerlSock_ntohl
596 #    define ntohs               PerlSock_ntohs
597 #    define accept              PerlSock_accept
598 #    define bind                PerlSock_bind
599 #    define connect             PerlSock_connect
600 #    define endhostent          PerlSock_endhostent
601 #    define endnetent           PerlSock_endnetent
602 #    define endprotoent         PerlSock_endprotoent
603 #    define endservent          PerlSock_endservent
604 #    define gethostbyaddr       PerlSock_gethostbyaddr
605 #    define gethostbyname       PerlSock_gethostbyname
606 #    define gethostent          PerlSock_gethostent
607 #    define gethostname         PerlSock_gethostname
608 #    define getnetbyaddr        PerlSock_getnetbyaddr
609 #    define getnetbyname        PerlSock_getnetbyname
610 #    define getnetent           PerlSock_getnetent
611 #    define getpeername         PerlSock_getpeername
612 #    define getprotobyname      PerlSock_getprotobyname
613 #    define getprotobynumber    PerlSock_getprotobynumber
614 #    define getprotoent         PerlSock_getprotoent
615 #    define getservbyname       PerlSock_getservbyname
616 #    define getservbyport       PerlSock_getservbyport
617 #    define getservent          PerlSock_getservent
618 #    define getsockname         PerlSock_getsockname
619 #    define getsockopt          PerlSock_getsockopt
620 #    define inet_addr           PerlSock_inet_addr
621 #    define inet_ntoa           PerlSock_inet_ntoa
622 #    define listen              PerlSock_listen
623 #    define recv                PerlSock_recv
624 #    define recvfrom            PerlSock_recvfrom
625 #    define select              PerlSock_select
626 #    define send                PerlSock_send
627 #    define sendto              PerlSock_sendto
628 #    define sethostent          PerlSock_sethostent
629 #    define setnetent           PerlSock_setnetent
630 #    define setprotoent         PerlSock_setprotoent
631 #    define setservent          PerlSock_setservent
632 #    define setsockopt          PerlSock_setsockopt
633 #    define shutdown            PerlSock_shutdown
634 #    define socket              PerlSock_socket
635 #    define socketpair          PerlSock_socketpair
636 #       endif   /* NETWARE && USE_STDIO */
637
638 #    undef fd_set
639 #    undef FD_SET
640 #    undef FD_CLR
641 #    undef FD_ISSET
642 #    undef FD_ZERO
643 #    define fd_set              Perl_fd_set
644 #    define FD_SET(n,p)         PERL_FD_SET(n,p)
645 #    define FD_CLR(n,p)         PERL_FD_CLR(n,p)
646 #    define FD_ISSET(n,p)       PERL_FD_ISSET(n,p)
647 #    define FD_ZERO(p)          PERL_FD_ZERO(p)
648
649 #  endif  /* NO_XSLOCKS */
650 #endif  /* PERL_IMPLICIT_SYS && !PERL_CORE */
651
652 #endif /* _INC_PERL_XSUB_H */           /* include guard */
653
654 /*
655  * Local variables:
656  * c-indentation-style: bsd
657  * c-basic-offset: 4
658  * indent-tabs-mode: nil
659  * End:
660  *
661  * ex: set ts=8 sts=4 sw=4 et:
662  */