# HG changeset patch # User Mychaela Falconia # Date 1520550391 0 # Node ID 83c755829e31c18e9a57d2744685d2b95a50d691 # Parent 759cb6dc501b16249790cd3fba219b6c4eba0b1f uptools/libcoding: added function for turning UTF-8 into UCS-2 diff -r 759cb6dc501b -r 83c755829e31 uptools/libcoding/Makefile --- 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} diff -r 759cb6dc501b -r 83c755829e31 uptools/libcoding/utf8_decode2.c --- /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 + +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); +}