static void test_sim() { char *utf8; utf8 = sim_string_to_utf8(sim_7bit, sizeof(sim_7bit)); g_assert(utf8); g_assert(strcmp(utf8, "oFono") == 0); g_free(utf8); utf8 = sim_string_to_utf8(sim_80_1, sizeof(sim_80_1)); g_assert(utf8); g_assert(strcmp(utf8, "ono") == 0); g_free(utf8); utf8 = sim_string_to_utf8(sim_80_2, sizeof(sim_80_2)); g_assert(utf8); g_assert(strcmp(utf8, "ono") == 0); g_free(utf8); utf8 = sim_string_to_utf8(sim_80_3, sizeof(sim_80_3)); g_assert(utf8); g_assert(strcmp(utf8, "ono") == 0); g_free(utf8); utf8 = sim_string_to_utf8(sim_81_0, sizeof(sim_81_0)); g_assert(utf8); g_free(utf8); utf8 = sim_string_to_utf8(sim_81_2, sizeof(sim_81_2)); g_assert(utf8); g_free(utf8); utf8 = sim_string_to_utf8(sim_81_1, sizeof(sim_81_1)); g_assert(utf8); g_assert(strcmp(utf8, "ono") == 0); g_free(utf8); utf8 = sim_string_to_utf8(sim_82_0, sizeof(sim_82_0)); g_assert(utf8); g_free(utf8); utf8 = sim_string_to_utf8(sim_82_1, sizeof(sim_82_1)); g_assert(utf8); g_free(utf8); utf8 = sim_string_to_utf8(sim_82_2, sizeof(sim_82_2)); g_assert(utf8 == NULL); }
static struct phonebook_entry *handle_adn(size_t len, const unsigned char *msg, struct pb_ref_rec *ref, int adn_idx) { unsigned name_length = len - 14; unsigned number_start = name_length; unsigned number_length; unsigned extension_record = UNUSED; unsigned i, prefix; char *number = NULL; char *name = sim_string_to_utf8(msg, name_length); struct phonebook_entry *new_entry; /* Length contains also TON & NPI */ number_length = msg[number_start]; if (number_length != UNUSED && number_length != 0) { number_length--; /* '+' + number + terminator */ number = g_try_malloc0(2 * number_length + 2); if (number) { prefix = 0; if ((msg[number_start + 1] & TON_MASK) == TON_INTERNATIONAL) { number[0] = '+'; prefix = 1; } for (i = 0; i < number_length; i++) { number[2 * i + prefix] = digit_to_utf8[msg[number_start + 2 + i] & 0x0f]; number[2 * i + 1 + prefix] = digit_to_utf8[msg[number_start + 2 + i] >> 4]; } extension_record = msg[len - 1]; } }