diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 1998-05-14 10:53:55 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 1998-05-14 10:53:55 +0000 |
commit | 20408e3ccf502b6ce4033d8203710405ec9ef8f6 (patch) | |
tree | afa7181c847061200a7323363f84fe42102c2aa3 /pp.c | |
parent | 9b599b2a63d2324ddacddd9710c41b795a95070d (diff) | |
download | perl-20408e3ccf502b6ce4033d8203710405ec9ef8f6.tar.gz |
[win32] merge change#896 from maintbranch
p4raw-link: @896 on //depot/maint-5.004/perl: 0562b9ae2b0eff79632fc0164c13c34c06a019e2
p4raw-id: //depot/win32/perl@938
Diffstat (limited to 'pp.c')
-rw-r--r-- | pp.c | 21 |
1 files changed, 20 insertions, 1 deletions
@@ -774,7 +774,17 @@ PP(pp_undef) break; case SVt_PVGV: if (SvFAKE(sv)) - sv_setsv(sv, &sv_undef); + SvSetMagicSV(sv, &sv_undef); + else { + GP *gp; + gp_free((GV*)sv); + Newz(602, gp, 1, GP); + GvGP(sv) = gp_ref(gp); + GvSV(sv) = NEWSV(72,0); + GvLINE(sv) = curcop->cop_line; + GvEGV(sv) = (GV*)sv; + GvMULTI_on(sv); + } break; default: if (SvTYPE(sv) >= SVt_PV && SvPVX(sv) && SvLEN(sv)) { @@ -1781,6 +1791,7 @@ PP(pp_substr) char *tmps; I32 arybase = curcop->cop_arybase; + SvTAINTED_off(TARG); /* decontaminate */ if (MAXARG > 2) len = POPi; pos = POPi; @@ -1869,6 +1880,7 @@ PP(pp_vec) unsigned long retnum; I32 len; + SvTAINTED_off(TARG); /* decontaminate */ offset *= size; /* turn into bit offset */ len = (offset + size + 7) / 8; if (offset < 0 || size < 1) @@ -3216,6 +3228,13 @@ PP(pp_unpack) Copy(s, &aint, 1, int); s += sizeof(int); sv = NEWSV(40, 0); +#ifdef __osf__ + /* Without the dummy below unpack("i", pack("i",-1)) + * return 0xFFffFFff instead of -1 for Digital Unix V4.0 + * cc with optimization turned on */ + (aint) ? + sv_setiv(sv, (IV)aint) : +#endif sv_setiv(sv, (IV)aint); PUSHs(sv_2mortal(sv)); } |