diff options
author | Artur Bergman <sky@nanisky.com> | 2003-04-17 20:02:33 +0000 |
---|---|---|
committer | Artur Bergman <sky@nanisky.com> | 2003-04-17 20:02:33 +0000 |
commit | 281b276053f3a564bdb388e48f0a5b38c036197a (patch) | |
tree | c09d0b6b831212e22283dc00a230f67d029382a1 /sv.c | |
parent | 5e6160dc45a74849468013747b2649ba17c9faab (diff) | |
download | perl-281b276053f3a564bdb388e48f0a5b38c036197a.tar.gz |
Another needle in the voodoo doll.
Now I think it should work with the shared
strings.
p4raw-id: //depot/perl@19262
Diffstat (limited to 'sv.c')
-rw-r--r-- | sv.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -9864,14 +9864,20 @@ Perl_rvpv_dup(pTHX_ SV *dstr, SV *sstr, CLONE_PARAMS* param) /* Special case - not normally malloced for some reason */ if (SvREADONLY(sstr) && SvFAKE(sstr)) { /* A "shared" PV - clone it as unshared string */ - if(!SvPADTMP(sstr)) { + if(SvPADTMP(sstr)) { /* However, some of them live in the pad and they should not have these flags turned off */ - SvFAKE_off(dstr); - SvREADONLY_off(dstr); + + SvPVX(dstr) = sharepvn(SvPVX(sstr), SvCUR(sstr), + SvUVX(sstr)); + SvUVX(dstr) = SvUVX(sstr); + } else { + + SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvCUR(sstr)); + SvFAKE_off(dstr); + SvREADONLY_off(dstr); } - SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvCUR(sstr)); } else { /* Some other special case - random pointer */ |