struct hostent*
PerlSockGethostent(struct IPerlSock*)
{
- dPERLOBJ;
+ dTHXo;
croak("gethostent not implemented!\n");
return NULL;
}
int
PerlSockSocketpair(struct IPerlSock*, int domain, int type, int protocol, int* fds)
{
- dPERLOBJ;
+ dTHXo;
croak("socketpair not implemented!\n");
return 0;
}
int
PerlProcKillpg(struct IPerlProc*, int pid, int sig)
{
- dPERLOBJ;
+ dTHXo;
croak("killpg not implemented!\n");
return 0;
}
//#include "perlhost.h"
-static DWORD g_TlsAllocIndex;
-BOOL SetPerlInterpreter(CPerlObj* pPerl)
-{
- return TlsSetValue(g_TlsAllocIndex, pPerl);
-}
-
-EXTERN_C CPerlObj* GetPerlInterpreter(PerlInterpreter* sv_interp)
-{
- if(GetCurrentThreadId() == (DWORD)sv_interp)
- return (CPerlObj*)TlsGetValue(g_TlsAllocIndex);
- return NULL;
-}
-
-CPerlObj* GetPerlInter(void)
-{
- return (CPerlObj*)TlsGetValue(g_TlsAllocIndex);
-}
-
EXTERN_C void perl_get_host_info(IPerlMemInfo* perlMemInfo,
IPerlEnvInfo* perlEnvInfo, IPerlStdIOInfo* perlStdIOInfo,
if(pPerl)
{
SetPerlInterpreter(pPerl);
- return (PerlInterpreter*)GetCurrentThreadId();
+ return (PerlInterpreter*)pPerl;
}
SetPerlInterpreter(NULL);
return NULL;
if(pPerl)
{
SetPerlInterpreter(pPerl);
- return (PerlInterpreter*)GetCurrentThreadId();
+ return (PerlInterpreter*)pPerl;
}
SetPerlInterpreter(NULL);
return NULL;
EXTERN_C void perl_construct(PerlInterpreter* sv_interp)
{
- CPerlObj* pPerl = GetPerlInterpreter(sv_interp);
+ CPerlObj* pPerl = (CPerlObj*)sv_interp;
try
{
pPerl->perl_construct();
EXTERN_C void perl_destruct(PerlInterpreter* sv_interp)
{
- CPerlObj* pPerl = GetPerlInterpreter(sv_interp);
+ CPerlObj* pPerl = (CPerlObj*)sv_interp;
try
{
pPerl->perl_destruct();
EXTERN_C void perl_free(PerlInterpreter* sv_interp)
{
- CPerlObj* pPerl = GetPerlInterpreter(sv_interp);
+ CPerlObj* pPerl = (CPerlObj*)sv_interp;
try
{
pPerl->perl_free();
EXTERN_C int perl_run(PerlInterpreter* sv_interp)
{
- CPerlObj* pPerl = GetPerlInterpreter(sv_interp);
+ CPerlObj* pPerl = (CPerlObj*)sv_interp;
int retVal;
try
{
EXTERN_C int perl_parse(PerlInterpreter* sv_interp, void (*xsinit)(CPerlObj*), int argc, char** argv, char** env)
{
int retVal;
- CPerlObj* pPerl = GetPerlInterpreter(sv_interp);
+ CPerlObj* pPerl = (CPerlObj*)sv_interp;
try
{
retVal = pPerl->perl_parse(xs_init, argc, argv, env);
extern HANDLE w32_perldll_handle;
#endif /* PERL_OBJECT */
-DllExport int
+static DWORD g_TlsAllocIndex;
+
+EXTERN_C DllExport bool
+SetPerlInterpreter(void *interp)
+{
+ return TlsSetValue(g_TlsAllocIndex, interp);
+}
+
+EXTERN_C DllExport void*
+GetPerlInterpreter(void)
+{
+ return TlsGetValue(g_TlsAllocIndex);
+}
+
+EXTERN_C DllExport int
RunPerl(int argc, char **argv, char **env)
{
int exitstatus;
setmode( fileno( stderr ), O_BINARY );
_fmode = O_BINARY;
#endif
-#ifdef PERL_OBJECT
g_TlsAllocIndex = TlsAlloc();
DisableThreadLibraryCalls(hModule);
-#else
+#ifndef PERL_OBJECT
w32_perldll_handle = hModule;
#endif
break;
* process termination or call to FreeLibrary.
*/
case DLL_PROCESS_DETACH:
-#ifdef PERL_OBJECT
TlsFree(g_TlsAllocIndex);
-#endif
break;
/* The attached process creates a new thread. */