From bc5355bb5710f4fab0d26bce81a98230b5b44586 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Thu, 29 Mar 2012 10:41:37 +0100 Subject: [PATCH] Fix format specifiers in test cases on Win32 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 (cherry picked from commit f48de0f161348d0b47743e1411796d4e40160546) --- 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 4b224ee07a..4e8484fb68 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 2fde1b5750..f8c7567e65 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 ba0cf02ff5..be82281c74 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; }