
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