]> xenbits.xensource.com Git - libvirt.git/commitdiff
virlog: Introduce virLogParseFilters
authorErik Skultety <eskultet@redhat.com>
Wed, 5 Oct 2016 14:48:47 +0000 (16:48 +0200)
committerErik Skultety <eskultet@redhat.com>
Mon, 10 Oct 2016 06:27:25 +0000 (08:27 +0200)
Abstraction added over parsing a single filter. The method parses potentially a
set of logging filters, while adding each filter logging object to a
caller-provided array.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
src/libvirt_private.syms
src/util/virlog.c
src/util/virlog.h

index f2e7965ba55891985bdea0ab612155b6c95d7920..3c352cfe7edbc6663495b583acdf8cabb1427e3f 100644 (file)
@@ -1891,6 +1891,7 @@ virLogParseAndDefineFilters;
 virLogParseAndDefineOutputs;
 virLogParseDefaultPriority;
 virLogParseFilter;
+virLogParseFilters;
 virLogParseOutput;
 virLogParseOutputs;
 virLogPriorityFromSyslog;
index 433405a170b159dd4b33b6df10043194949a13d7..25b1fcb5d1340282a7399bfdd291f0ce4cfea062 100644 (file)
@@ -2099,3 +2099,53 @@ virLogParseOutputs(const char *src, virLogOutputPtr **outputs)
     virStringFreeList(strings);
     return ret;
 }
+
+/**
+ * virLogParseFilters:
+ * @src: string defining a (set of) filter(s)
+ * @filters: pointer to a list where the individual filters shall be parsed
+ *
+ * This method parses @src and produces a list of individual filters which then
+ * needs to be passed to virLogDefineFilters in order to be set and taken into
+ * effect.
+ * Multiple filters can be defined in a single @src, they just need to be
+ * separated by spaces.
+ *
+ * Returns the number of filter parsed or -1 in case of error.
+ */
+int
+virLogParseFilters(const char *src, virLogFilterPtr **filters)
+{
+    int ret = -1;
+    size_t nfilters = 0;
+    size_t i, count;
+    char **strings = NULL;
+    virLogFilterPtr filter = NULL;
+    virLogFilterPtr *list = NULL;
+
+    VIR_DEBUG("filters=%s", src);
+
+    if (!(strings = virStringSplitCount(src, " ", 0, &count)))
+        goto cleanup;
+
+    for (i = 0; i < count; i++) {
+        /* virStringSplit may return empty strings */
+        if (STREQ(strings[i], ""))
+            continue;
+
+        if (!(filter = virLogParseFilter(strings[i])))
+            goto cleanup;
+
+        if (VIR_APPEND_ELEMENT(list, nfilters, filter)) {
+            virLogFilterFree(filter);
+            goto cleanup;
+        }
+    }
+
+    ret = nfilters;
+    *filters = list;
+    list = NULL;
+ cleanup:
+    virStringFreeList(strings);
+    return ret;
+}
index 3be2f558f860830ec1ca61342566e29fb2193e5a..1f97238114e9636a995314a54eaf599f9eeb000e 100644 (file)
@@ -244,5 +244,7 @@ virLogOutputPtr virLogParseOutput(const char *src) ATTRIBUTE_NONNULL(1);
 virLogFilterPtr virLogParseFilter(const char *src) ATTRIBUTE_NONNULL(1);
 int virLogParseOutputs(const char *src,
                        virLogOutputPtr **outputs) ATTRIBUTE_NONNULL(1);
+int virLogParseFilters(const char *src,
+                       virLogFilterPtr **filters) ATTRIBUTE_NONNULL(1);
 
 #endif