Quite a few users of qdict_put() were manually wrapping a
non-QObject. We can make such call-sites shorter, by providing
common macros to do the tedious work. Also shorten nearby
qdict_put_obj(,,QOBJECT()) sequences.
Signed-off-by: Eric Blake
Reviewed-by: Alberto Garcia
---
v2: rebase to current master
I'm okay if you want me to break this patch into smaller pieces.
---
include/qapi/qmp/qdict.h| 8 +++
block.c | 59 +++-
block/archipelago.c | 4 +-
block/blkdebug.c| 6 +-
block/blkverify.c | 11 ++-
block/curl.c| 2 +-
block/file-posix.c | 8 +--
block/file-win32.c | 4 +-
block/iscsi.c | 2 +-
block/nbd.c | 41 ++-
block/nfs.c | 43 +---
block/null.c| 2 +-
block/qcow2.c | 4 +-
block/quorum.c | 13 ++--
block/ssh.c | 16 ++---
block/vvfat.c | 10 +--
blockdev.c | 28
hw/block/xen_disk.c | 2 +-
hw/usb/xen-usb.c| 12 ++--
monitor.c | 18 ++---
qapi/qmp-event.c| 2 +-
qemu-img.c | 6 +-
qemu-io.c | 2 +-
qemu-nbd.c | 2 +-
qobject/qdict.c | 2 +-
target/s390x/cpu_models.c | 4 +-
tests/check-qdict.c | 132 ++--
tests/test-qmp-commands.c | 30
tests/test-qmp-event.c | 30
tests/test-qobject-output-visitor.c | 6 +-
util/qemu-option.c | 6 +-
31 files changed, 245 insertions(+), 270 deletions(-)
diff --git a/include/qapi/qmp/qdict.h b/include/qapi/qmp/qdict.h
index fe9a4c5..9d9f9a3 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 const char*. */
+#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/block.c b/block.c
index 39ddea3..e816657 100644
--- a/block.c
+++ b/block.c
@@ -876,16 +876,16 @@ static void update_flags_from_options(int *flags,
QemuOpts *opts)
static void update_options_from_flags(QDict *options, int flags)
{
if (!qdict_haskey(options, BDRV_OPT_CACHE_DIRECT)) {
-qdict_put(options, BDRV_OPT_CACHE_DIRECT,
- qbool_from_bool(flags & BDRV_O_NOCACHE));
+qdict_put_bool(options, BDRV_OPT_CACHE_DIRECT,
+ flags & BDRV_O_NOCACHE);
}
if (!qdict_haskey(options, BDRV_OPT_CACHE_NO_FLUSH)) {
-qdict_put(options, BDRV_OPT_CACHE_NO_FLUSH,
- qbool_from_bool(flags & BDRV_O_NO_FLUSH));
+qdict_put_bool(options, BDRV_OPT_CACHE_NO_FLUSH,
+ flags & BDRV_O_NO_FLUSH);
}
if (!qdict_haskey(options, BDRV_OPT_READ_ONLY)) {
-qdict_put(options, BDRV_OPT_READ_ONLY,
- qbool_from_bool(!(flags & BDRV_O_RDWR)));
+qdict_put_bool(options, BDRV_OPT_READ_ONLY,
+ !(flags & BDRV_O_RDWR));
}
}
@@ -1244,7 +1244,7 @@ static int bdrv_fill_options(QDict **options, const char
*filename,
/* Fetch the file name from the options QDict if necessary */
if (protocol && filename) {
if (!qdict_haskey(*options, "filename")) {
-qdict_put(*options, "filename", qstring_from_str(filename));
+qdict_put_str(*options, "filename", filename);
parse_filename = true;
} else {
error_setg(errp, "Can't specify 'file' and 'filename' options at "
@@ -1264,7 +1264,7 @@ static int bdrv_fill_options(QDict **options, const char
*filename,
}
drvname = drv->format_name;
-qdict_put(*options, "driver", qstring_from_str(drvname));
+qdict_put_str(*options, "driver", drvname);
} else {
error_setg(errp, "Must specify either driver or file");
return -EINVAL;
@@ -1517,7 +1517,7 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict
*parent_options,
}
if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) {
-