diff options
author | Nick Ing-Simmons <nik@tiuk.ti.com> | 2001-03-12 21:00:13 +0000 |
---|---|---|
committer | Nick Ing-Simmons <nik@tiuk.ti.com> | 2001-03-12 21:00:13 +0000 |
commit | 03cfe0aec1e921aae8754172fe1982455c07ce69 (patch) | |
tree | 91058c1d54edc3fdd5d8a8cc22fe8b3d7e82e73c /sv.c | |
parent | 5e12f4fbf2391bc262df1da61c1745c66dc76d71 (diff) | |
download | perl-03cfe0aec1e921aae8754172fe1982455c07ce69.tar.gz |
#ifdef'ed out code for 'USE_BYTES_DOWNGRADES' case.
p4raw-id: //depot/perlio@9110
Diffstat (limited to 'sv.c')
-rw-r--r-- | sv.c | 28 |
1 files changed, 25 insertions, 3 deletions
@@ -3013,15 +3013,37 @@ Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok) { if (SvPOK(sv) && SvUTF8(sv)) { if (SvCUR(sv)) { - char *s; + U8 *s; STRLEN len; if (SvREADONLY(sv) && SvFAKE(sv)) sv_force_normal(sv); - s = SvPV(sv, len); - if (!utf8_to_bytes((U8*)s, &len)) { + s = (U8 *) SvPV(sv, len); + if (!utf8_to_bytes(s, &len)) { if (fail_ok) return FALSE; +#ifdef USE_BYTES_DOWNGRADES + else if (IN_BYTE) { + U8 *d = s; + U8 *e = (U8 *) SvEND(sv); + int first = 1; + while (s < e) { + UV ch = utf8n_to_uvchr(s,(e-s),&len,0); + if (first && ch > 255) { + if (PL_op) + Perl_warner(aTHX_ WARN_UTF8, "Wide character in byte %s", + PL_op_desc[PL_op->op_type]); + else + Perl_warner(aTHX_ WARN_UTF8, "Wide character in byte"); + first = 0; + } + *d++ = ch; + s += len; + } + *d = '\0'; + len = (d - (U8 *) SvPVX(sv)); + } +#endif else { if (PL_op) Perl_croak(aTHX_ "Wide character in %s", |