[libvirt] [PATCH 2/4] Fix format specifiers in test cases on Win32

Daniel P. Berrange berrange at redhat.com
Thu Mar 29 09:53:14 UTC 2012


From: "Daniel P. Berrange" <berrange at redhat.com>

Some of the test suites use fprintf with format specifiers
that are not supported on Win32 and are not fixed by gnulib.

The mingw32 compiler also has trouble detecting ssize_t
correctly, complaining that 'ssize_t' does not match
'signed size_t' (which it expects for %zd). Force the
cast to size_t to avoid this problem

* tests/testutils.c, tests/testutils.h: Fix printf
  annotation on virTestResult. Use virVasprintf
  instead of vfprintf
* tests/virhashtest.c: Use VIR_WARN instead of fprintf(stderr).
  Cast to size_t to avoid mingw32 compiler bug

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 tests/testutils.c   |    8 ++++++--
 tests/testutils.h   |    3 ++-
 tests/virhashtest.c |   24 +++++++++++++++---------
 3 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/tests/testutils.c b/tests/testutils.c
index 4b224ee..4e8484f 100644
--- a/tests/testutils.c
+++ b/tests/testutils.c
@@ -72,7 +72,7 @@ virtTestCountAverage(double *items, int nitems)
     return (double) (sum / nitems);
 }
 
-ATTRIBUTE_FMT_PRINTF(3,4)
+
 void virtTestResult(const char *name, int ret, const char *msg, ...)
 {
     va_list vargs;
@@ -89,7 +89,11 @@ void virtTestResult(const char *name, int ret, const char *msg, ...)
         else {
             fprintf(stderr, "FAILED\n");
             if (msg) {
-                vfprintf(stderr, msg, vargs);
+                char *str;
+                if (virVasprintf(&str, msg, vargs) == 0) {
+                    fprintf(stderr, "%s", str);
+                    VIR_FREE(str);
+                }
             }
         }
     } else {
diff --git a/tests/testutils.h b/tests/testutils.h
index 2fde1b5..f8c7567 100644
--- a/tests/testutils.h
+++ b/tests/testutils.h
@@ -23,7 +23,8 @@ extern char *abs_srcdir;
 double virtTestCountAverage(double *items,
                             int nitems);
 
-void virtTestResult(const char *name, int ret, const char *msg, ...);
+void virtTestResult(const char *name, int ret, const char *msg, ...)
+    ATTRIBUTE_FMT_PRINTF(3,4);
 int virtTestRun(const char *title,
                 int nloops,
                 int (*body)(const void *data),
diff --git a/tests/virhashtest.c b/tests/virhashtest.c
index ba0cf02..be82281 100644
--- a/tests/virhashtest.c
+++ b/tests/virhashtest.c
@@ -10,11 +10,17 @@
 #include "virhashdata.h"
 #include "testutils.h"
 #include "memory.h"
+#include "util.h"
+#include "logging.h"
 
 
 #define testError(...)                                          \
     do {                                                        \
-        fprintf(stderr, __VA_ARGS__);                           \
+        char *str;                                              \
+        if (virAsprintf(&str, __VA_ARGS__) == 0) {              \
+            fprintf(stderr, "%s", str);                         \
+            VIR_FREE(str);                                      \
+        }                                                       \
         /* Pad to line up with test name ... in virTestRun */   \
         fprintf(stderr, "%74s", "... ");                        \
     } while (0)
@@ -40,16 +46,16 @@ testHashInit(int size)
         }
 
         if (virHashTableSize(hash) != oldsize && virTestGetDebug()) {
-            fprintf(stderr, "\nhash grown from %zd to %zd",
-                    oldsize, virHashTableSize(hash));
+            VIR_WARN("hash grown from %zd to %zd",
+                     (size_t)oldsize, (size_t)virHashTableSize(hash));
         }
     }
 
     for (i = 0; i < ARRAY_CARDINALITY(uuids); i++) {
         if (!virHashLookup(hash, uuids[i])) {
             if (virTestGetVerbose()) {
-                fprintf(stderr, "\nentry \"%s\" could not be found\n",
-                        uuids[i]);
+                VIR_WARN("\nentry \"%s\" could not be found\n",
+                         uuids[i]);
             }
             virHashFree(hash);
             return NULL;
@@ -75,15 +81,15 @@ testHashCheckCount(virHashTablePtr hash, size_t count)
     ssize_t iter_count = 0;
 
     if (virHashSize(hash) != count) {
-        testError("\nhash contains %zd instead of %zu elements\n",
-                  virHashSize(hash), count);
+        testError("\nhash contains %zu instead of %zu elements\n",
+                  (size_t)virHashSize(hash), count);
         return -1;
     }
 
     iter_count = virHashForEach(hash, testHashCheckForEachCount, NULL);
     if (count != iter_count) {
-        testError("\nhash claims to have %zu elements but iteration finds %zd\n",
-                  count, iter_count);
+        testError("\nhash claims to have %zu elements but iteration finds %zu\n",
+                  count, (size_t)iter_count);
         return -1;
     }
 
-- 
1.7.7.6




More information about the libvir-list mailing list