The default machine type must be stored in the first element of the caps->machineTypes array. This was done for help output parsing but not for QMP probing. Added a helper function qemuSetDefaultMachine to apply the same fix up for both probing methods. Further, it was necessary to set caps->nmachineTypes after QMP probing. Signed-off-by: Viktor Mihajlovski <mihajlov@xxxxxxxxxxxxxxxxxx> --- src/qemu/qemu_capabilities.c | 38 ++++++++++++++++++++++++++------------ 1 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index d6affb9..6e34cdf 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -292,6 +292,23 @@ qemuCapsProbeCommand(const char *qemu, } +static void +qemuSetDefaultMachine(qemuCapsPtr caps, + size_t defIdx) +{ + char *name = caps->machineTypes[defIdx]; + char *alias = caps->machineAliases[defIdx]; + + memmove(caps->machineTypes + 1, + caps->machineTypes, + sizeof(caps->machineTypes[0]) * defIdx); + memmove(caps->machineAliases + 1, + caps->machineAliases, + sizeof(caps->machineAliases[0]) * defIdx); + caps->machineTypes[0] = name; + caps->machineAliases[0] = alias; +} + /* Format is: * <machine> <desc> [(default)|(alias of <canonical>)] */ @@ -352,18 +369,8 @@ qemuCapsParseMachineTypesStr(const char *output, } while ((p = next)); - if (defIdx != 0) { - char *name = caps->machineTypes[defIdx]; - char *alias = caps->machineAliases[defIdx]; - memmove(caps->machineTypes + 1, - caps->machineTypes, - sizeof(caps->machineTypes[0]) * defIdx); - memmove(caps->machineAliases + 1, - caps->machineAliases, - sizeof(caps->machineAliases[0]) * defIdx); - caps->machineTypes[0] = name; - caps->machineAliases[0] = alias; - } + if (defIdx) + qemuSetDefaultMachine(caps, defIdx); return 0; @@ -2020,6 +2027,7 @@ qemuCapsProbeQMPMachineTypes(qemuCapsPtr caps, int nmachines = 0; int ret = -1; size_t i; + size_t defIdx = 0; if ((nmachines = qemuMonitorGetMachines(mon, &machines)) < 0) goto cleanup; @@ -2049,7 +2057,13 @@ qemuCapsProbeQMPMachineTypes(qemuCapsPtr caps, goto cleanup; } } + if (machines[i]->isDefault) + defIdx = i; } + caps->nmachineTypes = nmachines; + + if (defIdx) + qemuSetDefaultMachine(caps, defIdx); ret = 0; -- 1.7.0.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list