diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2001-02-28 15:00:27 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-02-28 15:00:27 +0000 |
commit | 494f3023e6cb99f0f26ded70a0869fe24d04973e (patch) | |
tree | 42cccdba43cf6a05c9488748acd1356fe0f2eea7 /pp.c | |
parent | 4ac9195fe27b27610b09db5d1e9a4a36a7b59787 (diff) | |
download | perl-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.c | 83 |
1 files changed, 13 insertions, 70 deletions
@@ -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'; |