From: James Le Cuirot <jlecuirot(a)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 <jlecuirot(a)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