summaryrefslogtreecommitdiff
path: root/pp_pack.c
diff options
context:
space:
mode:
authorKarl Williamson <khw@cpan.org>2021-12-16 14:30:36 -0700
committerKarl Williamson <khw@cpan.org>2021-12-28 07:58:11 -0700
commit3c2b2fcba1af380e364ca5be1cd42495caf25e89 (patch)
tree0c0c5e01175c78f8ec62c8fda0e3e87fae3311d5 /pp_pack.c
parent2c9cc169c7a3a605ffcc50c843807bbb3f7e3a75 (diff)
downloadperl-3c2b2fcba1af380e364ca5be1cd42495caf25e89.tar.gz
Change pack U behavior for EBCDIC
This effectively reverts 3ece276e6c0. It turns out this was a bad idea to make U mean the non-native official Unicode code points. It may seem to make sense to do so, but broke multiple CPAN modules which were using U the previous way. This commit has no effect on ASCII-platform functioning.
Diffstat (limited to 'pp_pack.c')
-rw-r--r--pp_pack.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/pp_pack.c b/pp_pack.c
index 78104a978c..41f72b798f 100644
--- a/pp_pack.c
+++ b/pp_pack.c
@@ -1320,16 +1320,12 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
len = UTF8SKIP(result);
if (!S_utf8_to_bytes(aTHX_ &ptr, strend,
(char *) &result[1], len-1, 'U')) break;
- auv = NATIVE_TO_UNI(utf8n_to_uvchr(result,
- len,
- &retlen,
- UTF8_ALLOW_DEFAULT));
+ auv = utf8n_to_uvchr(result, len, &retlen,
+ UTF8_ALLOW_DEFAULT);
s = ptr;
} else {
- auv = NATIVE_TO_UNI(utf8n_to_uvchr((U8*)s,
- strend - s,
- &retlen,
- UTF8_ALLOW_DEFAULT));
+ auv = utf8n_to_uvchr((U8*)s, strend - s, &retlen,
+ UTF8_ALLOW_DEFAULT);
if (retlen == (STRLEN) -1)
Perl_croak(aTHX_ "Malformed UTF-8 string in unpack");
s += retlen;
@@ -2668,7 +2664,7 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist )
auv = SvUV_no_inf(fromstr, datumtype);
if (utf8) {
U8 buffer[UTF8_MAXLEN+1], *endb;
- endb = uvchr_to_utf8_flags(buffer, UNI_TO_NATIVE(auv), 0);
+ endb = uvchr_to_utf8_flags(buffer, auv, 0);
if (cur+(endb-buffer)*UTF8_EXPAND >= end) {
*cur = '\0';
SvCUR_set(cat, cur - start);
@@ -2684,9 +2680,7 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist )
GROWING(0, cat, start, cur, len+UTF8_MAXLEN);
end = start+SvLEN(cat)-UTF8_MAXLEN;
}
- cur = (char *) uvchr_to_utf8_flags((U8 *) cur,
- UNI_TO_NATIVE(auv),
- 0);
+ cur = (char *) uvchr_to_utf8_flags((U8 *) cur, auv, 0);
}
}
break;