diff options
author | Artur Bergman <sky@nanisky.com> | 2001-06-26 17:32:53 +0200 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-06-26 12:36:07 +0000 |
commit | c43294b8228352af5778f0b0d7935ff67661117e (patch) | |
tree | bbafcccf7c7d97d39008ec9b9700faa304e0dee5 | |
parent | 3b86e92a87cef9dae91e9963b5f65e42f4be9fa9 (diff) | |
download | perl-c43294b8228352af5778f0b0d7935ff67661117e.tar.gz |
Adds perl_clone_host under IMPLICIT SYS
Message-ID: <B75E5BA5.1A7C%artur@contiller.se>
p4raw-id: //depot/perl@10954
-rw-r--r-- | makedef.pl | 2 | ||||
-rw-r--r-- | sv.c | 11 | ||||
-rw-r--r-- | sv.h | 1 | ||||
-rw-r--r-- | win32/perllib.c | 23 |
4 files changed, 35 insertions, 2 deletions
diff --git a/makedef.pl b/makedef.pl index 376f3288af..4fe193bb90 100644 --- a/makedef.pl +++ b/makedef.pl @@ -148,6 +148,7 @@ if ($PLATFORM eq 'win32') { if ($define{PERL_IMPLICIT_SYS}) { output_symbol("perl_get_host_info"); output_symbol("perl_alloc_override"); + output_symbol("perl_clone_host"); } } elsif ($PLATFORM eq 'os2') { @@ -185,6 +186,7 @@ elsif ($PLATFORM eq 'netware') { if ($define{PERL_IMPLICIT_SYS}) { output_symbol("perl_get_host_info"); output_symbol("perl_alloc_override"); + output_symbol("perl_clone_host"); } } @@ -8957,7 +8957,7 @@ Perl_sv_dup(pTHX_ SV *sstr, clone_params* param) } HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */ HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr)); - /* Record stashes for possible cloning in Perl_clone_using(). */ + /* Record stashes for possible cloning in Perl_clone(). */ if(HvNAME((HV*)dstr)) av_push(param->stashes, dstr); break; @@ -9451,7 +9451,14 @@ perl_clone(PerlInterpreter *proto_perl, UV flags) #endif #ifdef PERL_IMPLICIT_SYS - return perl_clone_using(proto_perl, flags, + + /* perlhost.h so we need to call into it + to clone the host, CPerlHost should have a c interface, sky */ + + if (flags & CLONEf_CLONE_HOST) { + return perl_clone_host(proto_perl,flags); + } + return perl_clone_using(proto_perl, flags, proto_perl->IMem, proto_perl->IMemShared, proto_perl->IMemParse, @@ -1215,6 +1215,7 @@ Returns a pointer to the character buffer. #define CLONEf_COPY_STACKS 1 #define CLONEf_KEEP_PTR_TABLE 2 +#define CLONEf_CLONE_HOST 4 typedef struct { AV* stashes; diff --git a/win32/perllib.c b/win32/perllib.c index 87b79c031d..36b19a3ad9 100644 --- a/win32/perllib.c +++ b/win32/perllib.c @@ -396,3 +396,26 @@ DllMain(HANDLE hModule, /* DLL module handle */ } return TRUE; } + +#ifdef USE_ITHREADS +EXTERN_C PerlInterpreter * +perl_clone_host(PerlInterpreter* proto_perl, UV flags) { + dTHXo; + CPerlHost *h; + h = new CPerlHost(*(CPerlHost*)PL_sys_intern.internal_host); + proto_perl = perl_clone_using(proto_perl, flags, + h->m_pHostperlMem, + h->m_pHostperlMemShared, + h->m_pHostperlMemParse, + h->m_pHostperlEnv, + h->m_pHostperlStdIO, + h->m_pHostperlLIO, + h->m_pHostperlDir, + h->m_pHostperlSock, + h->m_pHostperlProc + ); + proto_perl->Isys_intern.internal_host = h; + return proto_perl; + +} +#endif |