diff options
author | Anton Tagunov <tagunov@motor.ru> | 2002-03-08 07:31:44 +0300 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2002-03-08 01:40:41 +0000 |
commit | 553e1bccd86c250b3dbeaa468c16f0244c6db836 (patch) | |
tree | 5c08401f707bb0c12645e36a871712695bf0c74f /sv.c | |
parent | 608dbdb1bd10406f3fb208674374d812c862ecb7 (diff) | |
download | perl-553e1bccd86c250b3dbeaa468c16f0244c6db836.tar.gz |
Re[2]: [ID 20020307.006] [BUG][use encoding] use encoding 'greek'; print "not" unless pack("U*", 0x3af) eq pack("C*", 0xdf) prints "not"!
Message-ID: <13946506773.20020308043144@newmail.ru>
(one test changed)
p4raw-id: //depot/perl@15088
Diffstat (limited to 'sv.c')
-rw-r--r-- | sv.c | 73 |
1 files changed, 29 insertions, 44 deletions
@@ -5349,10 +5349,8 @@ Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2) char *pv2; STRLEN cur2; I32 eq = 0; - char *tpv1 = Nullch; - char *tpv2 = Nullch; - SV* sv1recode = Nullsv; - SV* sv2recode = Nullsv; + char *tpv = Nullch; + SV* svrecode = Nullsv; if (!sv1) { pv1 = ""; @@ -5373,14 +5371,14 @@ Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2) * Do not UTF8size the comparands as a side-effect. */ if (PL_encoding) { if (SvUTF8(sv1)) { - sv2recode = newSVpvn(pv2, cur2); - sv_recode_to_utf8(sv2recode, PL_encoding); - pv2 = SvPV(sv2recode, cur2); + svrecode = newSVpvn(pv2, cur2); + sv_recode_to_utf8(svrecode, PL_encoding); + pv2 = SvPV(svrecode, cur2); } else { - sv1recode = newSVpvn(pv1, cur1); - sv_recode_to_utf8(sv1recode, PL_encoding); - pv2 = SvPV(sv1recode, cur1); + svrecode = newSVpvn(pv1, cur1); + sv_recode_to_utf8(svrecode, PL_encoding); + pv1 = SvPV(svrecode, cur1); } /* Now both are in UTF-8. */ if (cur1 != cur2) @@ -5395,7 +5393,7 @@ Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2) char *pv = (char*)bytes_from_utf8((U8*)pv1, &cur1, &is_utf8); if (pv != pv1) - pv1 = tpv1 = pv; + pv1 = tpv = pv; } else { /* sv2 is the UTF-8 one, @@ -5403,7 +5401,7 @@ Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2) char *pv = (char *)bytes_from_utf8((U8*)pv2, &cur2, &is_utf8); if (pv != pv2) - pv2 = tpv2 = pv; + pv2 = tpv = pv; } if (is_utf8) { /* Downgrade not possible - cannot be eq */ @@ -5415,15 +5413,11 @@ Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2) if (cur1 == cur2) eq = memEQ(pv1, pv2, cur1); - if (sv1recode) - SvREFCNT_dec(sv1recode); - if (sv2recode) - SvREFCNT_dec(sv2recode); + if (svrecode) + SvREFCNT_dec(svrecode); - if (tpv1) - Safefree(tpv1); - if (tpv2) - Safefree(tpv2); + if (tpv) + Safefree(tpv); return eq; } @@ -5443,12 +5437,9 @@ I32 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2) { STRLEN cur1, cur2; - char *pv1, *pv2; + char *pv1, *pv2, *tpv = Nullch; I32 cmp; - bool pv1tmp = FALSE; - bool pv2tmp = FALSE; - SV *sv1recode = Nullsv; - SV *sv2recode = Nullsv; + SV *svrecode = Nullsv; if (!sv1) { pv1 = ""; @@ -5457,7 +5448,7 @@ Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2) else pv1 = SvPV(sv1, cur1); - if (!sv2){ + if (!sv2) { pv2 = ""; cur2 = 0; } @@ -5469,24 +5460,22 @@ Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2) * Do not UTF8size the comparands as a side-effect. */ if (SvUTF8(sv1)) { if (PL_encoding) { - sv2recode = newSVpvn(pv2, cur2); - sv_recode_to_utf8(sv2recode, PL_encoding); - pv2 = SvPV(sv2recode, cur2); + svrecode = newSVpvn(pv2, cur2); + sv_recode_to_utf8(svrecode, PL_encoding); + pv2 = SvPV(svrecode, cur2); } else { - pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2); - pv2tmp = TRUE; + pv2 = tpv = (char*)bytes_to_utf8((U8*)pv2, &cur2); } } else { if (PL_encoding) { - sv1recode = newSVpvn(pv1, cur1); - sv_recode_to_utf8(sv1recode, PL_encoding); - pv1 = SvPV(sv1recode, cur1); + svrecode = newSVpvn(pv1, cur1); + sv_recode_to_utf8(svrecode, PL_encoding); + pv1 = SvPV(svrecode, cur1); } else { - pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1); - pv1tmp = TRUE; + pv1 = tpv = (char*)bytes_to_utf8((U8*)pv1, &cur1); } } } @@ -5507,15 +5496,11 @@ Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2) } } - if (sv1recode) - SvREFCNT_dec(sv1recode); - if (sv2recode) - SvREFCNT_dec(sv2recode); + if (svrecode) + SvREFCNT_dec(svrecode); - if (pv1tmp) - Safefree(pv1); - if (pv2tmp) - Safefree(pv2); + if (tpv) + Safefree(tpv); return cmp; } |