diff options
author | Denis Kenzior <denkenz@gmail.com> | 2009-08-07 11:50:42 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-08-07 15:49:30 -0500 |
commit | 6f9e3864249473496bd14f9dfd35e86a3af6b25e (patch) | |
tree | 124724704b3a3e44e52300dd6c1970d3fd91bab4 /src/sim.c | |
parent | 7eb440e8647f3b3d10eb63ff746cd17a47beab5f (diff) | |
download | ofono-6f9e3864249473496bd14f9dfd35e86a3af6b25e.tar.bz2 |
Keep new numbers in the main sim data structure
No sense to allocate / free memory for a single pointer
Diffstat (limited to 'src/sim.c')
-rw-r--r-- | src/sim.c | 27 |
1 files changed, 10 insertions, 17 deletions
@@ -78,6 +78,7 @@ struct sim_manager_data { struct ofono_sim_ops *ops; char *imsi; GSList *own_numbers; + GSList *new_numbers; GSList *ready_notify; gboolean ready; GQueue *simop_q; @@ -364,10 +365,9 @@ static void sim_msisdn_read_cb(struct ofono_modem *modem, int ok, const unsigned char *data, int record_length, void *userdata) { - struct sim_manager_data *sim = modem->sim_manager; + struct sim_manager_data *sim = userdata; int total; struct ofono_phone_number ph; - GSList **new_own_numbers = userdata; if (!ok) goto check; @@ -387,7 +387,7 @@ static void sim_msisdn_read_cb(struct ofono_modem *modem, int ok, own = g_new(struct ofono_phone_number, 1); memcpy(own, &ph, sizeof(struct ofono_phone_number)); - *new_own_numbers = g_slist_prepend(*new_own_numbers, own); + sim->new_numbers = g_slist_prepend(sim->new_numbers, own); } if (record != total) @@ -395,16 +395,16 @@ static void sim_msisdn_read_cb(struct ofono_modem *modem, int ok, check: /* All records retrieved */ - if (*new_own_numbers) - *new_own_numbers = g_slist_reverse(*new_own_numbers); + if (sim->new_numbers) + sim->new_numbers = g_slist_reverse(sim->new_numbers); - if (!numbers_list_equal(*new_own_numbers, sim->own_numbers)) { + if (!numbers_list_equal(sim->new_numbers, sim->own_numbers)) { char **own_numbers; DBusConnection *conn = ofono_dbus_get_connection(); g_slist_foreach(sim->own_numbers, (GFunc) g_free, NULL); g_slist_free(sim->own_numbers); - sim->own_numbers = *new_own_numbers; + sim->own_numbers = sim->new_numbers; own_numbers = get_own_numbers(sim->own_numbers); @@ -415,22 +415,15 @@ check: &own_numbers); g_strfreev(own_numbers); } else { - g_slist_foreach(*new_own_numbers, (GFunc) g_free, NULL); - g_slist_free(*new_own_numbers); + g_slist_foreach(sim->new_numbers, (GFunc) g_free, NULL); + g_slist_free(sim->new_numbers); } - - g_free(new_own_numbers); } static void sim_own_numbers_update(struct ofono_modem *modem) { - GSList **new_own_numbers = g_new0(GSList *, 1); - - if (!new_own_numbers) - return; - ofono_sim_read(modem, SIM_EFMSISDN_FILEID, - sim_msisdn_read_cb, new_own_numbers); + sim_msisdn_read_cb, modem->sim_manager); } static void sim_ready(struct ofono_modem *modem) |