diff options
author | Denis Kenzior <denkenz@gmail.com> | 2011-02-04 12:40:33 -0600 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2011-02-06 23:47:17 -0600 |
commit | 960310f8b13387fe89c4db0c0dc5fd671ac5896d (patch) | |
tree | 9564065d94f2f731bd8ff1a26f3a4acc8b559961 | |
parent | 9086328508849f4f4a148f85aecf2d891d40315f (diff) | |
download | ofono-960310f8b13387fe89c4db0c0dc5fd671ac5896d.tar.bz2 |
sms: Be more paranoid when loading SMS settings
-rw-r--r-- | src/sms.c | 41 |
1 files changed, 29 insertions, 12 deletions
@@ -141,7 +141,7 @@ static const char *sms_bearer_to_string(int bearer) return "cs-preferred"; }; - return "unknown"; + return NULL; } static gboolean sms_bearer_from_string(const char *str, int *bearer) @@ -1746,7 +1746,7 @@ static void mw_watch(struct ofono_atom *atom, static void sms_load_settings(struct ofono_sms *sms, const char *imsi) { - GError *error = NULL; + GError *error; sms->settings = storage_open(imsi, SETTINGS_STORE); @@ -1755,28 +1755,45 @@ static void sms_load_settings(struct ofono_sms *sms, const char *imsi) sms->imsi = g_strdup(imsi); + error = NULL; sms->ref = g_key_file_get_integer(sms->settings, SETTINGS_GROUP, - "NextReference", NULL); - if (sms->ref >= 65536) + "NextReference", &error); + + if (error || sms->ref > 65536) { sms->ref = 1; + g_key_file_set_integer(sms->settings, SETTINGS_GROUP, + "NextReference", sms->ref); + } + error = NULL; sms->use_delivery_reports = g_key_file_get_boolean(sms->settings, SETTINGS_GROUP, - "UseDeliveryReports", NULL); + "UseDeliveryReports", &error); + + if (error) + g_key_file_set_boolean(sms->settings, SETTINGS_GROUP, + "UseDeliveryReports", + sms->use_delivery_reports); + error = NULL; sms->bearer = g_key_file_get_integer(sms->settings, SETTINGS_GROUP, "Bearer", &error); - if (error) + + if (error || sms_bearer_to_string(sms->bearer) == NULL) { sms->bearer = 3; /* Default to CS then PS */ + g_key_file_set_integer(sms->settings, SETTINGS_GROUP, + "Bearer", sms->bearer); + } + error = NULL; sms->alphabet = g_key_file_get_integer(sms->settings, SETTINGS_GROUP, - "Alphabet", NULL); - if (sms_alphabet_to_string(sms->alphabet) != NULL) - return; + "Alphabet", &error); - sms->alphabet = SMS_ALPHABET_DEFAULT; - g_key_file_set_integer(sms->settings, SETTINGS_GROUP, "Alphabet", - sms->alphabet); + if (error || sms_alphabet_to_string(sms->alphabet) == NULL) { + sms->alphabet = SMS_ALPHABET_DEFAULT; + g_key_file_set_integer(sms->settings, SETTINGS_GROUP, + "Aphabet", sms->alphabet); + } } static void bearer_init_callback(const struct ofono_error *error, void *data) |