FreeCalypso > hg > sms-coding-utils
diff libcoding/utf8_decode2.c @ 0:2d0082216916
libcoding: beginning with a subset of uptools version
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 05 Aug 2023 00:46:23 +0000 |
parents | |
children | e56bb9f09ff1 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libcoding/utf8_decode2.c Sat Aug 05 00:46:23 2023 +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); +}