[libvirt] [PATCH 00/21] tests: qemuxml2argv: support optional arguments

Eric Blake eblake at redhat.com
Thu Mar 14 15:17:18 UTC 2019


On 3/14/19 9:43 AM, Cole Robinson wrote:
> Right now in qemuxml2argv we have a proliferation of DO_*TEST* macros.
> They essentially fill in data in the testInfo struct and invoke the
> test function.
> 
> There's several bits of data that we want to specify for a small
> subset of tests: flags, parseFlags, migrateFrom/migrateFd, gic. The
> base macros need to handle these in their argument lists, and we
> provide many convenience macros that fill in default values for the
> less common parameters. Any time we want to add a new bit of data
> though, the base macros are extended, and every caller of those
> needs to be adjusted, and we are faced with the question of whether
> to extend the combinatorial explosion of convenience macros which
> have only a subset of options exposed.
> 
> This series adds a testInfoSetArgs which uses va_args to make these
> mandatory parameters optional. The general format is:
> 
>     DO_TEST_FULL(...
>                  ARG_FOO, foovalue,
>                  ARG_BAR, barvalue, ...)
> 
> Specifically, one of the migrate tests went from:
> 
>     DO_TEST_FULL("restore-v2", "exec:cat", 7, 0, 0, GIC_NONE, NONE);
> 
> to:
> 
>     DO_TEST_FULL("restore-v2",
>                  ARG_MIGRATE_FROM, "exec:cat",
>                  ARG_MIGRATE_FD, 7,
>                  ARG_QEMU_CAPS, NONE);

Umm, what's your sentinel value here? It is undefined behavior to call
va_arg more times than there are arguments present, but without some
sort of sentinel, you don't know when to stop calling va_arg.

The overall idea is nice, but I think you need an ARG_END sentinel.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org




More information about the libvir-list mailing list