aboutsummaryrefslogtreecommitdiff
path: root/src/mm-modem-helpers.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-03-06 13:09:34 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-16 14:53:21 +0100
commit51c28d0f79cfebae60982b824abbfbdf2d730f68 (patch)
tree6fce5e96b558324a415e85601d0bed6161c942b3 /src/mm-modem-helpers.c
parent4a52a19c41c92aa8c9091b0ddcbfe6f18d3691ad (diff)
modem-helpers: new +CNUM response parser and tests
Diffstat (limited to 'src/mm-modem-helpers.c')
-rw-r--r--src/mm-modem-helpers.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/mm-modem-helpers.c b/src/mm-modem-helpers.c
index 3b2e9e1a..9e875a62 100644
--- a/src/mm-modem-helpers.c
+++ b/src/mm-modem-helpers.c
@@ -1820,3 +1820,40 @@ mm_count_bits_set (gulong number)
number &= number - 1;
return c;
}
+
+GStrv
+mm_3gpp_parse_cnum_response (const gchar *reply,
+ GError **error)
+{
+ GArray *array = NULL;
+ GRegex *r;
+ GMatchInfo *match_info;
+
+ /* Empty strings also return NULL list */
+ if (!reply || !reply[0])
+ return NULL;
+
+ r = g_regex_new ("\\+CNUM:\\s*\"?\\S*\"?,\"(\\S+)\",\\d", G_REGEX_UNGREEDY, 0, NULL);
+ g_assert (r != NULL);
+
+ g_regex_match (r, reply, 0, &match_info);
+ while (g_match_info_matches (match_info)) {
+ gchar *number;
+
+ number = g_match_info_fetch (match_info, 1);
+
+ if (number && number[0]) {
+ if (!array)
+ array = g_array_new (TRUE, TRUE, sizeof (gchar *));
+ g_array_append_val (array, number);
+ } else
+ g_free (number);
+
+ g_match_info_next (match_info, NULL);
+ }
+
+ g_match_info_free (match_info);
+ g_regex_unref (r);
+
+ return (array ? (GStrv) g_array_free (array, FALSE) : NULL);
+}