On 09/11/20 17:56, Markus Armbruster wrote:
Just like any other QemuOptsList, "machine" may have any number of
QemuOpts.  The ones with non-null ID happen to be ignored silently.
Known[*] trap for the unwary.

Are these all singletons?

They are never qemu_opts_find'd with non-NULL id, so I'd say they are.

If lists>merge_lists, you no longer check id_wellformed().  Easy enough
to fix: lift the check before this conditional.

Intentional: we always error with INVALID_PARAMETER, so it's pointless to check if the id is well-formed.

After the patch:

    id        fail_if_exists  merge_lists  |  return
    non-null  don't care      true         |  fail
    null      don't care      true         |  existing or else new opts
    non-null  false           false        |  abort
    non-null  true            false        |  new opts / fail if exist
    null      don't care      false        |  new opts

Still too many

Discounting the case that aborts as it's not user-controlled (it's "just" a matter of inspecting qemu_opts_create callers), the rest can be summarized as:

- merge_lists = false: singleton opts with NULL id; non-NULL id fails

- merge_lists = true: always return new opts; non-NULL id fails if dup

[*] Known to the QemuOpts cognoscenti, whose number could be
embarrasingly close to one.

Maybe not one, but a single hand certainly has a surplus of fingers.

Paolo


Reply via email to