• M
    block: Fix -blockdev / blockdev-add for empty objects and arrays · 2860b2b2
    Markus Armbruster 提交于
    -blockdev and blockdev-add silently ignore empty objects and arrays in
    their argument.  That's because qmp_blockdev_add() converts the
    argument to a flat QDict, and qdict_flatten() eats empty QDict and
    QList members.  For instance, we ignore an empty BlockdevOptions
    member @cache.  No real harm, as absent means the same as empty there.
    
    Thus, the flaw puts an artificial restriction on the QAPI schema: we
    can't have potentially empty objects and arrays within
    BlockdevOptions, except when they're optional and "empty" has the same
    meaning as "absent".
    
    Our QAPI schema satisfies this restriction (I checked), but it's a
    trap for the unwary, and a temptation to employ awkward workarounds
    for the wary.  Let's get rid of it.
    
    Change qdict_flatten() and qdict_crumple() to treat empty dictionaries
    and lists exactly like scalars.
    Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: NKevin Wolf <kwolf@redhat.com>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    2860b2b2
block-qdict.c 21.4 KB