view uptools/libcoding/ucs2_decode.c @ 391:53b474e7e590
doc/Host-tools-overview: documented new additions
author |
Mychaela Falconia <falcon@freecalypso.org> |
date |
Sun, 11 Mar 2018 18:20:00 +0000 (2018-03-11) |
parents |
978571e23318 |
children |
1c599681fd60 |
line source
/*
* This library module implements the conversion of UCS2-encoded data
* (typically received in SMS) into ASCII, ISO 8859-1 or UTF-8,
* maintaining parallelism with the corresponding function for decoding
* GSM7-encoded data.
*/
#include <sys/types.h>
ucs2_to_ascii_or_ext(inbuf, inlen, outbuf, outlenp, ascii_ext, newline_ok, errp)
u_char *inbuf, *outbuf;
unsigned inlen, *outlenp, *errp;
{
u_char *inp, *endp, *outp;
unsigned errcnt = 0;
unsigned uni;
inp = inbuf;
endp = inbuf + (inlen & ~1);
outp = outbuf;
while (inp < endp) {
uni = (inp[0] << 8) | inp[1];
inp += 2;
if (uni == '\r') {
*outp++ = '\\';
*outp++ = 'r';
errcnt++;
} else if (uni == '\n') {
if (newline_ok)
*outp++ = '\n';
else {
*outp++ = '\\';
*outp++ = 'n';
errcnt++;
}
} else if (!is_decoded_char_ok(uni, ascii_ext)) {
*outp++ = '?';
errcnt++;
} else if (ascii_ext == 2)
outp += emit_utf8_char(uni, outp);
else
*outp++ = uni;
}
*outp = '\0';
if (outlenp)
*outlenp = outp - outbuf;
if (errp)
*errp = errcnt;
}