summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
authorAnton Tagunov <tagunov@motor.ru>2002-03-08 07:31:44 +0300
committerJarkko Hietaniemi <jhi@iki.fi>2002-03-08 01:40:41 +0000
commit553e1bccd86c250b3dbeaa468c16f0244c6db836 (patch)
tree5c08401f707bb0c12645e36a871712695bf0c74f /sv.c
parent608dbdb1bd10406f3fb208674374d812c862ecb7 (diff)
downloadperl-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.c73
1 files changed, 29 insertions, 44 deletions
diff --git a/sv.c b/sv.c
index 2dfc8d4adf..799ffab5a3 100644
--- a/sv.c
+++ b/sv.c
@@ -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;
}