Quickier thread-specific data on OS/2
[p5sagit/p5-mst-13.2.git] / XSUB.h
diff --git a/XSUB.h b/XSUB.h
index ad465a0..13e5de4 100644 (file)
--- a/XSUB.h
+++ b/XSUB.h
@@ -4,7 +4,13 @@
 #  ifdef PERL_OBJECT
 #    define XS(name) void name(CV* cv, CPerlObj* pPerl)
 #  else
-#    define XS(name) void name(CV* cv)
+#    if defined(CYGWIN32) && defined(USE_DYNAMIC_LOADING)
+#      define XS(name) __declspec(dllexport) void name(CV* cv)
+       extern struct _reent *_impure_ptr;
+       void impure_setup(struct _reent *_impure_ptrMain);
+#    else
+#      define XS(name) void name(CV* cv)
+#    endif
 #  endif
 #else
 #  define XS(name) void name(cv) CV* cv;
@@ -40,6 +46,7 @@
 #define XST_mIV(i,v)  (ST(i) = sv_2mortal(newSViv(v))  )
 #define XST_mNV(i,v)  (ST(i) = sv_2mortal(newSVnv(v))  )
 #define XST_mPV(i,v)  (ST(i) = sv_2mortal(newSVpv(v,0)))
+#define XST_mPVN(i,v,n)  (ST(i) = sv_2mortal(newSVpvn(v,n)))
 #define XST_mNO(i)    (ST(i) = &PL_sv_no   )
 #define XST_mYES(i)   (ST(i) = &PL_sv_yes  )
 #define XST_mUNDEF(i) (ST(i) = &PL_sv_undef)
@@ -47,6 +54,7 @@
 #define XSRETURN_IV(v) STMT_START { XST_mIV(0,v);  XSRETURN(1); } STMT_END
 #define XSRETURN_NV(v) STMT_START { XST_mNV(0,v);  XSRETURN(1); } STMT_END
 #define XSRETURN_PV(v) STMT_START { XST_mPV(0,v);  XSRETURN(1); } STMT_END
+#define XSRETURN_PVN(v) STMT_START { XST_mPVN(0,v,n);  XSRETURN(1); } STMT_END
 #define XSRETURN_NO    STMT_START { XST_mNO(0);    XSRETURN(1); } STMT_END
 #define XSRETURN_YES   STMT_START { XST_mYES(0);   XSRETURN(1); } STMT_END
 #define XSRETURN_UNDEF STMT_START { XST_mUNDEF(0); XSRETURN(1); } STMT_END
 #    define telldir            PerlDir_tell
 #    define putenv             PerlEnv_putenv
 #    define getenv             PerlEnv_getenv
+#    define uname              PerlEnv_uname
 #    define stdin              PerlIO_stdin()
 #    define stdout             PerlIO_stdout()
 #    define stderr             PerlIO_stderr()