From: "Daniel P. Berrange" <berrange(a)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(a)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