[libvirt] [RFC PATCH 6/6] tests: Use virBitmap for qemu command line caps
Eric Blake
eblake at redhat.com
Fri Feb 11 17:11:16 UTC 2011
On 02/10/2011 07:03 AM, Jiri Denemark wrote:
>>> + va_start(list, caps);
>>> + while ((flag = va_arg(list, int)) < QEMU_CAPS_LAST)
>
> This is the bug I was talking about in the previous email. I should rather use
> "enum qemuCapsFlags" instead of "int" in case someone passes -fshort-enum
> option to gcc which would result in the enum being represented as char rather
> than int.
Ah, but char promotes to int, so you still end up getting the right
value from va_arg() (since varargs arguments are always passed via
default promotion rules). Not a bug, even under -fshort-enum. In fact,
gcc will warn if you do va_arg(list, enum xyz) when -fshort-enum is in
effect, since va_arg's second "argument" must be the promoted type.
>> QEMU_CAPS_LAST as a terminal seems a bit awkward. Would it be any
>> better to require 0 to be the terminal?
>
> The problem is that 0 is a valid flag value (QEMU_CAPS_KQEMU) addressing the
> lowest bit. We could reserve the value for a terminal but in that case we
> could never make use of the lowest bit in the bitmap. Not that it would make a
> huge difference but QEMU_CAPS_LAST just seemed good enough to me :-) Also it's
> kinda nice to have a call like
>
> qemuCapsSetList(caps, QEMU_CAPS_1, QEMU_CAPS_2, ..., QEMU_CAPS_LAST)
>
Yeah, on second thought, I think this is as good as we can get.
Maybe it's worth an enhancement request to gcc to implement a new
attribute sentinel_value(value), where the existing sentinel(position)
maps to sentinel_value(NULL, position).
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47702
But in the meantime, your approach worked out.
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110211/5930a904/attachment-0001.sig>
More information about the libvir-list
mailing list