From: Michal Privoznik <[email protected]>

The time_t type can be 32bit or 64bit signed integer. There are
systems where it's defined as long, or long long (32bit systems
usually). Therefore, using just 'l' length modifier is not good
enough. Also, using 'u' conversion specifier is also wrong
(though, values stored in qemuNbdkitCaps struct reflect mtime of
some files, so there won't be a negative value).

Anyway, do what we already do for virQEMUCaps - use '%lld' printf
format and typecast to long long.

Signed-off-by: Michal Privoznik <[email protected]>
---

Spotted this on the following pipeline:

https://gitlab.com/MichalPrivoznik/libvirt/-/jobs/14580340190

in which I was testing moving our CI from Debian 12 to 13. Apparently,
in Debian they decided to -D_TIME_BITS=64 for everything [1] and only
when compiling on a 32bit arch it's when time_t expands to 'long long'.

1: https://wiki.debian.org/ReleaseGoals/64bit-time

 src/qemu/qemu_nbdkit.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/qemu/qemu_nbdkit.c b/src/qemu/qemu_nbdkit.c
index 542a6b1f44..6918fc6631 100644
--- a/src/qemu/qemu_nbdkit.c
+++ b/src/qemu/qemu_nbdkit.c
@@ -544,18 +544,18 @@ qemuNbdkitCapsFormatCache(qemuNbdkitCaps *nbdkitCaps)
 
     virBufferEscapeString(&buf, "<path>%s</path>\n",
                           nbdkitCaps->path);
-    virBufferAsprintf(&buf, "<nbdkitctime>%lu</nbdkitctime>\n",
-                      nbdkitCaps->ctime);
+    virBufferAsprintf(&buf, "<nbdkitctime>%lld</nbdkitctime>\n",
+                      (long long)nbdkitCaps->ctime);
     virBufferEscapeString(&buf, "<plugindir>%s</plugindir>\n",
                           nbdkitCaps->pluginDir);
-    virBufferAsprintf(&buf, "<plugindirmtime>%lu</plugindirmtime>\n",
-                      nbdkitCaps->pluginDirMtime);
+    virBufferAsprintf(&buf, "<plugindirmtime>%lld</plugindirmtime>\n",
+                      (long long)nbdkitCaps->pluginDirMtime);
     virBufferEscapeString(&buf, "<filterdir>%s</filterdir>\n",
                           nbdkitCaps->filterDir);
-    virBufferAsprintf(&buf, "<filterdirmtime>%lu</filterdirmtime>\n",
-                      nbdkitCaps->filterDirMtime);
-    virBufferAsprintf(&buf, "<selfctime>%lu</selfctime>\n",
-                      nbdkitCaps->libvirtCtime);
+    virBufferAsprintf(&buf, "<filterdirmtime>%lld</filterdirmtime>\n",
+                      (long long)nbdkitCaps->filterDirMtime);
+    virBufferAsprintf(&buf, "<selfctime>%lld</selfctime>\n",
+                      (long long)nbdkitCaps->libvirtCtime);
     virBufferAsprintf(&buf, "<selfvers>%u</selfvers>\n",
                       nbdkitCaps->libvirtVersion);
 
@@ -593,10 +593,10 @@ virNbdkitCapsSaveFile(void *data,
         return -1;
     }
 
-    VIR_DEBUG("Saved caps '%s' for '%s' with (%lu, %lu)",
+    VIR_DEBUG("Saved caps '%s' for '%s' with (%lld, %lld)",
               filename, nbdkitCaps->path,
-              nbdkitCaps->ctime,
-              nbdkitCaps->libvirtCtime);
+              (long long)nbdkitCaps->ctime,
+              (long long)nbdkitCaps->libvirtCtime);
 
     return 0;
 }
-- 
2.53.0

Reply via email to