]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Fix up the default machine type for QMP probing
authorViktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
Fri, 30 Nov 2012 18:22:42 +0000 (11:22 -0700)
committerEric Blake <eblake@redhat.com>
Fri, 30 Nov 2012 18:56:57 +0000 (11:56 -0700)
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@linux.vnet.ibm.com>
src/qemu/qemu_capabilities.c

index d6affb97219fa90755fa565cb1700c445ade43f9..6e34cdf93a02e9c246b9b06919f6d98304e09122 100644 (file)
@@ -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;