diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2003-01-16 20:36:23 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2003-01-16 20:36:23 +0000 |
commit | 88632417a970dff8f92718b0800b1aa1400cb4ae (patch) | |
tree | ea66b4eab7dfc6a1a4ebdd064c01f1f0095bcfe1 /pp.c | |
parent | caf774a6b47c93401a4581fab332b04b560c89d5 (diff) | |
download | perl-88632417a970dff8f92718b0800b1aa1400cb4ae.tar.gz |
Fix 'use encoding' I/O for code points 0x80..0xFF;
code changes from Inaba Hiroto; test tweaks by jhi.
p4raw-id: //depot/perl@18496
Diffstat (limited to 'pp.c')
-rw-r--r-- | pp.c | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -3278,8 +3278,19 @@ PP(pp_chr) *tmps++ = (char)value; *tmps = '\0'; (void)SvPOK_only(TARG); - if (PL_encoding) + if (PL_encoding && !IN_BYTES) { sv_recode_to_utf8(TARG, PL_encoding); + tmps = SvPVX(TARG); + if (SvCUR(TARG) == 0 || !is_utf8_string((U8*)tmps, SvCUR(TARG)) || + memEQ(tmps, "\xef\xbf\xbd\0", 4)) { + SvGROW(TARG,3); + SvCUR_set(TARG, 2); + *tmps++ = (U8)UTF8_EIGHT_BIT_HI(value); + *tmps++ = (U8)UTF8_EIGHT_BIT_LO(value); + *tmps = '\0'; + SvUTF8_on(TARG); + } + } XPUSHs(TARG); RETURN; } |