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