]> xenbits.xensource.com Git - libvirt.git/commitdiff
Add a virLogMessage alternative taking va_list args
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 23 Jan 2012 14:57:16 +0000 (14:57 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Wed, 16 May 2012 16:13:13 +0000 (17:13 +0100)
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
src/util/logging.h

index 110ad7e7d5be225f14b3b52e1f45c295cd90b9cd..23778d312dcd37c82bb65ddb05b2d657569808ea 100644 (file)
@@ -691,6 +691,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);
+}
+
+/**
+ * virLogVMessage:
+ * @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;
@@ -699,7 +722,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;
     unsigned int filterflags = 0;
 
     if (!virLogInitialized)
@@ -725,12 +747,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);
index a6fa63ec5ea3b8d3660071efb6ac27fdf6f571bf..70318d04dd81dea4af280305d754fd46ee465ba3 100644 (file)
@@ -135,6 +135,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