-
- /* nope: filter them instead */
- filtered = g_new(gchar*, g_strv_length(providers));
-
- if (filtered && providers) {
- int i = 0, j = 0;
- while (providers[i]) {
-
- int this_mcc;
- this_mcc = g_key_file_get_integer (self->keyfile, providers[i],
- MODEST_PRESETS_KEY_MCC,
- NULL);
- if (this_mcc == mcc || (this_mcc == 0 && include_globals)) {
- filtered[j++] = providers[i];
- providers[i] = NULL; /* g_strfreev: leave it alone */
- }
- ++i;
+
+ /* nope: filter them */
+ len = g_strv_length(providers);
+ filtered = g_new(gchar*, len + 1);
+
+ for (i=0, j=0; i != len; ++i) {
+
+ int this_mcc;
+ this_mcc = g_key_file_get_integer (self->keyfile, providers[i],
+ MODEST_PRESETS_KEY_MCC, &err);
+ if (err) {
+ g_strfreev (providers);
+ g_strfreev (filtered);
+ g_error_free (err);
+ g_printerr ("modest: error parsing keyfile: %s\n", err->message);
+ return NULL;
+ }
+
+ if (this_mcc == mcc || (this_mcc == 0 && include_globals)) {
+ filtered[j++] = providers[i];
+ filtered[j] = NULL; /* the array must be NULL-terminated */
+ providers[i] = NULL; /* g_strfreev: leave it alone */