FreeCalypso > hg > freecalypso-tools
changeset 376:83c755829e31
uptools/libcoding: added function for turning UTF-8 into UCS-2
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 08 Mar 2018 23:06:31 +0000 |
parents | 759cb6dc501b |
children | f7228c18463a |
files | uptools/libcoding/Makefile uptools/libcoding/utf8_decode2.c |
diffstat | 2 files changed, 44 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/uptools/libcoding/Makefile Thu Mar 08 22:24:14 2018 +0000 +++ b/uptools/libcoding/Makefile Thu Mar 08 23:06:31 2018 +0000 @@ -4,7 +4,7 @@ gsm7_decode_tables.o gsm7_encode.o gsm7_encode_table.o gsm7_pack.o \ gsm7_unpack.o gsmtime.o hexdecode.o hexdump.o hexencode.o \ number_decode.o number_encode.o scaddr.o sms_submit.o sms_submit8.o \ - ucs2_decode.o utf8_decode.o + ucs2_decode.o utf8_decode.o utf8_decode2.o LIB= libcoding.a all: ${LIB}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uptools/libcoding/utf8_decode2.c Thu Mar 08 23:06:31 2018 +0000 @@ -0,0 +1,43 @@ +/* + * This library module implements the function for converting UTF-8 input + * to UCS-2 in outgoing SMS composition. + */ + +#include <sys/types.h> + +utf8_to_ucs2(inbuf, outbuf, outmax, outlenp) + u_char *inbuf; + u_short *outbuf; + unsigned outmax, *outlenp; +{ + u_char *ip = inbuf; + u_short *op = outbuf; + unsigned outcnt = 0, c, n, uni; + + while (c = *ip++) { + if (c < 0x80) { + uni = c; + goto gotuni; + } + if (c < 0xC0 || c > 0xEF) + return(-1); + uni = c & 0x1F; + if (c >= 0xE0) + n = 2; + else + n = 1; + for (; n; n--) { + c = *ip++; + if (c < 0x80 || c > 0xBF) + return(-1); + uni <<= 6; + uni |= c & 0x3F; + } +gotuni: if (outcnt >= outmax) + return(-2); + *op++ = uni; + outcnt++; + } + *outlenp = outcnt; + return(0); +}