aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am4
-rw-r--r--src/mm-util.c54
-rw-r--r--src/mm-util.h20
3 files changed, 77 insertions, 1 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 8896e47e..b8fe2894 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -36,7 +36,9 @@ modem_manager_SOURCES = \
mm-serial.c \
mm-serial.h \
mm-serial-parsers.c \
- mm-serial-parsers.h
+ mm-serial-parsers.h \
+ mm-util.c \
+ mm-util.h
mm-manager-glue.h: $(top_srcdir)/introspection/mm-manager.xml
dbus-binding-tool --prefix=mm_manager --mode=glib-server --output=$@ $<
diff --git a/src/mm-util.c b/src/mm-util.c
new file mode 100644
index 00000000..33796ac6
--- /dev/null
+++ b/src/mm-util.c
@@ -0,0 +1,54 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+#include "mm-util.h"
+
+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;
+}
+
+void
+mm_util_strip_string (GString *string,
+ GRegex *regex,
+ MMUtilStripFn callback,
+ gpointer user_data)
+{
+ GMatchInfo *match_info;
+ gboolean matches;
+ char *str;
+
+ matches = g_regex_match_full (regex, string->str, string->len, 0, 0, &match_info, NULL);
+ if (callback) {
+ while (g_match_info_matches (match_info)) {
+ str = g_match_info_fetch (match_info, 1);
+ callback (str, user_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 (regex, 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);
+ }
+}
diff --git a/src/mm-util.h b/src/mm-util.h
new file mode 100644
index 00000000..049b5f94
--- /dev/null
+++ b/src/mm-util.h
@@ -0,0 +1,20 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+#ifndef MM_UTIL_H
+#define MM_UTIL_H
+
+#include <glib.h>
+
+typedef void (*MMUtilStripFn) (const char *str,
+ gpointer user_data);
+
+/* Applies the regexp on string and calls the callback (if provided)
+ with each match and user_data. After that, the matches are removed
+ from the string.
+*/
+void mm_util_strip_string (GString *string,
+ GRegex *regex,
+ MMUtilStripFn callback,
+ gpointer user_data);
+
+#endif /* MM_UTIL_H */