[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [RFC PATCH 6/6] tests: Use virBitmap for qemu command line caps

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).


But in the meantime, your approach worked out.

Eric Blake   eblake redhat com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]