From: Eric Blake <eblake@redhat.com>
To: qemu-devel@nongnu.org
Cc: armbru@redhat.com
Subject: [Qemu-devel] [PATCH v5 05/10] qobject: Add helper macros for common scalar insertions
Date: Thu, 27 Apr 2017 16:58:16 -0500 [thread overview]
Message-ID: <20170427215821.19397-6-eblake@redhat.com> (raw)
In-Reply-To: <20170427215821.19397-1-eblake@redhat.com>
Rather than making lots of callers wrap a scalar in a QInt, QString,
or QBool, provide helper macros that do the wrapping automatically.
Update the Coccinelle script to make mass conversions easy, although
the conversion itself will be done as a separate patches to ease
review and backport efforts.
Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
---
v5: minor comment tweak [Markus], add R-b
v4: tweak comment wording
v3: new patch
---
include/qapi/qmp/qdict.h | 8 ++++++++
include/qapi/qmp/qlist.h | 8 ++++++++
scripts/coccinelle/qobject.cocci | 22 ++++++++++++++++++++++
3 files changed, 38 insertions(+)
diff --git a/include/qapi/qmp/qdict.h b/include/qapi/qmp/qdict.h
index fe9a4c5..188440a 100644
--- a/include/qapi/qmp/qdict.h
+++ b/include/qapi/qmp/qdict.h
@@ -52,6 +52,14 @@ void qdict_destroy_obj(QObject *obj);
#define qdict_put(qdict, key, obj) \
qdict_put_obj(qdict, key, QOBJECT(obj))
+/* Helpers for int, bool, and string */
+#define qdict_put_int(qdict, key, value) \
+ qdict_put(qdict, key, qint_from_int(value))
+#define qdict_put_bool(qdict, key, value) \
+ qdict_put(qdict, key, qbool_from_bool(value))
+#define qdict_put_str(qdict, key, value) \
+ qdict_put(qdict, key, qstring_from_str(value))
+
/* High level helpers */
double qdict_get_double(const QDict *qdict, const char *key);
int64_t qdict_get_int(const QDict *qdict, const char *key);
diff --git a/include/qapi/qmp/qlist.h b/include/qapi/qmp/qlist.h
index a84117e..5dc4ed9 100644
--- a/include/qapi/qmp/qlist.h
+++ b/include/qapi/qmp/qlist.h
@@ -29,6 +29,14 @@ typedef struct QList {
#define qlist_append(qlist, obj) \
qlist_append_obj(qlist, QOBJECT(obj))
+/* Helpers for int, bool, and string */
+#define qlist_append_int(qlist, value) \
+ qlist_append(qlist, qint_from_int(value))
+#define qlist_append_bool(qlist, value) \
+ qlist_append(qlist, qbool_from_bool(value))
+#define qlist_append_str(qlist, value) \
+ qlist_append(qlist, qstring_from_str(value))
+
#define QLIST_FOREACH_ENTRY(qlist, var) \
for ((var) = ((qlist)->head.tqh_first); \
(var); \
diff --git a/scripts/coccinelle/qobject.cocci b/scripts/coccinelle/qobject.cocci
index aa899e2..97703a4 100644
--- a/scripts/coccinelle/qobject.cocci
+++ b/scripts/coccinelle/qobject.cocci
@@ -2,12 +2,34 @@
@@
expression Obj, Key, E;
@@
+(
- qdict_put_obj(Obj, Key, QOBJECT(E));
+ qdict_put(Obj, Key, E);
+|
+- qdict_put(Obj, Key, qint_from_int(E));
++ qdict_put_int(Obj, Key, E);
+|
+- qdict_put(Obj, Key, qbool_from_bool(E));
++ qdict_put_bool(Obj, Key, E);
+|
+- qdict_put(Obj, Key, qstring_from_str(E));
++ qdict_put_str(Obj, Key, E);
+)
// Use QList macros where they make sense
@@
expression Obj, E;
@@
+(
- qlist_append_obj(Obj, QOBJECT(E));
+ qlist_append(Obj, E);
+|
+- qlist_append(Obj, qint_from_int(E));
++ qlist_append_int(Obj, E);
+|
+- qlist_append(Obj, qbool_from_bool(E));
++ qlist_append_bool(Obj, E);
+|
+- qlist_append(Obj, qstring_from_str(E));
++ qlist_append_str(Obj, E);
+)
--
2.9.3
next prev parent reply other threads:[~2017-04-27 21:58 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-27 21:58 [Qemu-devel] [PATCH v5 00/10] qapi-related cleanups Eric Blake
2017-04-27 21:58 ` [Qemu-devel] [PATCH v5 01/10] pci: Use struct instead of QDict to pass back parameters Eric Blake
2017-04-27 21:58 ` [Qemu-devel] [PATCH v5 02/10] pci: Reduce scope of error injection Eric Blake
2017-04-27 21:58 ` [Qemu-devel] [PATCH v5 03/10] coccinelle: Add script to remove useless QObject casts Eric Blake
2017-04-27 21:58 ` [Qemu-devel] [PATCH v5 04/10] qobject: Drop " Eric Blake
2017-04-27 21:58 ` Eric Blake [this message]
2017-04-27 21:58 ` [Qemu-devel] [PATCH v5 06/10] qobject: Use simpler QDict/QList scalar insertion macros Eric Blake
2017-04-28 8:33 ` Markus Armbruster
2017-05-02 15:56 ` Stefan Hajnoczi
2017-05-02 16:26 ` Markus Armbruster
[not found] ` <e95da4dd-ae83-ea7b-73bb-849a88e8e049@suse.com>
2017-05-02 17:30 ` [Qemu-devel] [Research] Strato HiDrive as a Dropbox Replacement? Michal Suchánek
2017-05-08 14:48 ` [Qemu-devel] [PATCH v5 06/10] qobject: Use simpler QDict/QList scalar insertion macros Alberto Garcia
2017-05-09 7:14 ` Markus Armbruster
2017-04-27 21:58 ` [Qemu-devel] [PATCH v5 07/10] block: Simplify bdrv_append_temp_snapshot() logic Eric Blake
2017-04-27 21:58 ` [Qemu-devel] [PATCH v5 08/10] QemuOpts: Simplify qemu_opts_to_qdict() Eric Blake
2017-04-27 21:58 ` [Qemu-devel] [PATCH v5 09/10] fdc-test: Avoid deprecated 'change' command Eric Blake
2017-04-27 21:58 ` [Qemu-devel] [PATCH v5 10/10] test-qga: Actually test 0xff sync bytes Eric Blake
2017-05-02 16:46 ` Michael Roth
2017-05-02 16:56 ` Michael Roth
2017-05-03 8:57 ` Markus Armbruster
2017-05-03 19:52 ` Michael Roth
2017-05-04 7:23 ` Markus Armbruster
2017-05-04 13:16 ` Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170427215821.19397-6-eblake@redhat.com \
--to=eblake@redhat.com \
--cc=armbru@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).