]> xenbits.xensource.com Git - libvirt.git/commitdiff
examples: fix 64-bit integer formatting on Windows
authorDaniel P. Berrangé <berrange@redhat.com>
Tue, 2 Apr 2019 08:45:47 +0000 (09:45 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Wed, 3 Apr 2019 10:34:25 +0000 (11:34 +0100)
The Windows printf functions don't support %llu/%lld for printing 64-bit
integers. For most of libvirt this doesn't matter as we rely on gnulib
which provides a replacement printf that is sane.

The example code is designed to compile against the normal OS headers,
with no use of gnulib and thus has to use the platform specific printf.
To deal with this we must use the macros PRI* macros from inttypes.h
to get the platform specific format string.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
examples/admin/client_info.c
examples/admin/list_clients.c
examples/domtop/domtop.c

index f3f62a656b45b5e3dd4d40f8c9896af0542ba941..7fc6c72bbd4ee1bb674c8fb6ea2a4b127a83b821 100644 (file)
@@ -3,6 +3,7 @@
 #include <stdlib.h>
 #include <time.h>
 #include <string.h>
+#include <inttypes.h>
 #include <libvirt/libvirt-admin.h>
 
 static const char *
@@ -66,11 +67,11 @@ exampleGetTypedParamValue(virTypedParameterPtr item)
         break;
 
     case VIR_TYPED_PARAM_LLONG:
-        ret = asprintf(&str, "%lld", item->value.l);
+        ret = asprintf(&str, "%" PRId64, (int64_t)item->value.l);
         break;
 
     case VIR_TYPED_PARAM_ULLONG:
-        ret = asprintf(&str, "%llu", item->value.ul);
+        ret = asprintf(&str, "%" PRIu64, (uint64_t)item->value.ul);
         break;
 
     case VIR_TYPED_PARAM_DOUBLE:
@@ -143,7 +144,7 @@ int main(int argc, char **argv)
     if (!(timestr = exampleGetTimeStr(virAdmClientGetTimestamp(clnt))))
         goto cleanup;
 
-    printf("%-15s: %llu\n", "id", virAdmClientGetID(clnt));
+    printf("%-15s: %" PRIu64 "\n", "id", (uint64_t)virAdmClientGetID(clnt));
     printf("%-15s: %s\n", "connection_time", timestr);
     printf("%-15s: %s\n", "transport",
              exampleTransportToString(virAdmClientGetTransport(clnt)));
index 5cf8e4c2a6af1a0db14bdaeef6bc34e751d8849f..2876637d4217192a1566bb7433d190d4e3acf2cf 100644 (file)
@@ -1,6 +1,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
+#include <inttypes.h>
 #include <libvirt/libvirt-admin.h>
 
 static const char *
@@ -96,7 +97,7 @@ int main(int argc, char **argv)
                 exampleGetTimeStr(virAdmClientGetTimestamp(client))))
             goto cleanup;
 
-        printf(" %-5llu %-15s %-15s\n", id,
+        printf(" %-5" PRIu64 " %-15s %-15s\n", (uint64_t)id,
                exampleTransportToString(transport), timestr);
         free(timestr);
     }
index 008065c651de975bcb3486a7a11430315b29f74e..e1e7fbff8bbcf228fcfaf922c71ceaec8ffb0add 100644 (file)
@@ -29,6 +29,7 @@
 #include <string.h>
 #include <sys/time.h>
 #include <unistd.h>
+#include <inttypes.h>
 
 static bool debug;
 static bool run_top;
@@ -226,8 +227,11 @@ print_cpu_usage(const char *dom_name,
             return;
         }
 
-        DEBUG("now_params=%llu then_params=%llu now=%llu then=%llu",
-              now_params[pos].value.ul, then_params[pos].value.ul, now, then);
+        DEBUG("now_params=%" PRIu64 " then_params=%" PRIu64
+              " now=%" PRIu64 " then=%" PRIu64,
+              (uint64_t)now_params[pos].value.ul,
+              (uint64_t)then_params[pos].value.ul,
+              (uint64_t)now, (uint64_t)then);
 
         /* @now_params and @then_params are in nanoseconds, @now and @then are
          * in microseconds. In ideal world, we would translate them both into