[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for-2.12 1/3] qapi: Add qdict_is_null()
From: |
Max Reitz |
Subject: |
Re: [Qemu-devel] [PATCH for-2.12 1/3] qapi: Add qdict_is_null() |
Date: |
Tue, 14 Nov 2017 15:59:30 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 |
On 2017-11-14 15:57, Markus Armbruster wrote:
> Max Reitz <address@hidden> writes:
>
>> Signed-off-by: Max Reitz <address@hidden>
>> ---
>> include/qapi/qmp/qdict.h | 1 +
>> qobject/qdict.c | 10 ++++++++++
>> 2 files changed, 11 insertions(+)
>>
>> diff --git a/include/qapi/qmp/qdict.h b/include/qapi/qmp/qdict.h
>> index fc218e7be6..c65ebfc748 100644
>> --- a/include/qapi/qmp/qdict.h
>> +++ b/include/qapi/qmp/qdict.h
>> @@ -76,6 +76,7 @@ int64_t qdict_get_try_int(const QDict *qdict, const char
>> *key,
>> int64_t def_value);
>> bool qdict_get_try_bool(const QDict *qdict, const char *key, bool
>> def_value);
>> const char *qdict_get_try_str(const QDict *qdict, const char *key);
>> +bool qdict_is_qnull(const QDict *qdict, const char *key);
>>
>> void qdict_copy_default(QDict *dst, QDict *src, const char *key);
>> void qdict_set_default_str(QDict *dst, const char *key, const char *val);
>> diff --git a/qobject/qdict.c b/qobject/qdict.c
>> index e8f15f1132..a032ea629a 100644
>> --- a/qobject/qdict.c
>> +++ b/qobject/qdict.c
>> @@ -294,6 +294,16 @@ const char *qdict_get_try_str(const QDict *qdict, const
>> char *key)
>> }
>>
>> /**
>> + * qdict_is_qnull(): Return true if the value for 'key' is QNull
>> + */
>> +bool qdict_is_qnull(const QDict *qdict, const char *key)
>> +{
>> + QObject *value = qdict_get(qdict, key);
>> +
>> + return value && value->type == QTYPE_QNULL;
>> +}
>> +
>> +/**
>> * qdict_iter(): Iterate over all the dictionary's stored values.
>> *
>> * This function allows the user to provide an iterator, which will be
>
> As far as I can tell, the new helper function is going to be used just
> once, by bdrv_open_inherit() in PATCH 2:
>
> qdict_is_qnull(options, "backing")
>
> I dislike abstracting from just one concrete instance.
>
> Perhaps a more general helper could be more generally useful. Something
> like:
>
> qobject_is(qdict_get(options, "backing", QTYPE_QNULL))
>
> There are numerous instances of
>
> !obj || qobject_type(obj) == T
>
> in the tree, which could then be replaced by
>
> qobject_is(obj, T)
>
> An alternative helper: macro qobject_dynamic_cast(obj, T) that returns
> (T *)obj if obj is a T, else null. Leads to something like
>
> qobject_dynamic_cast(qdict_get(options, "backing", QNull))
If you think that's good, then that's good -- you know the QAPI code
better then me, after all.
To explain myself: I thought it would be the natural extension of the
qdict_get_try_*() functions for the QNull type.
Max
signature.asc
Description: OpenPGP digital signature