From: James Le Cuirot <jlecui...@microsoft.com>

Distros may provide compatibility symlinks after moving firmware files
around, but they won't work for existing VMs when doing a straight
string comparison.

I tried to compare inodes instead, but even glib doesn't provide a
straightforward cross-platform method to do this.

Resolves: https://bugs.gentoo.org/960591
Signed-off-by: James Le Cuirot <jlecui...@microsoft.com>
---
 src/qemu/qemu_firmware.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
index 2d0ec0b..b13b4f9 100644
--- a/src/qemu/qemu_firmware.c
+++ b/src/qemu/qemu_firmware.c
@@ -33,6 +33,7 @@
 #include "viralloc.h"
 #include "virenum.h"
 #include "virstring.h"
+#include "virfile.h"
 
 #define VIR_FROM_THIS VIR_FROM_QEMU
 
@@ -937,23 +938,23 @@ qemuFirmwareMatchesPaths(const qemuFirmware *fw,
     switch (fw->mapping.device) {
     case QEMU_FIRMWARE_DEVICE_FLASH:
         if (loader && loader->path &&
-            STRNEQ(loader->path, flash->executable.filename))
+            !virFileComparePaths(loader->path, flash->executable.filename))
             return false;
         if (loader && loader->nvramTemplate) {
             if (flash->mode != QEMU_FIRMWARE_FLASH_MODE_SPLIT)
                 return false;
-            if (STRNEQ(loader->nvramTemplate, flash->nvram_template.filename))
+            if (!virFileComparePaths(loader->nvramTemplate, 
flash->nvram_template.filename))
                 return false;
         }
         break;
     case QEMU_FIRMWARE_DEVICE_MEMORY:
         if (loader && loader->path &&
-            STRNEQ(loader->path, memory->filename))
+            !virFileComparePaths(loader->path, memory->filename))
             return false;
         break;
     case QEMU_FIRMWARE_DEVICE_KERNEL:
         if (kernelPath &&
-            STRNEQ(kernelPath, kernel->filename))
+            !virFileComparePaths(kernelPath, kernel->filename))
             return false;
         break;
     case QEMU_FIRMWARE_DEVICE_NONE:
@@ -1657,7 +1658,7 @@ qemuFirmwareFillDomainLegacy(virQEMUDriver *driver,
     for (i = 0; i < cfg->nfirmwares; i++) {
         virFirmware *fw = cfg->firmwares[i];
 
-        if (STRNEQ(fw->name, loader->path)) {
+        if (!virFileComparePaths(fw->name, loader->path)) {
             VIR_DEBUG("Not matching loader path '%s' for user provided path 
'%s'",
                       fw->name, loader->path);
             continue;
-- 
2.49.0

Reply via email to