From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> 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@xxxxxxxxxx> --- 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list