diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 2000-07-11 17:48:28 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 2000-07-11 17:48:28 +0000 |
commit | 6940069f6d5beebb5f66572e358b4e7d0c3d1c43 (patch) | |
tree | 1ec564cae83fe8b5bf2813e3e62004aac0d7fcac /utf8.c | |
parent | 2579426e47320c9ace24a5a2459d12ebcdedba4c (diff) | |
download | perl-6940069f6d5beebb5f66572e358b4e7d0c3d1c43.tar.gz |
integrate cfgperl changes#6220..6222 into mainline
p4raw-link: @6222 on //depot/cfgperl: cb6e01d9fd93f1025bb60ed9c000931b2c8542a3
p4raw-link: @6220 on //depot/cfgperl: 94414bfbc497e71da32f6edca513d34725e3cae6
p4raw-id: //depot/perl@6350
p4raw-integrated: from //depot/cfgperl@6349 'copy in' lib/Pod/Usage.pm
(@5717..) win32/win32.h (@6026..) pod/perlop.pod (@6206..)
p4raw-integrated: from //depot/cfgperl@6221 'copy in' utf8.c (@6174..)
doop.c (@6193..) toke.c (@6196..) 'merge in' embed.pl (@6217..)
p4raw-integrated: from //depot/cfgperl@6220 'merge in' makedef.pl
(@6156..)
Diffstat (limited to 'utf8.c')
-rw-r--r-- | utf8.c | 66 |
1 files changed, 66 insertions, 0 deletions
@@ -222,6 +222,72 @@ Perl_utf8_hop(pTHX_ U8 *s, I32 off) return s; } +/* +=for apidoc utf8_to_bytes + +Converts a string C<s> of length C<len> from UTF8 into ASCII encoding. +Unlike C<bytes_to_utf8>, this over-writes the original string. + +=cut +*/ + +U8 * +Perl_utf8_to_bytes(pTHX_ U8* s, STRLEN len) +{ + dTHR; + U8 *send; + U8 *d; + U8 *save; + + send = s + len; + d = save = s; + while (s < send) { + if (*s < 0x80) + *d++ = *s++; + else { + I32 ulen; + UV uv = utf8_to_uv(s, &ulen); + s += ulen; + *d++ = (U8)uv; + } + } + *d = '\0'; + return save; +} + +/* +=for apidoc bytes_to_utf8 + +Converts a string C<s> of length C<len> from ASCII into UTF8 encoding. +Returns a pointer to the newly-created string. + +*/ + +U8* +Perl_bytes_to_utf8(pTHX_ U8* s, STRLEN len) +{ + dTHR; + U8 *send; + U8 *d; + U8 *dst; + send = s + len; + + Newz(801, d, len * 2 + 1, U8); + dst = d; + + while (s < send) { + if (*s < 0x80) + *d++ = *s++; + else { + UV uv = *s++; + *d++ = (( uv >> 6) | 0xc0); + *d++ = (( uv & 0x3f) | 0x80); + } + } + *d = '\0'; + return dst; +} + /* XXX NOTHING CALLS THE FOLLOWING TWO ROUTINES YET!!! */ /* * Convert native or reversed UTF-16 to UTF-8. |