summaryrefslogtreecommitdiff
path: root/utf8.c
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>2000-07-11 17:48:28 +0000
committerGurusamy Sarathy <gsar@cpan.org>2000-07-11 17:48:28 +0000
commit6940069f6d5beebb5f66572e358b4e7d0c3d1c43 (patch)
tree1ec564cae83fe8b5bf2813e3e62004aac0d7fcac /utf8.c
parent2579426e47320c9ace24a5a2459d12ebcdedba4c (diff)
downloadperl-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.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/utf8.c b/utf8.c
index 76eb932f2d..b570b12ae3 100644
--- a/utf8.c
+++ b/utf8.c
@@ -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.