summaryrefslogtreecommitdiff
path: root/pp.c
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2001-02-28 15:00:27 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2001-02-28 15:00:27 +0000
commit494f3023e6cb99f0f26ded70a0869fe24d04973e (patch)
tree42cccdba43cf6a05c9488748acd1356fe0f2eea7 /pp.c
parent4ac9195fe27b27610b09db5d1e9a4a36a7b59787 (diff)
downloadperl-494f3023e6cb99f0f26ded70a0869fe24d04973e.tar.gz
Retract #8865 and #8869, un?pack C now again agree with Camel 3
by not changing from pre-Unicode days into being Unicode-aware. Sniff. p4raw-id: //depot/perl@8966
Diffstat (limited to 'pp.c')
-rw-r--r--pp.c83
1 files changed, 13 insertions, 70 deletions
diff --git a/pp.c b/pp.c
index 6ff39fa82c..1bbb1086ad 100644
--- a/pp.c
+++ b/pp.c
@@ -4064,7 +4064,6 @@ PP(pp_unpack)
U16 aushort;
unsigned int auint;
U32 aulong;
- UV auv;
#ifdef HAS_QUAD
Uquad_t auquad;
#endif
@@ -4332,46 +4331,20 @@ PP(pp_unpack)
if (len > strend - s)
len = strend - s;
if (checksum) {
- if (DO_UTF8(right)) {
- while (len > 0) {
- STRLEN l;
- auv = utf8_to_uv((U8*)s, strend - s,
- &l, UTF8_ALLOW_ANYUV);
- culong += auv;
- s += l;
- len -= l;
- }
- }
- else {
- uchar_checksum:
- while (len-- > 0) {
- auint = *s++ & 0xFF;
- culong += auint;
- }
+ uchar_checksum:
+ while (len-- > 0) {
+ auint = *s++ & 255;
+ culong += auint;
}
}
else {
EXTEND(SP, len);
EXTEND_MORTAL(len);
- if (DO_UTF8(right)) {
- while (len > 0) {
- STRLEN l;
- auv = utf8_to_uv((U8*)s, strend - s,
- &l, UTF8_ALLOW_ANYUV);
- sv = NEWSV(37, 0);
- sv_setuv(sv, auv);
- PUSHs(sv_2mortal(sv));
- s += l;
- len -= l;
- }
- }
- else {
- while (len-- > 0) {
- auint = *s++ & 0xFF;
- sv = NEWSV(37, 0);
- sv_setuv(sv, auint);
- PUSHs(sv_2mortal(sv));
- }
+ while (len-- > 0) {
+ auint = *s++ & 255;
+ sv = NEWSV(37, 0);
+ sv_setiv(sv, (IV)auint);
+ PUSHs(sv_2mortal(sv));
}
}
break;
@@ -5172,7 +5145,6 @@ PP(pp_pack)
unsigned int auint;
I32 along;
U32 aulong;
- UV auv;
#ifdef HAS_QUAD
Quad_t aquad;
Uquad_t auquad;
@@ -5184,7 +5156,6 @@ PP(pp_pack)
#ifdef PERL_NATINT_PACK
int natint; /* native integer */
#endif
- bool has_utf8;
items = SP - MARK;
MARK++;
@@ -5421,6 +5392,7 @@ PP(pp_pack)
items = saveitems;
}
break;
+ case 'C':
case 'c':
while (len-- > 0) {
fromstr = NEXTFROM;
@@ -5429,41 +5401,12 @@ PP(pp_pack)
sv_catpvn(cat, &achar, sizeof(char));
}
break;
- case 'C':
- has_utf8 = SvUTF8(cat);
- while (len-- > 0) {
- fromstr = NEXTFROM;
- auv = SvUV(fromstr);
- if (!has_utf8 && auv > 0xFF && !IN_BYTE) {
- has_utf8 = TRUE;
- if (SvCUR(cat))
- sv_utf8_upgrade(cat);
- else
- SvUTF8_on(cat); /* There will be UTF8. */
- }
- if (has_utf8) {
- SvGROW(cat, SvCUR(cat) + UNISKIP(auv) + 1);
- SvCUR_set(cat, (char*)uv_to_utf8((U8*)SvEND(cat),auv)
- - SvPVX(cat));
- }
- else {
- achar = auv;
- sv_catpvn(cat, &achar, sizeof(char));
- }
- }
- *SvEND(cat) = '\0';
- break;
case 'U':
- has_utf8 = SvUTF8(cat);
while (len-- > 0) {
fromstr = NEXTFROM;
- auv = SvUV(fromstr);
- if (!has_utf8 && auv > 0x80) {
- has_utf8 = TRUE;
- sv_utf8_upgrade(cat);
- }
- SvGROW(cat, SvCUR(cat) + UNISKIP(auv) + 1);
- SvCUR_set(cat, (char*)uv_to_utf8((U8*)SvEND(cat),auv)
+ auint = SvUV(fromstr);
+ SvGROW(cat, SvCUR(cat) + UTF8_MAXLEN + 1);
+ SvCUR_set(cat, (char*)uv_to_utf8((U8*)SvEND(cat),auint)
- SvPVX(cat));
}
*SvEND(cat) = '\0';