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