diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2018-08-07 00:23:41 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2018-08-12 13:53:07 +0200 |
commit | 8f095f7d6c8ff9731c4944ca0d4048003eb80f36 (patch) | |
tree | 23c087d017c5d4eac569e2f57e4b3224bb2d8954 | |
parent | 3d8590f83cd145bf4e34a787256b63c15effad4a (diff) | |
download | ModemManager-8f095f7d6c8ff9731c4944ca0d4048003eb80f36.tar.gz |
charsets: new helper to convert binary input data to UTF-8
Most of all the other APIs we have are expecting binary data (e.g.
UCS-2 encoded strings) in ASCII hex format, because they were going
to be used in text AT commands. For binary protocols allowing binary
data, we need use a more generic API that provides an explicit data
size.
-rw-r--r-- | src/mm-charsets.c | 25 | ||||
-rw-r--r-- | src/mm-charsets.h | 5 |
2 files changed, 30 insertions, 0 deletions
diff --git a/src/mm-charsets.c b/src/mm-charsets.c index 55604182a..73dd4da61 100644 --- a/src/mm-charsets.c +++ b/src/mm-charsets.c @@ -148,6 +148,31 @@ mm_modem_charset_byte_array_append (GByteArray *array, return TRUE; } +gchar * +mm_modem_charset_byte_array_to_utf8 (GByteArray *array, + MMModemCharset charset) +{ + char *converted; + const char *iconv_from; + GError *error = NULL; + + g_return_val_if_fail (array != NULL, NULL); + g_return_val_if_fail (charset != MM_MODEM_CHARSET_UNKNOWN, NULL); + + iconv_from = charset_iconv_from (charset); + g_return_val_if_fail (iconv_from != NULL, FALSE); + + converted = g_convert ((const gchar *)array->data, array->len, + "UTF-8//TRANSLIT", iconv_from, + NULL, NULL, &error); + if (!converted || error) { + g_clear_error (&error); + converted = NULL; + } + + return converted; +} + char * mm_modem_charset_hex_to_utf8 (const char *src, MMModemCharset charset) { diff --git a/src/mm-charsets.h b/src/mm-charsets.h index 340ae95b8..2e3e6f382 100644 --- a/src/mm-charsets.h +++ b/src/mm-charsets.h @@ -43,6 +43,11 @@ gboolean mm_modem_charset_byte_array_append (GByteArray *array, gboolean quoted, MMModemCharset charset); +/* Take a string encoded in the given charset in binary form, and + * convert it to UTF-8. */ +gchar *mm_modem_charset_byte_array_to_utf8 (GByteArray *array, + MMModemCharset charset); + /* Take a string in hex representation ("00430052" or "A4BE11" for example) * and convert it from the given character set to UTF-8. */ |