[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: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH for-2.12 1/3] qapi: Add qdict_is_null() |
Date: |
Tue, 14 Nov 2017 15:57:52 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) |
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))