From 435200cab4236ef0aa7f0649bebe64615f45a203 Mon Sep 17 00:00:00 2001 From: Erik Skultety Date: Fri, 8 Jul 2016 14:15:43 +0200 Subject: [PATCH] virlog: Introduce virLogFilterNew This method allocates a new filter object which it then returns back to caller. Signed-off-by: Erik Skultety --- src/libvirt_private.syms | 1 + src/util/virlog.c | 48 ++++++++++++++++++++++++++++++++++++++++ src/util/virlog.h | 3 +++ 3 files changed, 52 insertions(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 04adf6c0af..da44c2f31e 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1873,6 +1873,7 @@ virLogDefineFilter; virLogDefineOutput; virLogFilterFree; virLogFilterListFree; +virLogFilterNew; virLogGetDefaultPriority; virLogGetFilters; virLogGetNbFilters; diff --git a/src/util/virlog.c b/src/util/virlog.c index 9764f1c1f0..2957b8c1b6 100644 --- a/src/util/virlog.c +++ b/src/util/virlog.c @@ -1601,3 +1601,51 @@ virLogOutputNew(virLogOutputFunc f, return ret; } + + +/** + * virLogFilterNew: + * @match: the pattern to match + * @priority: the priority to give to messages matching the pattern + * @flags: extra flags, see virLogFilterFlags enum + * + * Allocates and returns a new log filter object. The object has to be later + * defined, so that the pattern will be taken into account when executing the + * log filters (to select or reject a particular message) on messages. + * + * The filter defines a rules that will apply only to messages matching + * the pattern (currently if @match is a substring of the message category) + * + * Returns a reference to a newly created filter that needs to be defined using + * virLogDefineFilters, or NULL in case of an error. + */ +virLogFilterPtr +virLogFilterNew(const char *match, + virLogPriority priority, + unsigned int flags) +{ + virLogFilterPtr ret = NULL; + char *mdup = NULL; + + virCheckFlags(VIR_LOG_STACK_TRACE, NULL); + + if (priority < VIR_LOG_DEBUG || priority > VIR_LOG_ERROR) { + virReportError(VIR_ERR_INVALID_ARG, _("Invalid log priority %d"), + priority); + return NULL; + } + + if (VIR_STRDUP_QUIET(mdup, match) < 0) + return NULL; + + if (VIR_ALLOC_QUIET(ret) < 0) { + VIR_FREE(mdup); + return NULL; + } + + ret->match = mdup; + ret->priority = priority; + ret->flags = flags; + + return ret; +} diff --git a/src/util/virlog.h b/src/util/virlog.h index 75bc5ba65a..a33553328a 100644 --- a/src/util/virlog.h +++ b/src/util/virlog.h @@ -232,5 +232,8 @@ virLogOutputPtr virLogOutputNew(virLogOutputFunc f, virLogPriority priority, virLogDestination dest, const char *name) ATTRIBUTE_NONNULL(1); +virLogFilterPtr virLogFilterNew(const char *match, + virLogPriority priority, + unsigned int flags) ATTRIBUTE_NONNULL(1); #endif