On Wed, Sep 26, 2012 at 13:56:22 +0100, Daniel P. Berrange wrote:
On Wed, Sep 26, 2012 at 11:42:09AM +0200, Jiri Denemark wrote:
> On Tue, Sep 25, 2012 at 18:59:59 +0100, Daniel P. Berrange wrote:
> >
> > - p = t;
> > - if (!(t = strstr(p, "(default)")) || (next && t
>= next)) {
> > - list[nitems++] = machine;
> > - } else {
> > - /* put the default first in the list */
> > - memmove(list + 1, list, sizeof(*list) * nitems);
> > - list[0] = machine;
> > - nitems++;
> > - }
> > + if (strstr(p, "(default)"))
> > + defIdx = caps->nmachineTypes;
>
> While this will work because it sets defIdx to 1, 2, 4, ... until it stops at
> the one which is really default. Can we preserve the condition that checks if
> (default) was found at the current line rather than just somewhere in the rest
> of the qemu output to make this less magic? And I would even preserve the
> p = t assignment above.
Ok, so IIUC the folowing change:
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index fed7a06..b519db7 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -328,7 +328,8 @@ qemuCapsParseMachineTypesStr(const char *output,
if (!(name = strndup(p, t - p)))
goto no_memory;
- if (strstr(p, "(default)"))
+ p = t;
+ if (!(t = strstr(p, "(default)")) && (!next || t < next))
{
defIdx = caps->nmachineTypes;
if ((t = strstr(p, "(alias of ")) && (!next || t < next)) {
Right, that's what I had in mind.
Jirka