diff options
author | Tambet Ingo <tambet@gmail.com> | 2008-10-24 16:20:22 +0300 |
---|---|---|
committer | Tambet Ingo <tambet@gmail.com> | 2008-10-24 16:20:22 +0300 |
commit | f82b187c2bb3efb117f96e5b6062128f20ab2f39 (patch) | |
tree | b9dad67b61990b30a9c7add57b7b839a5dfee429 /plugins/mm-modem-huawei.c | |
parent | 0bd4f4a6049838dd7b09320c18c1991196ae80ee (diff) |
Move the string parser with regexp from huawei plugin to generic utility function.
It's useful for other modems too that need to strip unsolicited messages from
responses.
Diffstat (limited to 'plugins/mm-modem-huawei.c')
-rw-r--r-- | plugins/mm-modem-huawei.c | 55 |
1 files changed, 3 insertions, 52 deletions
diff --git a/plugins/mm-modem-huawei.c b/plugins/mm-modem-huawei.c index c32d653a..efcae1bd 100644 --- a/plugins/mm-modem-huawei.c +++ b/plugins/mm-modem-huawei.c @@ -7,6 +7,7 @@ #include "mm-modem-gsm-network.h" #include "mm-errors.h" #include "mm-callback-info.h" +#include "mm-util.h" #include "mm-serial-parsers.h" static gpointer mm_modem_huawei_parent_class = NULL; @@ -407,62 +408,12 @@ reg_state_changed (const char *str, gpointer data) } static gboolean -remove_eval_cb (const GMatchInfo *match_info, - GString *result, - gpointer user_data) -{ - int *result_len = (int *) user_data; - int start; - int end; - - if (g_match_info_fetch_pos (match_info, 0, &start, &end)) - *result_len -= (end - start); - - return FALSE; -} - -typedef void (*HuaweiStripFn) (const char *str, gpointer data); - -static void -huawei_strip (GRegex *r, GString *string, HuaweiStripFn fn, gpointer data) -{ - GMatchInfo *match_info; - gboolean matches; - char *str; - - matches = g_regex_match_full (r, string->str, string->len, 0, 0, &match_info, NULL); - if (fn) { - while (g_match_info_matches (match_info)) { - str = g_match_info_fetch (match_info, 1); - fn (str, data); - g_free (str); - - g_match_info_next (match_info, NULL); - } - } - - g_match_info_free (match_info); - - if (matches) { - /* Remove matches */ - int result_len = string->len; - - str = g_regex_replace_eval (r, string->str, string->len, 0, 0, - remove_eval_cb, &result_len, NULL); - - g_string_truncate (string, 0); - g_string_append_len (string, str, result_len); - g_free (str); - } -} - -static gboolean huawei_parse_response (gpointer data, GString *response, GError **error) { MMModemHuaweiPrivate *priv = MM_MODEM_HUAWEI_GET_PRIVATE (data); - huawei_strip (priv->status_regex, response, handle_status_change, data); - huawei_strip (priv->reg_state_regex, response, reg_state_changed, data); + mm_util_strip_string (response, priv->status_regex, handle_status_change, data); + mm_util_strip_string (response, priv->reg_state_regex, reg_state_changed, data); return mm_serial_parser_v1_parse (priv->std_parser, response, error); } |