[libvirt] [PATCH 01/12] Add a virLogMessage alternative taking va_list args
Michal Privoznik
mprivozn at redhat.com
Wed May 2 15:22:42 UTC 2012
On 02.05.2012 13:44, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
>
> Allow the logging APIs to be called with a va_list for format
> args, instead of requiring var-args usage.
>
> * src/util/logging.h, src/util/logging.c: Add virLogVMessage
> ---
> src/util/logging.c | 29 ++++++++++++++++++++++++-----
> src/util/logging.h | 5 +++++
> 2 files changed, 29 insertions(+), 5 deletions(-)
>
> diff --git a/src/util/logging.c b/src/util/logging.c
> index 48a056d..0007226 100644
> --- a/src/util/logging.c
> +++ b/src/util/logging.c
> @@ -683,6 +683,29 @@ virLogVersionString(char **msg)
> void virLogMessage(const char *category, int priority, const char *funcname,
> long long linenr, unsigned int flags, const char *fmt, ...)
> {
> + va_list ap;
> + va_start(ap, fmt);
> + virLogVMessage(category, priority, funcname, linenr, flags, fmt, ap);
> + va_end(ap);
> +}
> +
> +/**
> + * virLogMessage:
> + * @category: where is that message coming from
> + * @priority: the priority level
> + * @funcname: the function emitting the (debug) message
> + * @linenr: line where the message was emitted
> + * @flags: extra flags, 1 if coming from the error handler
> + * @fmt: the string format
> + * @vargs: format args
> + *
> + * Call the libvirt logger with some information. Based on the configuration
> + * the message may be stored, sent to output or just discarded
> + */
> +void virLogVMessage(const char *category, int priority, const char *funcname,
> + long long linenr, unsigned int flags, const char *fmt,
> + va_list vargs)
> +{
> static bool logVersionStderr = true;
> char *str = NULL;
> char *msg = NULL;
> @@ -690,7 +713,6 @@ void virLogMessage(const char *category, int priority, const char *funcname,
> int fprio, i, ret;
> int saved_errno = errno;
> int emit = 1;
> - va_list ap;
>
> if (!virLogInitialized)
> virLogStartup();
> @@ -715,12 +737,9 @@ void virLogMessage(const char *category, int priority, const char *funcname,
> /*
> * serialize the error message, add level and timestamp
> */
> - va_start(ap, fmt);
> - if (virVasprintf(&str, fmt, ap) < 0) {
> - va_end(ap);
> + if (virVasprintf(&str, fmt, vargs) < 0) {
> goto cleanup;
> }
> - va_end(ap);
>
> ret = virLogFormatString(&msg, funcname, linenr, priority, str);
> VIR_FREE(str);
> diff --git a/src/util/logging.h b/src/util/logging.h
> index 2343de0..e1a8116 100644
> --- a/src/util/logging.h
> +++ b/src/util/logging.h
> @@ -128,6 +128,11 @@ extern void virLogMessage(const char *category, int priority,
> const char *funcname, long long linenr,
> unsigned int flags,
> const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(6, 7);
> +extern void virLogVMessage(const char *category, int priority,
> + const char *funcname, long long linenr,
> + unsigned int flags,
> + const char *fmt,
> + va_list vargs) ATTRIBUTE_FMT_PRINTF(6, 0);
> extern int virLogSetBufferSize(int size);
> extern void virLogEmergencyDumpAll(int signum);
> #endif
ACK
Michal
More information about the libvir-list
mailing list