diff options
author | Karl Williamson <khw@cpan.org> | 2021-12-16 14:30:36 -0700 |
---|---|---|
committer | Karl Williamson <khw@cpan.org> | 2021-12-28 07:58:11 -0700 |
commit | 3c2b2fcba1af380e364ca5be1cd42495caf25e89 (patch) | |
tree | 0c0c5e01175c78f8ec62c8fda0e3e87fae3311d5 /pp_pack.c | |
parent | 2c9cc169c7a3a605ffcc50c843807bbb3f7e3a75 (diff) | |
download | perl-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.c | 18 |
1 files changed, 6 insertions, 12 deletions
@@ -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; |