util: Switch character conversions to ell

Switch various conversions from GSM/UCS2 to UTF8 from glib based
implementation over to ell.

This also converts all related g_free calls to l_free calls (though in
the end they are equivalent calls to free)
This commit is contained in:
Denis Kenzior 2018-12-22 16:00:19 -06:00
parent 44415e754b
commit 4059d4226b
5 changed files with 67 additions and 82 deletions

View File

@ -36,6 +36,8 @@
#include <errno.h>
#include <unistd.h>
#include <ell/ell.h>
#include "ofono.h"
#include "common.h"
@ -349,8 +351,8 @@ static char **get_service_numbers(GSList *service_numbers)
static void service_number_free(gpointer pointer)
{
struct service_number *num = pointer;
g_free(num->id);
g_free(num);
l_free(num->id);
l_free(num);
}
static void call_state_watches(struct ofono_sim *sim)
@ -1285,27 +1287,26 @@ static void sim_sdn_read_cb(int ok, int length, int record,
if (sim_adn_parse(data, record_length, &ph, &alpha) == FALSE)
goto out;
/* Use phone number if Id is unavailable */
if (alpha && alpha[0] == '\0') {
g_free(alpha);
l_free(alpha);
alpha = NULL;
}
if (alpha == NULL)
alpha = g_strdup(phone_number_to_string(&ph));
alpha = l_strdup(phone_number_to_string(&ph));
if (sim->service_numbers &&
g_slist_find_custom(sim->service_numbers,
alpha, service_number_compare)) {
ofono_error("Duplicate EFsdn entries for `%s'",
alpha);
g_free(alpha);
l_free(alpha);
goto out;
}
sdn = g_new(struct service_number, 1);
sdn = l_new(struct service_number, 1);
sdn->id = alpha;
memcpy(&sdn->ph, &ph, sizeof(struct ofono_phone_number));
@ -2512,10 +2513,10 @@ static void sim_spn_close(struct ofono_sim *sim)
sim->reading_spn = false;
g_free(sim->spn);
l_free(sim->spn);
sim->spn = NULL;
g_free(sim->spn_dc);
l_free(sim->spn_dc);
sim->spn_dc = NULL;
}
@ -2829,10 +2830,10 @@ static void sim_spn_set(struct ofono_sim *sim, const void *data, int length,
DBusConnection *conn = ofono_dbus_get_connection();
const char *path = __ofono_atom_get_path(sim->atom);
g_free(sim->spn);
l_free(sim->spn);
sim->spn = NULL;
g_free(sim->spn_dc);
l_free(sim->spn_dc);
sim->spn_dc = NULL;
if (data == NULL)
@ -2861,13 +2862,13 @@ static void sim_spn_set(struct ofono_sim *sim, const void *data, int length,
}
if (strlen(sim->spn) == 0) {
g_free(sim->spn);
l_free(sim->spn);
sim->spn = NULL;
goto notify;
}
if (dc)
sim->spn_dc = g_memdup(dc, 1);
sim->spn_dc = l_memdup(dc, 1);
notify:
if (sim->spn)

View File

@ -816,9 +816,7 @@ static char *sim_network_name_parse(const unsigned char *buffer, int length,
if (buffer[i] == 0xff && buffer[i + 1] == 0xff)
break;
ret = g_convert((const char *) buffer, length,
"UTF-8//TRANSLIT", "UCS-2BE",
NULL, NULL, NULL);
ret = l_utf8_from_ucs2be(buffer, length);
break;
}
@ -990,9 +988,9 @@ static void pnn_operator_free(struct sim_eons_operator_info *oper)
if (oper == NULL)
return;
g_free(oper->info);
g_free(oper->shortname);
g_free(oper->longname);
l_free(oper->info);
l_free(oper->shortname);
l_free(oper->longname);
}
struct sim_eons *sim_eons_new(int pnn_records)
@ -1552,7 +1550,7 @@ gboolean sim_cphs_is_active(unsigned char *cphs, enum sim_cphs_service index)
void sim_app_record_free(struct sim_app_record *app)
{
g_free(app->label);
l_free(app->label);
g_free(app);
}
@ -1607,7 +1605,7 @@ error:
GSList *t = ret;
struct sim_app_record *app = ret->data;
g_free(app->label);
l_free(app->label);
g_free(app);
ret = ret->next;

View File

