qemu_firmware: Separate machine and arch matching into a function

This part of the code will be reused later.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
Michal Privoznik 2019-04-04 15:51:47 +02:00
parent 15e0b76480
commit 2337309e04
1 changed files with 24 additions and 18 deletions

View File

@ -1056,6 +1056,29 @@ qemuFirmwareFetchConfigs(char ***firmwares,
}
static bool
qemuFirmwareMatchesMachineArch(const qemuFirmware *fw,
const char *machine,
virArch arch)
{
size_t i;
for (i = 0; i < fw->ntargets; i++) {
size_t j;
if (arch != fw->targets[i]->architecture)
continue;
for (j = 0; j < fw->targets[i]->nmachines; j++) {
if (fnmatch(fw->targets[i]->machines[j], machine, 0) == 0)
return true;
}
}
return false;
}
static bool
qemuFirmwareMatchDomain(const virDomainDef *def,
const qemuFirmware *fw,
@ -1080,24 +1103,7 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
return false;
}
for (i = 0; i < fw->ntargets; i++) {
size_t j;
if (def->os.arch != fw->targets[i]->architecture)
continue;
for (j = 0; j < fw->targets[i]->nmachines; j++) {
if (fnmatch(fw->targets[i]->machines[j], def->os.machine, 0) == 0)
break;
}
if (j == fw->targets[i]->nmachines)
continue;
break;
}
if (i == fw->ntargets) {
if (!qemuFirmwareMatchesMachineArch(fw, def->os.machine, def->os.arch)) {
VIR_DEBUG("No matching machine type in '%s'", path);
return false;
}