diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/mm-modem-huawei-gsm.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/plugins/mm-modem-huawei-gsm.c b/plugins/mm-modem-huawei-gsm.c index 23944c32..124c15cb 100644 --- a/plugins/mm-modem-huawei-gsm.c +++ b/plugins/mm-modem-huawei-gsm.c @@ -916,8 +916,11 @@ ussd_decode (MMModemGsmUssd *self, const char* reply, guint scheme) guint32 unpacked_len; bin = utils_hexstr2bin (reply, &bin_len); - unpacked = gsm_unpack ((guint8*)bin, bin_len, 0, &unpacked_len); - utf8 = (char*)mm_charset_gsm_unpacked_to_utf8 (unpacked, unpacked_len); + unpacked = gsm_unpack ((guint8*) bin, (bin_len * 8) / 7, 0, &unpacked_len); + /* if the last character in a 7-byte block is padding, then drop it */ + if ((bin_len % 7 == 0) && (unpacked[unpacked_len - 1] == 0x0d)) + unpacked_len--; + utf8 = (char*) mm_charset_gsm_unpacked_to_utf8 (unpacked, unpacked_len); g_free (bin); g_free (unpacked); |