@ -677,10 +677,9 @@ gboolean sms_decode_address_field(const unsigned char *pdu, int len,
return FALSE;
utf8 = convert_gsm_to_utf8(res, written, NULL, NULL, 0);
l_free(res);
if (utf8 == NULL)
if (!utf8)
return FALSE;
/*
@ -688,13 +687,12 @@ gboolean sms_decode_address_field(const unsigned char *pdu, int len,
* 22 bytes+terminator in UTF-8.
*/
if (strlen(utf8) > 22) {
g_free(utf8);
l_free(utf8);
return FALSE;
}
strcpy(out->address, utf8);
g_free(utf8);
l_free(utf8);
}
return TRUE;
@ -2294,7 +2292,7 @@ char *sms_decode_text(GSList *sms_list)
single_shift);
if (converted) {
g_string_append(str, converted);
g_free(converted);
l_free(converted);
}
} else {
const guint8 *from = ud + taken;
@ -4107,7 +4105,7 @@ char *cbs_decode_text(GSList *cbs_list, char *iso639_lang)
}
}
buf = g_new(unsigned char, bufsize);
buf = l_new(unsigned char, bufsize);
bufsize = 0;
for (l = cbs_list; l; l = l->next) {
@ -4203,10 +4201,9 @@ char *cbs_decode_text(GSList *cbs_list, char *iso639_lang)
if (charset == SMS_CHARSET_7BIT)
utf8 = convert_gsm_to_utf8(buf, bufsize, NULL, NULL, 0);
else
utf8 = g_convert((char *) buf, bufsize, "UTF-8//TRANSLIT",
"UCS-2BE", NULL, NULL, NULL);
utf8 = l_utf8_from_ucs2be(buf, bufsize);
g_free(buf);
l_free(buf);
return utf8;
}

View File

