On Tue, 2016-04-05 at 12:35 +0200, Ján Tomko wrote:
> + /* Split the line using " " as a delimiter.
The first token
> + * will always be ":", but that's okay */
> + if (!(tokens = virStringSplitCount(start, " ", 0,
&ntokens)))
> + continue;
> +
> + /* Go through all flags and check whether one of those we
> + * might want to check for later on is present; if that's
> + * the case, set the relevant bit in the bitmap */
> + for (i = 0; i < ntokens; i++) {
> + int value;
> +
> + if ((value = virHostValidateCPUFlagTypeFromString(tokens[i])) >= 0)
> + ignore_value(virBitmapSetBit(flags, value));
> }
> +
> + virStringFreeListCount(tokens, ntokens);
> } while (1);
We have already found the first 'flags' or 'Features' and parsed all the
features. I doubt different processors on the system would have
different features so I'd just use while (0) here.
Yeah, if different CPUs had different features we'd probably
be in for a word of pain anyway.
Turns out that gcc is smart enough to figure out that a
'do {} while (0);' loop is going to be executed only once,
and optimizes it accordingly.
Side effect: the 'continue' instructions behave the same as
the 'break' instructions, and everything stops working :(
I've pushed the patch as-is.
Cheers.
--
Andrea Bolognani
Software Engineer - Virtualization Team