FreeCalypso > hg > freecalypso-tools
diff uptools/libcoding/utf8_decode2.c @ 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 | |
children | 6bf473f77fc4 |
line wrap: on
line diff
--- /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); +}