@ -110,9 +110,7 @@ static char *decode_text(unsigned char dcs, int len, const unsigned char *data)
utf8 = convert_gsm_to_utf8(data, len, NULL, NULL, 0);
break;
case SMS_CHARSET_UCS2:
utf8 = g_convert((const gchar *) data, len,
"UTF-8//TRANSLIT", "UCS-2BE",
NULL, NULL, NULL);
utf8 = l_utf8_from_ucs2be(data, len);
break;
default:
utf8 = NULL;
@ -574,7 +572,7 @@ static gboolean parse_dataobj_text(struct comprehension_tlv_iter *iter,
char *utf8;
if (len <= 1) {
*text = g_try_malloc0(1);
*text = l_new(char, 1);
return TRUE;
}
@ -2256,8 +2254,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)
static void destroy_stk_item(gpointer pointer)
{
struct stk_item *item = pointer;
g_free(item->text);
g_free(item);
l_free(item->text);
l_free(item);
}
static gboolean parse_item_list(struct comprehension_tlv_iter *iter,
@ -2283,7 +2281,7 @@ static gboolean parse_item_list(struct comprehension_tlv_iter *iter,
}
list = g_slist_prepend(list,
g_memdup(&item, sizeof(item)));
l_memdup(&item, sizeof(item)));
}
} while (comprehension_tlv_iter_next(iter) == TRUE &&
comprehension_tlv_iter_get_tag(iter) == tag);
@ -2300,7 +2298,6 @@ static gboolean parse_item_list(struct comprehension_tlv_iter *iter,
g_slist_free_full(list, destroy_stk_item);
return FALSE;
}
static gboolean parse_provisioning_list(struct comprehension_tlv_iter *iter,
@ -2432,7 +2429,7 @@ static enum stk_command_parse_result parse_dataobj(
static void destroy_display_text(struct stk_command *command)
{
g_free(command->display_text.text);
l_free(command->display_text.text);
}
static enum stk_command_parse_result parse_display_text(
@ -2472,7 +2469,7 @@ static enum stk_command_parse_result parse_display_text(
static void destroy_get_inkey(struct stk_command *command)
{
g_free(command->get_inkey.text);
l_free(command->get_inkey.text);
}
static enum stk_command_parse_result parse_get_inkey(
@ -2510,8 +2507,8 @@ static enum stk_command_parse_result parse_get_inkey(
static void destroy_get_input(struct stk_command *command)
{
g_free(command->get_input.text);
g_free(command->get_input.default_text);
l_free(command->get_input.text);
l_free(command->get_input.default_text);
}
static enum stk_command_parse_result parse_get_input(
@ -2565,7 +2562,7 @@ static enum stk_command_parse_result parse_more_time(
static void destroy_play_tone(struct stk_command *command)
{
g_free(command->play_tone.alpha_id);
l_free(command->play_tone.alpha_id);
}
static enum stk_command_parse_result parse_play_tone(
@ -2622,7 +2619,7 @@ static enum stk_command_parse_result parse_poll_interval(
static void destroy_setup_menu(struct stk_command *command)
{
g_free(command->setup_menu.alpha_id);
l_free(command->setup_menu.alpha_id);
g_slist_free_full(command->setup_menu.items, destroy_stk_item);
}
@ -2667,7 +2664,7 @@ static enum stk_command_parse_result parse_setup_menu(
static void destroy_select_item(struct stk_command *command)
{
g_free(command->select_item.alpha_id);
l_free(command->select_item.alpha_id);
g_slist_free_full(command->select_item.items, destroy_stk_item);
}
@ -2718,7 +2715,7 @@ static enum stk_command_parse_result parse_select_item(
static void destroy_send_sms(struct stk_command *command)
{
g_free(command->send_sms.alpha_id);
l_free(command->send_sms.alpha_id);
g_free(command->send_sms.cdma_sms.array);
}
@ -2823,8 +2820,8 @@ out:
static void destroy_send_ss(struct stk_command *command)
{
g_free(command->send_ss.alpha_id);
g_free(command->send_ss.ss.ss);
l_free(command->send_ss.alpha_id);
}
static enum stk_command_parse_result parse_send_ss(struct stk_command *command,
@ -2856,7 +2853,7 @@ static enum stk_command_parse_result parse_send_ss(struct stk_command *command,
static void destroy_send_ussd(struct stk_command *command)
{
g_free(command->send_ussd.alpha_id);
l_free(command->send_ussd.alpha_id);
}
static enum stk_command_parse_result parse_send_ussd(
@ -2889,9 +2886,9 @@ static enum stk_command_parse_result parse_send_ussd(
static void destroy_setup_call(struct stk_command *command)
{
g_free(command->setup_call.alpha_id_usr_cfm);
g_free(command->setup_call.addr.number);
g_free(command->setup_call.alpha_id_call_setup);
l_free(command->setup_call.alpha_id_usr_cfm);
l_free(command->setup_call.alpha_id_call_setup);
}
static enum stk_command_parse_result parse_setup_call(
@ -2944,7 +2941,7 @@ static enum stk_command_parse_result parse_setup_call(
static void destroy_refresh(struct stk_command *command)
{
g_slist_free_full(command->refresh.file_list, g_free);
g_free(command->refresh.alpha_id);
l_free(command->refresh.alpha_id);
}
static enum stk_command_parse_result parse_refresh(
@ -3123,7 +3120,7 @@ static enum stk_command_parse_result parse_timer_mgmt(
static void destroy_setup_idle_mode_text(struct stk_command *command)
{
g_free(command->setup_idle_mode_text.text);
l_free(command->setup_idle_mode_text.text);
}
static enum stk_command_parse_result parse_setup_idle_mode_text(
@ -3160,8 +3157,8 @@ static enum stk_command_parse_result parse_setup_idle_mode_text(
static void destroy_run_at_command(struct stk_command *command)
{
g_free(command->run_at_command.alpha_id);
g_free(command->run_at_command.at_command);
l_free(command->run_at_command.alpha_id);
}
static enum stk_command_parse_result parse_run_at_command(
@ -3199,8 +3196,8 @@ static enum stk_command_parse_result parse_run_at_command(
static void destroy_send_dtmf(struct stk_command *command)
{
g_free(command->send_dtmf.alpha_id);
g_free(command->send_dtmf.dtmf);
l_free(command->send_dtmf.alpha_id);
}
static enum stk_command_parse_result parse_send_dtmf(
@ -3259,11 +3256,11 @@ static void destroy_launch_browser(struct stk_command *command)
g_free(command->launch_browser.url);
g_free(command->launch_browser.bearer.array);
g_slist_free_full(command->launch_browser.prov_file_refs, g_free);
g_free(command->launch_browser.text_gateway_proxy_id);
g_free(command->launch_browser.alpha_id);
g_free(command->launch_browser.network_name.array);
g_free(command->launch_browser.text_usr);
g_free(command->launch_browser.text_passwd);
l_free(command->launch_browser.text_gateway_proxy_id);
l_free(command->launch_browser.alpha_id);
l_free(command->launch_browser.text_usr);
l_free(command->launch_browser.text_passwd);
}
static enum stk_command_parse_result parse_launch_browser(
@ -3315,10 +3312,10 @@ static enum stk_command_parse_result parse_launch_browser(
static void destroy_open_channel(struct stk_command *command)
{
g_free(command->open_channel.alpha_id);
g_free(command->open_channel.apn);
g_free(command->open_channel.text_usr);
g_free(command->open_channel.text_passwd);
l_free(command->open_channel.alpha_id);
l_free(command->open_channel.text_usr);
l_free(command->open_channel.text_passwd);
}
static enum stk_command_parse_result parse_open_channel(
@ -3379,7 +3376,7 @@ static enum stk_command_parse_result parse_open_channel(
static void destroy_close_channel(struct stk_command *command)
{
g_free(command->close_channel.alpha_id);
l_free(command->close_channel.alpha_id);
}
static enum stk_command_parse_result parse_close_channel(
@ -3415,7 +3412,7 @@ static enum stk_command_parse_result parse_close_channel(
static void destroy_receive_data(struct stk_command *command)
{
g_free(command->receive_data.alpha_id);
l_free(command->receive_data.alpha_id);
}
static enum stk_command_parse_result parse_receive_data(
@ -3454,8 +3451,8 @@ static enum stk_command_parse_result parse_receive_data(
static void destroy_send_data(struct stk_command *command)
{
g_free(command->send_data.alpha_id);
g_free(command->send_data.data.array);
l_free(command->send_data.alpha_id);
}
static enum stk_command_parse_result parse_send_data(
@ -3510,9 +3507,9 @@ static enum stk_command_parse_result parse_get_channel_status(
static void destroy_service_search(struct stk_command *command)
{
g_free(command->service_search.alpha_id);
g_free(command->service_search.serv_search.ser_search);
g_free(command->service_search.dev_filter.dev_filter);
l_free(command->service_search.alpha_id);
}
static enum stk_command_parse_result parse_service_search(
@ -3547,8 +3544,8 @@ static enum stk_command_parse_result parse_service_search(
static void destroy_get_service_info(struct stk_command *command)
{
g_free(command->get_service_info.alpha_id);
g_free(command->get_service_info.attr_info.attr_info);
l_free(command->get_service_info.alpha_id);
}
static enum stk_command_parse_result parse_get_service_info(
@ -3643,7 +3640,7 @@ static enum stk_command_parse_result parse_get_frames_status(
static void destroy_retrieve_mms(struct stk_command *command)
{
g_free(command->retrieve_mms.alpha_id);
l_free(command->retrieve_mms.alpha_id);
g_slist_free_full(command->retrieve_mms.mms_rec_files, g_free);
}
@ -3690,7 +3687,7 @@ static enum stk_command_parse_result parse_retrieve_mms(
static void destroy_submit_mms(struct stk_command *command)
{
g_free(command->submit_mms.alpha_id);
l_free(command->submit_mms.alpha_id);
g_slist_free_full(command->submit_mms.mms_subm_files, g_free);
}

View File

@ -2965,10 +2965,7 @@ char *convert_gsm_to_utf8_with_lang(const unsigned char *text, long len,
res_length += UTF8_LENGTH(c);
}
res = g_try_malloc(res_length + 1);
if (res == NULL)
goto error;
res = l_malloc(res_length + 1);
out = res;
i = 0;
@ -2983,7 +2980,7 @@ char *convert_gsm_to_utf8_with_lang(const unsigned char *text, long len,
} else
c = gsm_locking_shift_lookup(&t, text[i]);
out += g_unichar_to_utf8(c, out);
out += l_utf8_from_wchar(c, out);
++i;
}
@ -3567,9 +3564,7 @@ char *sim_string_to_utf8(const unsigned char *buffer, int length)
if (buffer[i] == 0xff && buffer[i + 1] == 0xff)
break;
return g_convert((char *) buffer + 1, i - 1,
"UTF-8//TRANSLIT", "UCS-2BE",
NULL, NULL, NULL);
return l_utf8_from_ucs2be(buffer + 1, i - 1);
case 0x81:
if (length < 3 || (buffer[1] > (length - 3)))
return NULL;
@ -3643,10 +3638,7 @@ char *sim_string_to_utf8(const unsigned char *buffer, int length)
if (buffer[i] != 0xff)
return NULL;
utf8 = g_try_malloc(res_len + 1);
if (utf8 == NULL)
return NULL;
utf8 = l_malloc(res_len + 1);
i = offset;
out = utf8;
@ -3661,7 +3653,7 @@ char *sim_string_to_utf8(const unsigned char *buffer, int length)
} else
c = gsm_locking_shift_lookup(&t, buffer[i++]);
out += g_unichar_to_utf8(c, out);
out += l_utf8_from_wchar(c, out);
}
*out = '\0';