[libvirt] [PATCH 1/3] examples: Work around mingw printf() weakness

Eric Blake eblake at redhat.com
Tue Jan 8 19:56:39 UTC 2019


mingw lacks %lld and %zu support in printf(); we were getting it
from gnulib. But since commit acf522e8 stopped linking examples
against gnulib, we are getting a build failure due to -Wformat
flagging these strings. Keep the examples standalone, and work
around mingw by using manual casts to types we can portably print.

Signed-off-by: Eric Blake <eblake at redhat.com>
---
 examples/domtop/domtop.c            | 3 ++-
 examples/object-events/event-test.c | 5 +++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/examples/domtop/domtop.c b/examples/domtop/domtop.c
index 4224e4c9ec..ada5a064fb 100644
--- a/examples/domtop/domtop.c
+++ b/examples/domtop/domtop.c
@@ -241,7 +241,8 @@ print_cpu_usage(const char *dom_name,

         if (delim)
             printf("\t");
-        printf("CPU%zu: %.2lf", cpu + i, usage);
+        /* mingw lacks %zu */
+        printf("CPU%u: %.2lf", (unsigned)(cpu + i), usage);
         delim = true;
     }

diff --git a/examples/object-events/event-test.c b/examples/object-events/event-test.c
index 53d95b10d0..0c99fb33e3 100644
--- a/examples/object-events/event-test.c
+++ b/examples/object-events/event-test.c
@@ -948,10 +948,11 @@ myDomainEventBlockThresholdCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
                                     unsigned long long excess,
                                     void *opaque ATTRIBUTE_UNUSED)
 {
+    /* Casts to uint64_t to work around mingw not knowing %lld */
     printf("%s EVENT: Domain %s(%d) block threshold callback dev '%s'(%s), "
-           "threshold: '%llu', excess: '%llu'",
+           "threshold: '%" PRIu64 "', excess: '%" PRIu64 "'",
            __func__, virDomainGetName(dom), virDomainGetID(dom),
-           dev, NULLSTR(path), threshold, excess);
+           dev, NULLSTR(path), (uint64_t)threshold, (uint64_t)excess);
     return 0;
 }

-- 
2.20.1




More information about the libvir-list mailing list