[network-manager-applet] libnm-gtk: return MCCMNC list defined in the mobile providers as an array of strings
- From: Aleksander Morgado <aleksm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [network-manager-applet] libnm-gtk: return MCCMNC list defined in the mobile providers as an array of strings
- Date: Tue, 4 Dec 2012 17:13:50 +0000 (UTC)
commit 782d0bd0fde42860da80b9e85cc0967a8e388d73
Author: Aleksander Morgado <aleksander lanedo com>
Date: Tue Nov 27 14:11:54 2012 +0100
libnm-gtk: return MCCMNC list defined in the mobile providers as an array of strings
src/libnm-gtk/nm-mobile-providers.c | 58 +++++++++++++++++++++++------------
src/libnm-gtk/nm-mobile-providers.h | 14 ++++----
2 files changed, 45 insertions(+), 27 deletions(-)
---
diff --git a/src/libnm-gtk/nm-mobile-providers.c b/src/libnm-gtk/nm-mobile-providers.c
index 6489cc6..aff269c 100644
--- a/src/libnm-gtk/nm-mobile-providers.c
+++ b/src/libnm-gtk/nm-mobile-providers.c
@@ -219,7 +219,7 @@ struct _NMAMobileProvider {
GSList *methods; /* GSList of NmaMobileAccessMethod */
- GSList *mcc_mnc; /* GSList of strings */
+ GPtrArray *mcc_mnc; /* GPtrArray of strings */
GSList *cdma_sid; /* GSList of guint32 */
};
@@ -258,8 +258,8 @@ nma_mobile_provider_unref (NMAMobileProvider *provider)
g_slist_foreach (provider->methods, (GFunc) nma_mobile_access_method_unref, NULL);
g_slist_free (provider->methods);
- g_slist_foreach (provider->mcc_mnc, (GFunc) g_free, NULL);
- g_slist_free (provider->mcc_mnc);
+ if (provider->mcc_mnc)
+ g_ptr_array_unref (provider->mcc_mnc);
g_slist_free (provider->cdma_sid);
@@ -299,15 +299,15 @@ nma_mobile_provider_get_methods (NMAMobileProvider *provider)
* nma_mobile_provider_get_3gpp_mcc_mnc:
* @provider: a #NMAMobileProvider
*
- * Returns: (element-type utf8) (transfer none): a
+ * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): a
* list of strings with the MCC and MNC codes this provider exposes.
*/
-GSList *
+const gchar **
nma_mobile_provider_get_3gpp_mcc_mnc (NMAMobileProvider *provider)
{
g_return_val_if_fail (provider != NULL, NULL);
- return provider->mcc_mnc;
+ return provider->mcc_mnc ? (const gchar **)provider->mcc_mnc->pdata : NULL;
}
/**
@@ -630,8 +630,13 @@ parser_gsm_start (MobileParser *parser,
mnc = attribute_values[i];
if (mcc && strlen (mcc) && mnc && strlen (mnc)) {
- parser->current_provider->mcc_mnc = g_slist_prepend (parser->current_provider->mcc_mnc,
- g_strdup_printf("%s%s", mcc, mnc));
+ gchar *mccmnc;
+
+ if (!parser->current_provider->mcc_mnc)
+ parser->current_provider->mcc_mnc = g_ptr_array_new_full (2, g_free);
+
+ mccmnc = g_strdup_printf ("%s%s", mcc, mnc);
+ g_ptr_array_add (parser->current_provider->mcc_mnc, mccmnc);
break;
}
}
@@ -740,9 +745,11 @@ parser_provider_end (MobileParser *parser,
parser->text_buffer = NULL;
}
} else if (!strcmp (name, "provider")) {
+ if (parser->current_provider->mcc_mnc)
+ g_ptr_array_add (parser->current_provider->mcc_mnc, NULL);
+
parser->current_provider->methods = g_slist_reverse (parser->current_provider->methods);
- parser->current_provider->mcc_mnc = g_slist_reverse (parser->current_provider->mcc_mnc);
parser->current_provider->cdma_sid = g_slist_reverse (parser->current_provider->cdma_sid);
parser->current_providers = g_slist_prepend (parser->current_providers, parser->current_provider);
@@ -1034,17 +1041,21 @@ dump_country (gpointer key, gpointer value, gpointer user_data)
for (citer = country_info->providers; citer; citer = g_slist_next (citer)) {
NMAMobileProvider *provider = citer->data;
+ const gchar **mcc_mnc;
+ guint n;
g_print (" Provider: %s (%s)\n", provider->name, (const char *) key);
+
+ mcc_mnc = nma_mobile_provider_get_3gpp_mcc_mnc (provider);
+ if (mcc_mnc) {
+ for (n = 0; mcc_mnc[n]; n++)
+ g_print (" MCC/MNC: %s\n", mcc_mnc[n]);
+ }
+
for (miter = provider->methods; miter; miter = g_slist_next (miter)) {
NMAMobileAccessMethod *method = miter->data;
GSList *liter;
-
- for (liter = provider->mcc_mnc; liter; liter = g_slist_next (liter)) {
- g_print (" MCC/MNC: %s\n", (gchar *)liter->data);
- }
-
for (liter = provider->cdma_sid; liter; liter = g_slist_next (liter))
g_print (" SID: %d\n", GPOINTER_TO_UINT (liter->data));
@@ -1083,7 +1094,7 @@ nma_mobile_providers_find_for_3gpp_mcc_mnc (GHashTable *country_infos,
{
GHashTableIter iter;
gpointer value;
- GSList *piter, *siter;
+ GSList *piter;
NMAMobileProvider *provider_match_2mnc = NULL;
guint mccmnc_len;
@@ -1104,13 +1115,20 @@ nma_mobile_providers_find_for_3gpp_mcc_mnc (GHashTable *country_infos,
piter;
piter = g_slist_next (piter)) {
NMAMobileProvider *provider = piter->data;
+ const gchar **mccmnc_list;
+ guint i;
/* Search through MCC/MNC list */
- for (siter = nma_mobile_provider_get_3gpp_mcc_mnc (provider);
- siter;
- siter = g_slist_next (siter)) {
- gchar *mccmnc_iter = siter->data;
- guint mccmnc_iter_len = strlen (mccmnc_iter);
+ mccmnc_list = nma_mobile_provider_get_3gpp_mcc_mnc (provider);
+ if (!mccmnc_list)
+ continue;
+
+ for (i = 0; mccmnc_list[i]; i++) {
+ const gchar *mccmnc_iter;
+ guint mccmnc_iter_len;
+
+ mccmnc_iter = mccmnc_list[i];
+ mccmnc_iter_len = strlen (mccmnc_iter);
/* Match both 2-digit and 3-digit MNC; prefer a
* 3-digit match if found, otherwise a 2-digit one.
diff --git a/src/libnm-gtk/nm-mobile-providers.h b/src/libnm-gtk/nm-mobile-providers.h
index 908f987..cbc7b00 100644
--- a/src/libnm-gtk/nm-mobile-providers.h
+++ b/src/libnm-gtk/nm-mobile-providers.h
@@ -63,13 +63,13 @@ NMAMobileFamily nma_mobile_access_method_get_family (NMAMobileAccessMe
typedef struct _NMAMobileProvider NMAMobileProvider;
-GType nma_mobile_provider_get_type (void);
-NMAMobileProvider *nma_mobile_provider_ref (NMAMobileProvider *provider);
-void nma_mobile_provider_unref (NMAMobileProvider *provider);
-const gchar *nma_mobile_provider_get_name (NMAMobileProvider *provider);
-GSList *nma_mobile_provider_get_methods (NMAMobileProvider *provider);
-GSList *nma_mobile_provider_get_3gpp_mcc_mnc (NMAMobileProvider *provider);
-GSList *nma_mobile_provider_get_cdma_sid (NMAMobileProvider *provider);
+GType nma_mobile_provider_get_type (void);
+NMAMobileProvider *nma_mobile_provider_ref (NMAMobileProvider *provider);
+void nma_mobile_provider_unref (NMAMobileProvider *provider);
+const gchar *nma_mobile_provider_get_name (NMAMobileProvider *provider);
+GSList *nma_mobile_provider_get_methods (NMAMobileProvider *provider);
+const gchar **nma_mobile_provider_get_3gpp_mcc_mnc (NMAMobileProvider *provider);
+GSList *nma_mobile_provider_get_cdma_sid (NMAMobileProvider *provider);
/******************************************************************************/
/* Country Info type */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]