From 4b485412495afe71f9c1671c02421db28b35c075 Mon Sep 17 00:00:00 2001 From: Erik Skultety Date: Wed, 30 Mar 2016 14:11:12 +0200 Subject: [PATCH] virlog: Introduce virLogOutputListFree This is just a convenience method for discarding a list of outputs instead of using a 'for' loop everywhere. It is safe to pass -1 as the number of elements in the list as well as passing NULL as list reference. Signed-off-by: Erik Skultety --- src/libvirt_private.syms | 1 + src/util/virlog.c | 30 ++++++++++++++++++++++++------ src/util/virlog.h | 1 + 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 553e004421..b644fb3bfc 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1823,6 +1823,7 @@ virLogGetOutputs; virLogLock; virLogMessage; virLogOutputFree; +virLogOutputListFree; virLogParseDefaultPriority; virLogParseFilters; virLogParseOutputs; diff --git a/src/util/virlog.c b/src/util/virlog.c index 5c5c5cdbbe..96229d8473 100644 --- a/src/util/virlog.c +++ b/src/util/virlog.c @@ -325,12 +325,8 @@ virLogDefineFilter(const char *match, static void virLogResetOutputs(void) { - size_t i; - - for (i = 0; i < virLogNbOutputs; i++) - virLogOutputFree(virLogOutputs[i]); - - VIR_FREE(virLogOutputs); + virLogOutputListFree(virLogOutputs, virLogNbOutputs); + virLogOutputs = NULL; virLogNbOutputs = 0; } @@ -348,6 +344,28 @@ virLogOutputFree(virLogOutputPtr output) } + +/** + * virLogOutputsFreeList: + * @list: list of outputs to be freed + * @count: number of elements in the list + * + * Frees a list of outputs. + */ +void +virLogOutputListFree(virLogOutputPtr *list, int count) +{ + size_t i; + + if (!list || count < 0) + return; + + for (i = 0; i < count; i++) + virLogOutputFree(list[i]); + VIR_FREE(list); +} + + /** * virLogDefineOutput: * @f: the function to call to output a message diff --git a/src/util/virlog.h b/src/util/virlog.h index bdd9ae3aac..4e01b1ecc5 100644 --- a/src/util/virlog.h +++ b/src/util/virlog.h @@ -191,6 +191,7 @@ int virLogDefineOutput(virLogOutputFunc f, const char *name, unsigned int flags); void virLogOutputFree(virLogOutputPtr output); +void virLogOutputListFree(virLogOutputPtr *list, int count); /* * Internal logging API