get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/806828/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 806828,
    "url": "http://patchwork.ozlabs.org/api/patches/806828/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/1503965694-10794-19-git-send-email-mdroth@linux.vnet.ibm.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<1503965694-10794-19-git-send-email-mdroth@linux.vnet.ibm.com>",
    "list_archive_url": null,
    "date": "2017-08-29T00:13:53",
    "name": "[18/79] qobject: Use simpler QDict/QList scalar insertion macros",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "3d5d15bf6d42efbf0c80f4826876b9c4be242b6b",
    "submitter": {
        "id": 5549,
        "url": "http://patchwork.ozlabs.org/api/people/5549/?format=api",
        "name": "Michael Roth",
        "email": "mdroth@linux.vnet.ibm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/1503965694-10794-19-git-send-email-mdroth@linux.vnet.ibm.com/mbox/",
    "series": [
        {
            "id": 281,
            "url": "http://patchwork.ozlabs.org/api/series/281/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=281",
            "date": "2017-08-29T00:13:45",
            "name": "Patch Round-up for stable 2.9.1, freeze on 2017-09-04",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/281/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/806828/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/806828/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org",
        "Authentication-Results": "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)",
        "Received": [
            "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xh8gV5Sllz9s65\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 29 Aug 2017 10:30:46 +1000 (AEST)",
            "from localhost ([::1]:41960 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dmUQW-0005tc-GT\n\tfor incoming@patchwork.ozlabs.org; Mon, 28 Aug 2017 20:30:44 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:47671)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <mdroth@linux.vnet.ibm.com>) id 1dmUCG-00010G-Mx\n\tfor qemu-devel@nongnu.org; Mon, 28 Aug 2017 20:16:07 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <mdroth@linux.vnet.ibm.com>) id 1dmUC9-0005AE-0g\n\tfor qemu-devel@nongnu.org; Mon, 28 Aug 2017 20:16:00 -0400",
            "from mx0a-001b2d01.pphosted.com ([148.163.156.1]:37698)\n\tby eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <mdroth@linux.vnet.ibm.com>)\n\tid 1dmUC8-00059R-Gm\n\tfor qemu-devel@nongnu.org; Mon, 28 Aug 2017 20:15:52 -0400",
            "from pps.filterd (m0098409.ppops.net [127.0.0.1])\n\tby mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id\n\tv7T0E71g090081\n\tfor <qemu-devel@nongnu.org>; Mon, 28 Aug 2017 20:15:51 -0400",
            "from e38.co.us.ibm.com (e38.co.us.ibm.com [32.97.110.159])\n\tby mx0a-001b2d01.pphosted.com with ESMTP id 2cmvyehk3e-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <qemu-devel@nongnu.org>; Mon, 28 Aug 2017 20:15:51 -0400",
            "from localhost\n\tby e38.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <qemu-devel@nongnu.org> from <mdroth@linux.vnet.ibm.com>;\n\tMon, 28 Aug 2017 18:15:50 -0600",
            "from b03cxnp08026.gho.boulder.ibm.com (9.17.130.18)\n\tby e38.co.us.ibm.com (192.168.1.138) with IBM ESMTP SMTP Gateway:\n\tAuthorized Use Only! Violators will be prosecuted; \n\tMon, 28 Aug 2017 18:15:48 -0600",
            "from b03ledav006.gho.boulder.ibm.com\n\t(b03ledav006.gho.boulder.ibm.com [9.17.130.237])\n\tby b03cxnp08026.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with\n\tESMTP id v7T0Fl5G63438862; Mon, 28 Aug 2017 17:15:47 -0700",
            "from b03ledav006.gho.boulder.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id C9896C6042;\n\tMon, 28 Aug 2017 18:15:47 -0600 (MDT)",
            "from localhost (unknown [9.80.85.217])\n\tby b03ledav006.gho.boulder.ibm.com (Postfix) with ESMTP id 7AA7EC6037;\n\tMon, 28 Aug 2017 18:15:47 -0600 (MDT)"
        ],
        "From": "Michael Roth <mdroth@linux.vnet.ibm.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Mon, 28 Aug 2017 19:13:53 -0500",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1503965694-10794-1-git-send-email-mdroth@linux.vnet.ibm.com>",
        "References": "<1503965694-10794-1-git-send-email-mdroth@linux.vnet.ibm.com>",
        "X-TM-AS-GCONF": "00",
        "x-cbid": "17082900-0028-0000-0000-00000846DB21",
        "X-IBM-SpamModules-Scores": "",
        "X-IBM-SpamModules-Versions": "BY=3.00007630; HX=3.00000241; KW=3.00000007;\n\tPH=3.00000004; SC=3.00000226; SDB=6.00909028; UDB=6.00455849;\n\tIPR=6.00689279; \n\tBA=6.00005557; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009;\n\tZB=6.00000000; \n\tZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00016909;\n\tXFM=3.00000015; UTC=2017-08-29 00:15:50",
        "X-IBM-AV-DETECTION": "SAVI=unused REMOTE=unused XFE=unused",
        "x-cbparentid": "17082900-0029-0000-0000-000037553110",
        "Message-Id": "<1503965694-10794-19-git-send-email-mdroth@linux.vnet.ibm.com>",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-08-28_13:, , signatures=0",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n\tspamscore=0 suspectscore=4\n\tmalwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam\n\tadjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000\n\tdefinitions=main-1708290001",
        "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy]",
        "X-Received-From": "148.163.156.1",
        "Subject": "[Qemu-devel] [PATCH 18/79] qobject: Use simpler QDict/QList scalar\n\tinsertion macros",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.21",
        "Precedence": "list",
        "List-Id": "<qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Cc": "qemu-stable@nongnu.org, Markus Armbruster <armbru@redhat.com>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"
    },
    "content": "From: Eric Blake <eblake@redhat.com>\n\nWe now have macros in place to make it less verbose to add a scalar\nto QDict and QList, so use them.\n\nPatch created mechanically via:\n  spatch --sp-file scripts/coccinelle/qobject.cocci \\\n    --macro-file scripts/cocci-macro-file.h --dir . --in-place\nthen touched up manually to fix a couple of '?:' back to original\nspacing, as well as avoiding a long line in monitor.c.\n\nSigned-off-by: Eric Blake <eblake@redhat.com>\nReviewed-by: Markus Armbruster <armbru@redhat.com>\nMessage-Id: <20170427215821.19397-7-eblake@redhat.com>\nReviewed-by: Stefan Hajnoczi <stefanha@redhat.com>\nReviewed-by: Alberto Garcia <berto@igalia.com>\nSigned-off-by: Markus Armbruster <armbru@redhat.com>\n(cherry picked from commit 46f5ac205a9dc5e2c24274c7df371509a286281f)\n* prereq for fc0932f\nSigned-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>\n---\n block.c                             |  45 +++++-------\n block/blkdebug.c                    |   6 +-\n block/blkverify.c                   |   6 +-\n block/curl.c                        |   2 +-\n block/file-posix.c                  |   8 +--\n block/file-win32.c                  |   4 +-\n block/nbd.c                         |  41 ++++++-----\n block/nfs.c                         |  43 +++++-------\n block/null.c                        |   2 +-\n block/qcow2.c                       |   4 +-\n block/quorum.c                      |   8 +--\n block/rbd.c                         |  16 ++---\n block/snapshot.c                    |   2 +-\n block/ssh.c                         |  16 ++---\n block/vvfat.c                       |  10 +--\n blockdev.c                          |  30 ++++----\n hw/block/xen_disk.c                 |   2 +-\n hw/usb/xen-usb.c                    |  12 ++--\n monitor.c                           |  23 +++----\n qapi/qmp-event.c                    |   2 +-\n qemu-img.c                          |   6 +-\n qemu-io.c                           |   2 +-\n qemu-nbd.c                          |   2 +-\n qobject/qdict.c                     |   2 +-\n target/s390x/cpu_models.c           |   4 +-\n tests/check-qdict.c                 | 134 ++++++++++++++++++------------------\n tests/check-qlist.c                 |   4 +-\n tests/device-introspect-test.c      |   4 +-\n tests/test-qemu-opts.c              |   4 +-\n tests/test-qmp-commands.c           |  24 +++----\n tests/test-qmp-event.c              |  30 ++++----\n tests/test-qobject-output-visitor.c |   6 +-\n util/qemu-option.c                  |   2 +-\n 33 files changed, 241 insertions(+), 265 deletions(-)",
    "diff": "diff --git a/block.c b/block.c\nindex f156348..513e6e5 100644\n--- a/block.c\n+++ b/block.c\n@@ -937,16 +937,14 @@ static void update_flags_from_options(int *flags, QemuOpts *opts)\n static void update_options_from_flags(QDict *options, int flags)\n {\n     if (!qdict_haskey(options, BDRV_OPT_CACHE_DIRECT)) {\n-        qdict_put(options, BDRV_OPT_CACHE_DIRECT,\n-                  qbool_from_bool(flags & BDRV_O_NOCACHE));\n+        qdict_put_bool(options, BDRV_OPT_CACHE_DIRECT, flags & BDRV_O_NOCACHE);\n     }\n     if (!qdict_haskey(options, BDRV_OPT_CACHE_NO_FLUSH)) {\n-        qdict_put(options, BDRV_OPT_CACHE_NO_FLUSH,\n-                  qbool_from_bool(flags & BDRV_O_NO_FLUSH));\n+        qdict_put_bool(options, BDRV_OPT_CACHE_NO_FLUSH,\n+                       flags & BDRV_O_NO_FLUSH);\n     }\n     if (!qdict_haskey(options, BDRV_OPT_READ_ONLY)) {\n-        qdict_put(options, BDRV_OPT_READ_ONLY,\n-                  qbool_from_bool(!(flags & BDRV_O_RDWR)));\n+        qdict_put_bool(options, BDRV_OPT_READ_ONLY, !(flags & BDRV_O_RDWR));\n     }\n }\n \n@@ -1362,7 +1360,7 @@ static int bdrv_fill_options(QDict **options, const char *filename,\n     /* Fetch the file name from the options QDict if necessary */\n     if (protocol && filename) {\n         if (!qdict_haskey(*options, \"filename\")) {\n-            qdict_put(*options, \"filename\", qstring_from_str(filename));\n+            qdict_put_str(*options, \"filename\", filename);\n             parse_filename = true;\n         } else {\n             error_setg(errp, \"Can't specify 'file' and 'filename' options at \"\n@@ -1383,7 +1381,7 @@ static int bdrv_fill_options(QDict **options, const char *filename,\n             }\n \n             drvname = drv->format_name;\n-            qdict_put(*options, \"driver\", qstring_from_str(drvname));\n+            qdict_put_str(*options, \"driver\", drvname);\n         } else {\n             error_setg(errp, \"Must specify either driver or file\");\n             return -EINVAL;\n@@ -2038,7 +2036,7 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *parent_options,\n     }\n \n     if (bs->backing_format[0] != '\\0' && !qdict_haskey(options, \"driver\")) {\n-        qdict_put(options, \"driver\", qstring_from_str(bs->backing_format));\n+        qdict_put_str(options, \"driver\", bs->backing_format);\n     }\n \n     backing_hd = bdrv_open_inherit(*backing_filename ? backing_filename : NULL,\n@@ -2193,12 +2191,9 @@ static BlockDriverState *bdrv_append_temp_snapshot(BlockDriverState *bs,\n     }\n \n     /* Prepare options QDict for the temporary file */\n-    qdict_put(snapshot_options, \"file.driver\",\n-              qstring_from_str(\"file\"));\n-    qdict_put(snapshot_options, \"file.filename\",\n-              qstring_from_str(tmp_filename));\n-    qdict_put(snapshot_options, \"driver\",\n-              qstring_from_str(\"qcow2\"));\n+    qdict_put_str(snapshot_options, \"file.driver\", \"file\");\n+    qdict_put_str(snapshot_options, \"file.filename\", tmp_filename);\n+    qdict_put_str(snapshot_options, \"driver\", \"qcow2\");\n \n     bs_snapshot = bdrv_open(NULL, NULL, snapshot_options, flags, errp);\n     snapshot_options = NULL;\n@@ -2373,8 +2368,7 @@ static BlockDriverState *bdrv_open_inherit(const char *filename,\n                 goto fail;\n             }\n \n-            qdict_put(options, \"file\",\n-                      qstring_from_str(bdrv_get_node_name(file_bs)));\n+            qdict_put_str(options, \"file\", bdrv_get_node_name(file_bs));\n         }\n     }\n \n@@ -2396,8 +2390,8 @@ static BlockDriverState *bdrv_open_inherit(const char *filename,\n          * sure to update both bs->options (which has the full effective\n          * options for bs) and options (which has file.* already removed).\n          */\n-        qdict_put(bs->options, \"driver\", qstring_from_str(drv->format_name));\n-        qdict_put(options, \"driver\", qstring_from_str(drv->format_name));\n+        qdict_put_str(bs->options, \"driver\", drv->format_name);\n+        qdict_put_str(options, \"driver\", drv->format_name);\n     } else if (!drv) {\n         error_setg(errp, \"Must specify either driver or file\");\n         goto fail;\n@@ -2772,12 +2766,12 @@ int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,\n      * that they are checked at the end of this function. */\n     value = qemu_opt_get(opts, \"node-name\");\n     if (value) {\n-        qdict_put(reopen_state->options, \"node-name\", qstring_from_str(value));\n+        qdict_put_str(reopen_state->options, \"node-name\", value);\n     }\n \n     value = qemu_opt_get(opts, \"driver\");\n     if (value) {\n-        qdict_put(reopen_state->options, \"driver\", qstring_from_str(value));\n+        qdict_put_str(reopen_state->options, \"driver\", value);\n     }\n \n     /* if we are to stay read-only, do not allow permission change\n@@ -4268,8 +4262,7 @@ void bdrv_img_create(const char *filename, const char *fmt,\n \n             if (backing_fmt) {\n                 backing_options = qdict_new();\n-                qdict_put(backing_options, \"driver\",\n-                          qstring_from_str(backing_fmt));\n+                qdict_put_str(backing_options, \"driver\", backing_fmt);\n             }\n \n             bs = bdrv_open(full_backing, NULL, backing_options, back_flags,\n@@ -4674,7 +4667,7 @@ void bdrv_refresh_filename(BlockDriverState *bs)\n          * contain a representation of the filename, therefore the following\n          * suffices without querying the (exact_)filename of this BDS. */\n         if (bs->file->bs->full_open_options) {\n-            qdict_put(opts, \"driver\", qstring_from_str(drv->format_name));\n+            qdict_put_str(opts, \"driver\", drv->format_name);\n             QINCREF(bs->file->bs->full_open_options);\n             qdict_put(opts, \"file\", bs->file->bs->full_open_options);\n \n@@ -4692,7 +4685,7 @@ void bdrv_refresh_filename(BlockDriverState *bs)\n \n         opts = qdict_new();\n         append_open_options(opts, bs);\n-        qdict_put(opts, \"driver\", qstring_from_str(drv->format_name));\n+        qdict_put_str(opts, \"driver\", drv->format_name);\n \n         if (bs->exact_filename[0]) {\n             /* This may not work for all block protocol drivers (some may\n@@ -4702,7 +4695,7 @@ void bdrv_refresh_filename(BlockDriverState *bs)\n              * needs some special format of the options QDict, it needs to\n              * implement the driver-specific bdrv_refresh_filename() function.\n              */\n-            qdict_put(opts, \"filename\", qstring_from_str(bs->exact_filename));\n+            qdict_put_str(opts, \"filename\", bs->exact_filename);\n         }\n \n         bs->full_open_options = opts;\ndiff --git a/block/blkdebug.c b/block/blkdebug.c\nindex 42b8d80..ffc6f1d 100644\n--- a/block/blkdebug.c\n+++ b/block/blkdebug.c\n@@ -301,7 +301,7 @@ static void blkdebug_parse_filename(const char *filename, QDict *options,\n     if (!strstart(filename, \"blkdebug:\", &filename)) {\n         /* There was no prefix; therefore, all options have to be already\n            present in the QDict (except for the filename) */\n-        qdict_put(options, \"x-image\", qstring_from_str(filename));\n+        qdict_put_str(options, \"x-image\", filename);\n         return;\n     }\n \n@@ -320,7 +320,7 @@ static void blkdebug_parse_filename(const char *filename, QDict *options,\n \n     /* TODO Allow multi-level nesting and set file.filename here */\n     filename = c + 1;\n-    qdict_put(options, \"x-image\", qstring_from_str(filename));\n+    qdict_put_str(options, \"x-image\", filename);\n }\n \n static QemuOptsList runtime_opts = {\n@@ -693,7 +693,7 @@ static void blkdebug_refresh_filename(BlockDriverState *bs, QDict *options)\n     }\n \n     opts = qdict_new();\n-    qdict_put(opts, \"driver\", qstring_from_str(\"blkdebug\"));\n+    qdict_put_str(opts, \"driver\", \"blkdebug\");\n \n     QINCREF(bs->file->bs->full_open_options);\n     qdict_put(opts, \"image\", bs->file->bs->full_open_options);\ndiff --git a/block/blkverify.c b/block/blkverify.c\nindex cc29cd2..6b0a603 100644\n--- a/block/blkverify.c\n+++ b/block/blkverify.c\n@@ -67,7 +67,7 @@ static void blkverify_parse_filename(const char *filename, QDict *options,\n     if (!strstart(filename, \"blkverify:\", &filename)) {\n         /* There was no prefix; therefore, all options have to be already\n            present in the QDict (except for the filename) */\n-        qdict_put(options, \"x-image\", qstring_from_str(filename));\n+        qdict_put_str(options, \"x-image\", filename);\n         return;\n     }\n \n@@ -84,7 +84,7 @@ static void blkverify_parse_filename(const char *filename, QDict *options,\n \n     /* TODO Allow multi-level nesting and set file.filename here */\n     filename = c + 1;\n-    qdict_put(options, \"x-image\", qstring_from_str(filename));\n+    qdict_put_str(options, \"x-image\", filename);\n }\n \n static QemuOptsList runtime_opts = {\n@@ -288,7 +288,7 @@ static void blkverify_refresh_filename(BlockDriverState *bs, QDict *options)\n         && s->test_file->bs->full_open_options)\n     {\n         QDict *opts = qdict_new();\n-        qdict_put(opts, \"driver\", qstring_from_str(\"blkverify\"));\n+        qdict_put_str(opts, \"driver\", \"blkverify\");\n \n         QINCREF(bs->file->bs->full_open_options);\n         qdict_put(opts, \"raw\", bs->file->bs->full_open_options);\ndiff --git a/block/curl.c b/block/curl.c\nindex 2708d57..aa6e8cc 100644\n--- a/block/curl.c\n+++ b/block/curl.c\n@@ -548,7 +548,7 @@ static void curl_clean_state(CURLState *s)\n static void curl_parse_filename(const char *filename, QDict *options,\n                                 Error **errp)\n {\n-    qdict_put(options, CURL_BLOCK_OPT_URL, qstring_from_str(filename));\n+    qdict_put_str(options, CURL_BLOCK_OPT_URL, filename);\n }\n \n static void curl_detach_aio_context(BlockDriverState *bs)\ndiff --git a/block/file-posix.c b/block/file-posix.c\nindex 5370ba0..9431ad1 100644\n--- a/block/file-posix.c\n+++ b/block/file-posix.c\n@@ -377,7 +377,7 @@ static void raw_parse_filename(const char *filename, QDict *options,\n      * function call can be ignored. */\n     strstart(filename, \"file:\", &filename);\n \n-    qdict_put(options, \"filename\", qstring_from_str(filename));\n+    qdict_put_str(options, \"filename\", filename);\n }\n \n static QemuOptsList raw_runtime_opts = {\n@@ -2150,7 +2150,7 @@ static void hdev_parse_filename(const char *filename, QDict *options,\n     /* The prefix is optional, just as for \"file\". */\n     strstart(filename, \"host_device:\", &filename);\n \n-    qdict_put(options, \"filename\", qstring_from_str(filename));\n+    qdict_put_str(options, \"filename\", filename);\n }\n \n static bool hdev_is_sg(BlockDriverState *bs)\n@@ -2239,7 +2239,7 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags,\n             goto hdev_open_Mac_error;\n         }\n \n-        qdict_put(options, \"filename\", qstring_from_str(bsd_path));\n+        qdict_put_str(options, \"filename\", bsd_path);\n \n hdev_open_Mac_error:\n         g_free(mediaType);\n@@ -2449,7 +2449,7 @@ static void cdrom_parse_filename(const char *filename, QDict *options,\n     /* The prefix is optional, just as for \"file\". */\n     strstart(filename, \"host_cdrom:\", &filename);\n \n-    qdict_put(options, \"filename\", qstring_from_str(filename));\n+    qdict_put_str(options, \"filename\", filename);\n }\n #endif\n \ndiff --git a/block/file-win32.c b/block/file-win32.c\nindex 57c4a78..0d455d1 100644\n--- a/block/file-win32.c\n+++ b/block/file-win32.c\n@@ -282,7 +282,7 @@ static void raw_parse_filename(const char *filename, QDict *options,\n      * function call can be ignored. */\n     strstart(filename, \"file:\", &filename);\n \n-    qdict_put(options, \"filename\", qstring_from_str(filename));\n+    qdict_put_str(options, \"filename\", filename);\n }\n \n static QemuOptsList raw_runtime_opts = {\n@@ -669,7 +669,7 @@ static void hdev_parse_filename(const char *filename, QDict *options,\n     /* The prefix is optional, just as for \"file\". */\n     strstart(filename, \"host_device:\", &filename);\n \n-    qdict_put(options, \"filename\", qstring_from_str(filename));\n+    qdict_put_str(options, \"filename\", filename);\n }\n \n static int hdev_open(BlockDriverState *bs, QDict *options, int flags,\ndiff --git a/block/nbd.c b/block/nbd.c\nindex 814ab26d..b3545f5 100644\n--- a/block/nbd.c\n+++ b/block/nbd.c\n@@ -79,7 +79,7 @@ static int nbd_parse_uri(const char *filename, QDict *options)\n     p = uri->path ? uri->path : \"/\";\n     p += strspn(p, \"/\");\n     if (p[0]) {\n-        qdict_put(options, \"export\", qstring_from_str(p));\n+        qdict_put_str(options, \"export\", p);\n     }\n \n     qp = query_params_parse(uri->query);\n@@ -94,9 +94,8 @@ static int nbd_parse_uri(const char *filename, QDict *options)\n             ret = -EINVAL;\n             goto out;\n         }\n-        qdict_put(options, \"server.type\", qstring_from_str(\"unix\"));\n-        qdict_put(options, \"server.path\",\n-                  qstring_from_str(qp->p[0].value));\n+        qdict_put_str(options, \"server.type\", \"unix\");\n+        qdict_put_str(options, \"server.path\", qp->p[0].value);\n     } else {\n         QString *host;\n         char *port_str;\n@@ -115,11 +114,11 @@ static int nbd_parse_uri(const char *filename, QDict *options)\n             host = qstring_from_str(uri->server);\n         }\n \n-        qdict_put(options, \"server.type\", qstring_from_str(\"inet\"));\n+        qdict_put_str(options, \"server.type\", \"inet\");\n         qdict_put(options, \"server.host\", host);\n \n         port_str = g_strdup_printf(\"%d\", uri->port ?: NBD_DEFAULT_PORT);\n-        qdict_put(options, \"server.port\", qstring_from_str(port_str));\n+        qdict_put_str(options, \"server.port\", port_str);\n         g_free(port_str);\n     }\n \n@@ -181,7 +180,7 @@ static void nbd_parse_filename(const char *filename, QDict *options,\n         export_name[0] = 0; /* truncate 'file' */\n         export_name += strlen(EN_OPTSTR);\n \n-        qdict_put(options, \"export\", qstring_from_str(export_name));\n+        qdict_put_str(options, \"export\", export_name);\n     }\n \n     /* extract the host_spec - fail if it's not nbd:... */\n@@ -196,8 +195,8 @@ static void nbd_parse_filename(const char *filename, QDict *options,\n \n     /* are we a UNIX or TCP socket? */\n     if (strstart(host_spec, \"unix:\", &unixpath)) {\n-        qdict_put(options, \"server.type\", qstring_from_str(\"unix\"));\n-        qdict_put(options, \"server.path\", qstring_from_str(unixpath));\n+        qdict_put_str(options, \"server.type\", \"unix\");\n+        qdict_put_str(options, \"server.path\", unixpath);\n     } else {\n         InetSocketAddress *addr = NULL;\n \n@@ -206,9 +205,9 @@ static void nbd_parse_filename(const char *filename, QDict *options,\n             goto out;\n         }\n \n-        qdict_put(options, \"server.type\", qstring_from_str(\"inet\"));\n-        qdict_put(options, \"server.host\", qstring_from_str(addr->host));\n-        qdict_put(options, \"server.port\", qstring_from_str(addr->port));\n+        qdict_put_str(options, \"server.type\", \"inet\");\n+        qdict_put_str(options, \"server.host\", addr->host);\n+        qdict_put_str(options, \"server.port\", addr->port);\n         qapi_free_InetSocketAddress(addr);\n     }\n \n@@ -247,13 +246,13 @@ static bool nbd_process_legacy_socket_options(QDict *output_options,\n             return false;\n         }\n \n-        qdict_put(output_options, \"server.type\", qstring_from_str(\"unix\"));\n-        qdict_put(output_options, \"server.path\", qstring_from_str(path));\n+        qdict_put_str(output_options, \"server.type\", \"unix\");\n+        qdict_put_str(output_options, \"server.path\", path);\n     } else if (host) {\n-        qdict_put(output_options, \"server.type\", qstring_from_str(\"inet\"));\n-        qdict_put(output_options, \"server.host\", qstring_from_str(host));\n-        qdict_put(output_options, \"server.port\",\n-                  qstring_from_str(port ?: stringify(NBD_DEFAULT_PORT)));\n+        qdict_put_str(output_options, \"server.type\", \"inet\");\n+        qdict_put_str(output_options, \"server.host\", host);\n+        qdict_put_str(output_options, \"server.port\",\n+                      port ?: stringify(NBD_DEFAULT_PORT));\n     }\n \n     return true;\n@@ -528,7 +527,7 @@ static void nbd_refresh_filename(BlockDriverState *bs, QDict *options)\n         path = s->saddr->u.q_unix.path;\n     } /* else can't represent as pseudo-filename */\n \n-    qdict_put(opts, \"driver\", qstring_from_str(\"nbd\"));\n+    qdict_put_str(opts, \"driver\", \"nbd\");\n \n     if (path && s->export) {\n         snprintf(bs->exact_filename, sizeof(bs->exact_filename),\n@@ -551,10 +550,10 @@ static void nbd_refresh_filename(BlockDriverState *bs, QDict *options)\n     qdict_put_obj(opts, \"server\", saddr_qdict);\n \n     if (s->export) {\n-        qdict_put(opts, \"export\", qstring_from_str(s->export));\n+        qdict_put_str(opts, \"export\", s->export);\n     }\n     if (s->tlscredsid) {\n-        qdict_put(opts, \"tls-creds\", qstring_from_str(s->tlscredsid));\n+        qdict_put_str(opts, \"tls-creds\", s->tlscredsid);\n     }\n \n     qdict_flatten(opts);\ndiff --git a/block/nfs.c b/block/nfs.c\nindex 0816678..bfeebc1 100644\n--- a/block/nfs.c\n+++ b/block/nfs.c\n@@ -104,9 +104,9 @@ static int nfs_parse_uri(const char *filename, QDict *options, Error **errp)\n         goto out;\n     }\n \n-    qdict_put(options, \"server.host\", qstring_from_str(uri->server));\n-    qdict_put(options, \"server.type\", qstring_from_str(\"inet\"));\n-    qdict_put(options, \"path\", qstring_from_str(uri->path));\n+    qdict_put_str(options, \"server.host\", uri->server);\n+    qdict_put_str(options, \"server.type\", \"inet\");\n+    qdict_put_str(options, \"path\", uri->path);\n \n     for (i = 0; i < qp->n; i++) {\n         unsigned long long val;\n@@ -121,23 +121,17 @@ static int nfs_parse_uri(const char *filename, QDict *options, Error **errp)\n             goto out;\n         }\n         if (!strcmp(qp->p[i].name, \"uid\")) {\n-            qdict_put(options, \"user\",\n-                      qstring_from_str(qp->p[i].value));\n+            qdict_put_str(options, \"user\", qp->p[i].value);\n         } else if (!strcmp(qp->p[i].name, \"gid\")) {\n-            qdict_put(options, \"group\",\n-                      qstring_from_str(qp->p[i].value));\n+            qdict_put_str(options, \"group\", qp->p[i].value);\n         } else if (!strcmp(qp->p[i].name, \"tcp-syncnt\")) {\n-            qdict_put(options, \"tcp-syn-count\",\n-                      qstring_from_str(qp->p[i].value));\n+            qdict_put_str(options, \"tcp-syn-count\", qp->p[i].value);\n         } else if (!strcmp(qp->p[i].name, \"readahead\")) {\n-            qdict_put(options, \"readahead-size\",\n-                      qstring_from_str(qp->p[i].value));\n+            qdict_put_str(options, \"readahead-size\", qp->p[i].value);\n         } else if (!strcmp(qp->p[i].name, \"pagecache\")) {\n-            qdict_put(options, \"page-cache-size\",\n-                      qstring_from_str(qp->p[i].value));\n+            qdict_put_str(options, \"page-cache-size\", qp->p[i].value);\n         } else if (!strcmp(qp->p[i].name, \"debug\")) {\n-            qdict_put(options, \"debug\",\n-                      qstring_from_str(qp->p[i].value));\n+            qdict_put_str(options, \"debug\", qp->p[i].value);\n         } else {\n             error_setg(errp, \"Unknown NFS parameter name: %s\",\n                        qp->p[i].name);\n@@ -811,7 +805,7 @@ static void nfs_refresh_filename(BlockDriverState *bs, QDict *options)\n     QObject *server_qdict;\n     Visitor *ov;\n \n-    qdict_put(opts, \"driver\", qstring_from_str(\"nfs\"));\n+    qdict_put_str(opts, \"driver\", \"nfs\");\n \n     if (client->uid && !client->gid) {\n         snprintf(bs->exact_filename, sizeof(bs->exact_filename),\n@@ -834,28 +828,25 @@ static void nfs_refresh_filename(BlockDriverState *bs, QDict *options)\n     visit_type_NFSServer(ov, NULL, &client->server, &error_abort);\n     visit_complete(ov, &server_qdict);\n     qdict_put_obj(opts, \"server\", server_qdict);\n-    qdict_put(opts, \"path\", qstring_from_str(client->path));\n+    qdict_put_str(opts, \"path\", client->path);\n \n     if (client->uid) {\n-        qdict_put(opts, \"user\", qint_from_int(client->uid));\n+        qdict_put_int(opts, \"user\", client->uid);\n     }\n     if (client->gid) {\n-        qdict_put(opts, \"group\", qint_from_int(client->gid));\n+        qdict_put_int(opts, \"group\", client->gid);\n     }\n     if (client->tcp_syncnt) {\n-        qdict_put(opts, \"tcp-syn-cnt\",\n-                  qint_from_int(client->tcp_syncnt));\n+        qdict_put_int(opts, \"tcp-syn-cnt\", client->tcp_syncnt);\n     }\n     if (client->readahead) {\n-        qdict_put(opts, \"readahead-size\",\n-                  qint_from_int(client->readahead));\n+        qdict_put_int(opts, \"readahead-size\", client->readahead);\n     }\n     if (client->pagecache) {\n-        qdict_put(opts, \"page-cache-size\",\n-                  qint_from_int(client->pagecache));\n+        qdict_put_int(opts, \"page-cache-size\", client->pagecache);\n     }\n     if (client->debug) {\n-        qdict_put(opts, \"debug\", qint_from_int(client->debug));\n+        qdict_put_int(opts, \"debug\", client->debug);\n     }\n \n     visit_free(ov);\ndiff --git a/block/null.c b/block/null.c\nindex b300390..876f909 100644\n--- a/block/null.c\n+++ b/block/null.c\n@@ -232,7 +232,7 @@ static void null_refresh_filename(BlockDriverState *bs, QDict *opts)\n                  bs->drv->format_name);\n     }\n \n-    qdict_put(opts, \"driver\", qstring_from_str(bs->drv->format_name));\n+    qdict_put_str(opts, \"driver\", bs->drv->format_name);\n     bs->full_open_options = opts;\n }\n \ndiff --git a/block/qcow2.c b/block/qcow2.c\nindex 6a92d2e..49c737f 100644\n--- a/block/qcow2.c\n+++ b/block/qcow2.c\n@@ -2265,7 +2265,7 @@ static int qcow2_create2(const char *filename, int64_t total_size,\n      * table)\n      */\n     options = qdict_new();\n-    qdict_put(options, \"driver\", qstring_from_str(\"qcow2\"));\n+    qdict_put_str(options, \"driver\", \"qcow2\");\n     blk = blk_new_open(filename, NULL, options,\n                        BDRV_O_RDWR | BDRV_O_RESIZE | BDRV_O_NO_FLUSH,\n                        &local_err);\n@@ -2327,7 +2327,7 @@ static int qcow2_create2(const char *filename, int64_t total_size,\n \n     /* Reopen the image without BDRV_O_NO_FLUSH to flush it before returning */\n     options = qdict_new();\n-    qdict_put(options, \"driver\", qstring_from_str(\"qcow2\"));\n+    qdict_put_str(options, \"driver\", \"qcow2\");\n     blk = blk_new_open(filename, NULL, options,\n                        BDRV_O_RDWR | BDRV_O_NO_BACKING, &local_err);\n     if (blk == NULL) {\ndiff --git a/block/quorum.c b/block/quorum.c\nindex f7949e2..1b2a8c3 100644\n--- a/block/quorum.c\n+++ b/block/quorum.c\n@@ -1100,10 +1100,10 @@ static void quorum_refresh_filename(BlockDriverState *bs, QDict *options)\n     }\n \n     opts = qdict_new();\n-    qdict_put(opts, \"driver\", qstring_from_str(\"quorum\"));\n-    qdict_put(opts, QUORUM_OPT_VOTE_THRESHOLD, qint_from_int(s->threshold));\n-    qdict_put(opts, QUORUM_OPT_BLKVERIFY, qbool_from_bool(s->is_blkverify));\n-    qdict_put(opts, QUORUM_OPT_REWRITE, qbool_from_bool(s->rewrite_corrupted));\n+    qdict_put_str(opts, \"driver\", \"quorum\");\n+    qdict_put_int(opts, QUORUM_OPT_VOTE_THRESHOLD, s->threshold);\n+    qdict_put_bool(opts, QUORUM_OPT_BLKVERIFY, s->is_blkverify);\n+    qdict_put_bool(opts, QUORUM_OPT_REWRITE, s->rewrite_corrupted);\n     qdict_put(opts, \"children\", children);\n \n     bs->full_open_options = opts;\ndiff --git a/block/rbd.c b/block/rbd.c\nindex 1ceeeb5..2354ffc 100644\n--- a/block/rbd.c\n+++ b/block/rbd.c\n@@ -154,20 +154,20 @@ static void qemu_rbd_parse_filename(const char *filename, QDict *options,\n         goto done;\n     }\n     qemu_rbd_unescape(found_str);\n-    qdict_put(options, \"pool\", qstring_from_str(found_str));\n+    qdict_put_str(options, \"pool\", found_str);\n \n     if (strchr(p, '@')) {\n         found_str = qemu_rbd_next_tok(p, '@', &p);\n         qemu_rbd_unescape(found_str);\n-        qdict_put(options, \"image\", qstring_from_str(found_str));\n+        qdict_put_str(options, \"image\", found_str);\n \n         found_str = qemu_rbd_next_tok(p, ':', &p);\n         qemu_rbd_unescape(found_str);\n-        qdict_put(options, \"snapshot\", qstring_from_str(found_str));\n+        qdict_put_str(options, \"snapshot\", found_str);\n     } else {\n         found_str = qemu_rbd_next_tok(p, ':', &p);\n         qemu_rbd_unescape(found_str);\n-        qdict_put(options, \"image\", qstring_from_str(found_str));\n+        qdict_put_str(options, \"image\", found_str);\n     }\n     if (!p) {\n         goto done;\n@@ -189,9 +189,9 @@ static void qemu_rbd_parse_filename(const char *filename, QDict *options,\n         qemu_rbd_unescape(value);\n \n         if (!strcmp(name, \"conf\")) {\n-            qdict_put(options, \"conf\", qstring_from_str(value));\n+            qdict_put_str(options, \"conf\", value);\n         } else if (!strcmp(name, \"id\")) {\n-            qdict_put(options, \"user\" , qstring_from_str(value));\n+            qdict_put_str(options, \"user\", value);\n         } else {\n             /*\n              * We pass these internally to qemu_rbd_set_keypairs(), so\n@@ -204,8 +204,8 @@ static void qemu_rbd_parse_filename(const char *filename, QDict *options,\n             if (!keypairs) {\n                 keypairs = qlist_new();\n             }\n-            qlist_append(keypairs, qstring_from_str(name));\n-            qlist_append(keypairs, qstring_from_str(value));\n+            qlist_append_str(keypairs, name);\n+            qlist_append_str(keypairs, value);\n         }\n     }\n \ndiff --git a/block/snapshot.c b/block/snapshot.c\nindex 06b1185..a46564e 100644\n--- a/block/snapshot.c\n+++ b/block/snapshot.c\n@@ -200,7 +200,7 @@ int bdrv_snapshot_goto(BlockDriverState *bs,\n \n         qdict_extract_subqdict(options, &file_options, \"file.\");\n         QDECREF(file_options);\n-        qdict_put(options, \"file\", qstring_from_str(bdrv_get_node_name(file)));\n+        qdict_put_str(options, \"file\", bdrv_get_node_name(file));\n \n         drv->bdrv_close(bs);\n         bdrv_unref_child(bs, bs->file);\ndiff --git a/block/ssh.c b/block/ssh.c\nindex 471ba8a..34a2f79 100644\n--- a/block/ssh.c\n+++ b/block/ssh.c\n@@ -227,24 +227,23 @@ static int parse_uri(const char *filename, QDict *options, Error **errp)\n     }\n \n     if(uri->user && strcmp(uri->user, \"\") != 0) {\n-        qdict_put(options, \"user\", qstring_from_str(uri->user));\n+        qdict_put_str(options, \"user\", uri->user);\n     }\n \n-    qdict_put(options, \"server.host\", qstring_from_str(uri->server));\n+    qdict_put_str(options, \"server.host\", uri->server);\n \n     port_str = g_strdup_printf(\"%d\", uri->port ?: 22);\n-    qdict_put(options, \"server.port\", qstring_from_str(port_str));\n+    qdict_put_str(options, \"server.port\", port_str);\n     g_free(port_str);\n \n-    qdict_put(options, \"path\", qstring_from_str(uri->path));\n+    qdict_put_str(options, \"path\", uri->path);\n \n     /* Pick out any query parameters that we understand, and ignore\n      * the rest.\n      */\n     for (i = 0; i < qp->n; ++i) {\n         if (strcmp(qp->p[i].name, \"host_key_check\") == 0) {\n-            qdict_put(options, \"host_key_check\",\n-                      qstring_from_str(qp->p[i].value));\n+            qdict_put_str(options, \"host_key_check\", qp->p[i].value);\n         }\n     }\n \n@@ -574,9 +573,8 @@ static bool ssh_process_legacy_socket_options(QDict *output_opts,\n     }\n \n     if (host) {\n-        qdict_put(output_opts, \"server.host\", qstring_from_str(host));\n-        qdict_put(output_opts, \"server.port\",\n-                  qstring_from_str(port ?: stringify(22)));\n+        qdict_put_str(output_opts, \"server.host\", host);\n+        qdict_put_str(output_opts, \"server.port\", port ?: stringify(22));\n     }\n \n     return true;\ndiff --git a/block/vvfat.c b/block/vvfat.c\nindex af5153d..8b4e4eb 100644\n--- a/block/vvfat.c\n+++ b/block/vvfat.c\n@@ -1057,10 +1057,10 @@ static void vvfat_parse_filename(const char *filename, QDict *options,\n     }\n \n     /* Fill in the options QDict */\n-    qdict_put(options, \"dir\", qstring_from_str(filename));\n-    qdict_put(options, \"fat-type\", qint_from_int(fat_type));\n-    qdict_put(options, \"floppy\", qbool_from_bool(floppy));\n-    qdict_put(options, \"rw\", qbool_from_bool(rw));\n+    qdict_put_str(options, \"dir\", filename);\n+    qdict_put_int(options, \"fat-type\", fat_type);\n+    qdict_put_bool(options, \"floppy\", floppy);\n+    qdict_put_bool(options, \"rw\", rw);\n }\n \n static int vvfat_open(BlockDriverState *bs, QDict *options, int flags,\n@@ -3040,7 +3040,7 @@ static int enable_write_target(BlockDriverState *bs, Error **errp)\n     }\n \n     options = qdict_new();\n-    qdict_put(options, \"write-target.driver\", qstring_from_str(\"qcow\"));\n+    qdict_put_str(options, \"write-target.driver\", \"qcow\");\n     s->qcow = bdrv_open_child(s->qcow_filename, options, \"write-target\", bs,\n                               &child_vvfat_qcow, false, errp);\n     QDECREF(options);\ndiff --git a/blockdev.c b/blockdev.c\nindex 4927914..e2f9c1e 100644\n--- a/blockdev.c\n+++ b/blockdev.c\n@@ -527,7 +527,7 @@ static BlockBackend *blockdev_init(const char *file, QDict *bs_opts,\n             error_setg(errp, \"Cannot specify both 'driver' and 'format'\");\n             goto early_err;\n         }\n-        qdict_put(bs_opts, \"driver\", qstring_from_str(buf));\n+        qdict_put_str(bs_opts, \"driver\", buf);\n     }\n \n     on_write_error = BLOCKDEV_ON_ERROR_ENOSPC;\n@@ -903,10 +903,8 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)\n         copy_on_read = false;\n     }\n \n-    qdict_put(bs_opts, BDRV_OPT_READ_ONLY,\n-              qstring_from_str(read_only ? \"on\" : \"off\"));\n-    qdict_put(bs_opts, \"copy-on-read\",\n-              qstring_from_str(copy_on_read ? \"on\" :\"off\"));\n+    qdict_put_str(bs_opts, BDRV_OPT_READ_ONLY, read_only ? \"on\" : \"off\");\n+    qdict_put_str(bs_opts, \"copy-on-read\", copy_on_read ? \"on\" : \"off\");\n \n     /* Controller type */\n     value = qemu_opt_get(legacy_opts, \"if\");\n@@ -1030,7 +1028,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)\n             new_id = g_strdup_printf(\"%s%s%i\", if_name[type],\n                                      mediastr, unit_id);\n         }\n-        qdict_put(bs_opts, \"id\", qstring_from_str(new_id));\n+        qdict_put_str(bs_opts, \"id\", new_id);\n         g_free(new_id);\n     }\n \n@@ -1067,7 +1065,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)\n             error_report(\"werror is not supported by this bus type\");\n             goto fail;\n         }\n-        qdict_put(bs_opts, \"werror\", qstring_from_str(werror));\n+        qdict_put_str(bs_opts, \"werror\", werror);\n     }\n \n     rerror = qemu_opt_get(legacy_opts, \"rerror\");\n@@ -1077,7 +1075,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)\n             error_report(\"rerror is not supported by this bus type\");\n             goto fail;\n         }\n-        qdict_put(bs_opts, \"rerror\", qstring_from_str(rerror));\n+        qdict_put_str(bs_opts, \"rerror\", rerror);\n     }\n \n     /* Actual block device init: Functionality shared with blockdev-add */\n@@ -1737,10 +1735,9 @@ static void external_snapshot_prepare(BlkActionState *common,\n \n         options = qdict_new();\n         if (s->has_snapshot_node_name) {\n-            qdict_put(options, \"node-name\",\n-                      qstring_from_str(snapshot_node_name));\n+            qdict_put_str(options, \"node-name\", snapshot_node_name);\n         }\n-        qdict_put(options, \"driver\", qstring_from_str(format));\n+        qdict_put_str(options, \"driver\", format);\n \n         flags |= BDRV_O_NO_BACKING;\n     }\n@@ -2579,11 +2576,10 @@ void qmp_blockdev_change_medium(bool has_device, const char *device,\n \n     options = qdict_new();\n     detect_zeroes = blk_get_detect_zeroes_from_root_state(blk);\n-    qdict_put(options, \"detect-zeroes\",\n-              qstring_from_str(detect_zeroes ? \"on\" : \"off\"));\n+    qdict_put_str(options, \"detect-zeroes\", detect_zeroes ? \"on\" : \"off\");\n \n     if (has_format) {\n-        qdict_put(options, \"driver\", qstring_from_str(format));\n+        qdict_put_str(options, \"driver\", format);\n     }\n \n     medium_bs = bdrv_open(filename, NULL, options, bdrv_flags, errp);\n@@ -3251,7 +3247,7 @@ static BlockJob *do_drive_backup(DriveBackup *backup, BlockJobTxn *txn,\n \n     if (backup->format) {\n         options = qdict_new();\n-        qdict_put(options, \"driver\", qstring_from_str(backup->format));\n+        qdict_put_str(options, \"driver\", backup->format);\n     }\n \n     target_bs = bdrv_open(backup->target, NULL, options, flags, errp);\n@@ -3555,10 +3551,10 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)\n \n     options = qdict_new();\n     if (arg->has_node_name) {\n-        qdict_put(options, \"node-name\", qstring_from_str(arg->node_name));\n+        qdict_put_str(options, \"node-name\", arg->node_name);\n     }\n     if (format) {\n-        qdict_put(options, \"driver\", qstring_from_str(format));\n+        qdict_put_str(options, \"driver\", format);\n     }\n \n     /* Mirroring takes care of copy-on-write using the source's backing\ndiff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c\nindex 456a2d5..47b2ca1 100644\n--- a/hw/block/xen_disk.c\n+++ b/hw/block/xen_disk.c\n@@ -1082,7 +1082,7 @@ static int blk_connect(struct XenDevice *xendev)\n \n         if (strcmp(blkdev->fileproto, \"<unset>\")) {\n             options = qdict_new();\n-            qdict_put(options, \"driver\", qstring_from_str(blkdev->fileproto));\n+            qdict_put_str(options, \"driver\", blkdev->fileproto);\n         }\n \n         /* setup via xenbus -> create new block driver instance */\ndiff --git a/hw/usb/xen-usb.c b/hw/usb/xen-usb.c\nindex 8e676e6..6659415 100644\n--- a/hw/usb/xen-usb.c\n+++ b/hw/usb/xen-usb.c\n@@ -746,16 +746,16 @@ static void usbback_portid_add(struct usbback_info *usbif, unsigned port,\n     portname++;\n \n     qdict = qdict_new();\n-    qdict_put(qdict, \"driver\", qstring_from_str(\"usb-host\"));\n+    qdict_put_str(qdict, \"driver\", \"usb-host\");\n     tmp = g_strdup_printf(\"%s.0\", usbif->xendev.qdev.id);\n-    qdict_put(qdict, \"bus\", qstring_from_str(tmp));\n+    qdict_put_str(qdict, \"bus\", tmp);\n     g_free(tmp);\n     tmp = g_strdup_printf(\"%s-%u\", usbif->xendev.qdev.id, port);\n-    qdict_put(qdict, \"id\", qstring_from_str(tmp));\n+    qdict_put_str(qdict, \"id\", tmp);\n     g_free(tmp);\n-    qdict_put(qdict, \"port\", qint_from_int(port));\n-    qdict_put(qdict, \"hostbus\", qint_from_int(atoi(busid)));\n-    qdict_put(qdict, \"hostport\", qstring_from_str(portname));\n+    qdict_put_int(qdict, \"port\", port);\n+    qdict_put_int(qdict, \"hostbus\", atoi(busid));\n+    qdict_put_str(qdict, \"hostport\", portname);\n     opts = qemu_opts_from_qdict(qemu_find_opts(\"device\"), qdict, &local_err);\n     if (local_err) {\n         goto err;\ndiff --git a/monitor.c b/monitor.c\nindex 2799a37..957361c 100644\n--- a/monitor.c\n+++ b/monitor.c\n@@ -2676,7 +2676,7 @@ static QDict *monitor_parse_arguments(Monitor *mon,\n                     }\n                     goto fail;\n                 }\n-                qdict_put(qdict, key, qstring_from_str(buf));\n+                qdict_put_str(qdict, key, buf);\n             }\n             break;\n         case 'O':\n@@ -2778,9 +2778,9 @@ static QDict *monitor_parse_arguments(Monitor *mon,\n                         size = -1;\n                     }\n                 }\n-                qdict_put(qdict, \"count\", qint_from_int(count));\n-                qdict_put(qdict, \"format\", qint_from_int(format));\n-                qdict_put(qdict, \"size\", qint_from_int(size));\n+                qdict_put_int(qdict, \"count\", count);\n+                qdict_put_int(qdict, \"format\", format);\n+                qdict_put_int(qdict, \"size\", size);\n             }\n             break;\n         case 'i':\n@@ -2823,7 +2823,7 @@ static QDict *monitor_parse_arguments(Monitor *mon,\n                     }\n                     val <<= 20;\n                 }\n-                qdict_put(qdict, key, qint_from_int(val));\n+                qdict_put_int(qdict, key, val);\n             }\n             break;\n         case 'o':\n@@ -2846,7 +2846,7 @@ static QDict *monitor_parse_arguments(Monitor *mon,\n                     monitor_printf(mon, \"invalid size\\n\");\n                     goto fail;\n                 }\n-                qdict_put(qdict, key, qint_from_int(val));\n+                qdict_put_int(qdict, key, val);\n                 p = end;\n             }\n             break;\n@@ -2902,7 +2902,7 @@ static QDict *monitor_parse_arguments(Monitor *mon,\n                     monitor_printf(mon, \"Expected 'on' or 'off'\\n\");\n                     goto fail;\n                 }\n-                qdict_put(qdict, key, qbool_from_bool(val));\n+                qdict_put_bool(qdict, key, val);\n             }\n             break;\n         case '-':\n@@ -2933,7 +2933,7 @@ static QDict *monitor_parse_arguments(Monitor *mon,\n                     } else {\n                         /* has option */\n                         p++;\n-                        qdict_put(qdict, key, qbool_from_bool(true));\n+                        qdict_put_bool(qdict, key, true);\n                     }\n                 }\n             }\n@@ -2959,7 +2959,7 @@ static QDict *monitor_parse_arguments(Monitor *mon,\n                                    cmd->name);\n                     goto fail;\n                 }\n-                qdict_put(qdict, key, qstring_from_str(p));\n+                qdict_put_str(qdict, key, p);\n                 p += len;\n             }\n             break;\n@@ -3738,9 +3738,8 @@ static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)\n                     QapiErrorClass_lookup[ERROR_CLASS_COMMAND_NOT_FOUND])) {\n             /* Provide a more useful error message */\n             qdict_del(qdict, \"desc\");\n-            qdict_put(qdict, \"desc\",\n-                      qstring_from_str(\"Expecting capabilities negotiation\"\n-                                       \" with 'qmp_capabilities'\"));\n+            qdict_put_str(qdict, \"desc\", \"Expecting capabilities negotiation\"\n+                          \" with 'qmp_capabilities'\");\n         }\n     }\n \ndiff --git a/qapi/qmp-event.c b/qapi/qmp-event.c\nindex 802ede4..ba3029c 100644\n--- a/qapi/qmp-event.c\n+++ b/qapi/qmp-event.c\n@@ -51,7 +51,7 @@ static void timestamp_put(QDict *qdict)\n QDict *qmp_event_build_dict(const char *event_name)\n {\n     QDict *dict = qdict_new();\n-    qdict_put(dict, \"event\", qstring_from_str(event_name));\n+    qdict_put_str(dict, \"event\", event_name);\n     timestamp_put(dict);\n     return dict;\n }\ndiff --git a/qemu-img.c b/qemu-img.c\nindex 4b2d59a..2e61561 100644\n--- a/qemu-img.c\n+++ b/qemu-img.c\n@@ -313,7 +313,7 @@ static BlockBackend *img_open_file(const char *filename,\n \n     if (fmt) {\n         options = qdict_new();\n-        qdict_put(options, \"driver\", qstring_from_str(fmt));\n+        qdict_put_str(options, \"driver\", fmt);\n     }\n \n     blk = blk_new_open(filename, NULL, options, flags, &local_err);\n@@ -3162,7 +3162,7 @@ static int img_rebase(int argc, char **argv)\n \n         if (bs->backing_format[0] != '\\0') {\n             options = qdict_new();\n-            qdict_put(options, \"driver\", qstring_from_str(bs->backing_format));\n+            qdict_put_str(options, \"driver\", bs->backing_format);\n         }\n \n         bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name));\n@@ -3179,7 +3179,7 @@ static int img_rebase(int argc, char **argv)\n         if (out_baseimg[0]) {\n             if (out_basefmt) {\n                 options = qdict_new();\n-                qdict_put(options, \"driver\", qstring_from_str(out_basefmt));\n+                qdict_put_str(options, \"driver\", out_basefmt);\n             } else {\n                 options = NULL;\n             }\ndiff --git a/qemu-io.c b/qemu-io.c\nindex 427cbae..ed0e2dc 100644\n--- a/qemu-io.c\n+++ b/qemu-io.c\n@@ -601,7 +601,7 @@ int main(int argc, char **argv)\n         } else {\n             if (format) {\n                 opts = qdict_new();\n-                qdict_put(opts, \"driver\", qstring_from_str(format));\n+                qdict_put_str(opts, \"driver\", format);\n             }\n             if (openfile(argv[optind], flags, writethrough, opts)) {\n                 exit(1);\ndiff --git a/qemu-nbd.c b/qemu-nbd.c\nindex e080fb7..e4f00e2 100644\n--- a/qemu-nbd.c\n+++ b/qemu-nbd.c\n@@ -959,7 +959,7 @@ int main(int argc, char **argv)\n     } else {\n         if (fmt) {\n             options = qdict_new();\n-            qdict_put(options, \"driver\", qstring_from_str(fmt));\n+            qdict_put_str(options, \"driver\", fmt);\n         }\n         blk = blk_new_open(srcpath, NULL, options, flags, &local_err);\n     }\ndiff --git a/qobject/qdict.c b/qobject/qdict.c\nindex 291eef1..88e2ecd 100644\n--- a/qobject/qdict.c\n+++ b/qobject/qdict.c\n@@ -463,7 +463,7 @@ void qdict_set_default_str(QDict *dst, const char *key, const char *val)\n         return;\n     }\n \n-    qdict_put(dst, key, qstring_from_str(val));\n+    qdict_put_str(dst, key, val);\n }\n \n static void qdict_flatten_qdict(QDict *qdict, QDict *target,\ndiff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c\nindex ce461cc..8d27363 100644\n--- a/target/s390x/cpu_models.c\n+++ b/target/s390x/cpu_models.c\n@@ -376,12 +376,12 @@ static void cpu_model_from_info(S390CPUModel *model, const CpuModelInfo *info,\n \n static void qdict_add_disabled_feat(const char *name, void *opaque)\n {\n-    qdict_put(opaque, name, qbool_from_bool(false));\n+    qdict_put_bool(opaque, name, false);\n }\n \n static void qdict_add_enabled_feat(const char *name, void *opaque)\n {\n-    qdict_put(opaque, name, qbool_from_bool(true));\n+    qdict_put_bool(opaque, name, true);\n }\n \n /* convert S390CPUDef into a static CpuModelInfo */\ndiff --git a/tests/check-qdict.c b/tests/check-qdict.c\nindex 9cdc985..3effca5 100644\n--- a/tests/check-qdict.c\n+++ b/tests/check-qdict.c\n@@ -47,7 +47,7 @@ static void qdict_put_obj_test(void)\n     qdict = qdict_new();\n \n     // key \"\" will have tdb hash 12345\n-    qdict_put(qdict, \"\", qint_from_int(num));\n+    qdict_put_int(qdict, \"\", num);\n \n     g_assert(qdict_size(qdict) == 1);\n     ent = QLIST_FIRST(&qdict->table[12345 % QDICT_BUCKET_MAX]);\n@@ -66,8 +66,8 @@ static void qdict_destroy_simple_test(void)\n     QDict *qdict;\n \n     qdict = qdict_new();\n-    qdict_put(qdict, \"num\", qint_from_int(0));\n-    qdict_put(qdict, \"str\", qstring_from_str(\"foo\"));\n+    qdict_put_int(qdict, \"num\", 0);\n+    qdict_put_str(qdict, \"str\", \"foo\");\n \n     QDECREF(qdict);\n }\n@@ -80,7 +80,7 @@ static void qdict_get_test(void)\n     const char *key = \"test\";\n     QDict *tests_dict = qdict_new();\n \n-    qdict_put(tests_dict, key, qint_from_int(value));\n+    qdict_put_int(tests_dict, key, value);\n \n     obj = qdict_get(tests_dict, key);\n     g_assert(obj != NULL);\n@@ -98,7 +98,7 @@ static void qdict_get_int_test(void)\n     const char *key = \"int\";\n     QDict *tests_dict = qdict_new();\n \n-    qdict_put(tests_dict, key, qint_from_int(value));\n+    qdict_put_int(tests_dict, key, value);\n \n     ret = qdict_get_int(tests_dict, key);\n     g_assert(ret == value);\n@@ -113,7 +113,7 @@ static void qdict_get_try_int_test(void)\n     const char *key = \"int\";\n     QDict *tests_dict = qdict_new();\n \n-    qdict_put(tests_dict, key, qint_from_int(value));\n+    qdict_put_int(tests_dict, key, value);\n \n     ret = qdict_get_try_int(tests_dict, key, 0);\n     g_assert(ret == value);\n@@ -128,7 +128,7 @@ static void qdict_get_str_test(void)\n     const char *str = \"string\";\n     QDict *tests_dict = qdict_new();\n \n-    qdict_put(tests_dict, key, qstring_from_str(str));\n+    qdict_put_str(tests_dict, key, str);\n \n     p = qdict_get_str(tests_dict, key);\n     g_assert(p != NULL);\n@@ -144,7 +144,7 @@ static void qdict_get_try_str_test(void)\n     const char *str = \"string\";\n     QDict *tests_dict = qdict_new();\n \n-    qdict_put(tests_dict, key, qstring_from_str(str));\n+    qdict_put_str(tests_dict, key, str);\n \n     p = qdict_get_try_str(tests_dict, key);\n     g_assert(p != NULL);\n@@ -188,7 +188,7 @@ static void qdict_haskey_test(void)\n     const char *key = \"test\";\n     QDict *tests_dict = qdict_new();\n \n-    qdict_put(tests_dict, key, qint_from_int(0));\n+    qdict_put_int(tests_dict, key, 0);\n     g_assert(qdict_haskey(tests_dict, key) == 1);\n \n     QDECREF(tests_dict);\n@@ -199,7 +199,7 @@ static void qdict_del_test(void)\n     const char *key = \"key test\";\n     QDict *tests_dict = qdict_new();\n \n-    qdict_put(tests_dict, key, qstring_from_str(\"foo\"));\n+    qdict_put_str(tests_dict, key, \"foo\");\n     g_assert(qdict_size(tests_dict) == 1);\n \n     qdict_del(tests_dict, key);\n@@ -226,9 +226,9 @@ static void qdict_iterapi_test(void)\n \n     g_assert(qdict_first(tests_dict) == NULL);\n \n-    qdict_put(tests_dict, \"key1\", qint_from_int(1));\n-    qdict_put(tests_dict, \"key2\", qint_from_int(2));\n-    qdict_put(tests_dict, \"key3\", qint_from_int(3));\n+    qdict_put_int(tests_dict, \"key1\", 1);\n+    qdict_put_int(tests_dict, \"key2\", 2);\n+    qdict_put_int(tests_dict, \"key3\", 3);\n \n     count = 0;\n     for (ent = qdict_first(tests_dict); ent; ent = qdict_next(tests_dict, ent)){\n@@ -294,20 +294,20 @@ static void qdict_flatten_test(void)\n      * }\n      */\n \n-    qdict_put(dict1, \"a\", qint_from_int(0));\n-    qdict_put(dict1, \"b\", qint_from_int(1));\n+    qdict_put_int(dict1, \"a\", 0);\n+    qdict_put_int(dict1, \"b\", 1);\n \n-    qlist_append(list1, qint_from_int(23));\n-    qlist_append(list1, qint_from_int(66));\n+    qlist_append_int(list1, 23);\n+    qlist_append_int(list1, 66);\n     qlist_append(list1, dict1);\n-    qlist_append(list2, qint_from_int(42));\n+    qlist_append_int(list2, 42);\n     qlist_append(list2, list1);\n \n-    qdict_put(dict2, \"c\", qint_from_int(2));\n-    qdict_put(dict2, \"d\", qint_from_int(3));\n+    qdict_put_int(dict2, \"c\", 2);\n+    qdict_put_int(dict2, \"d\", 3);\n     qdict_put(dict3, \"e\", list2);\n     qdict_put(dict3, \"f\", dict2);\n-    qdict_put(dict3, \"g\", qint_from_int(4));\n+    qdict_put_int(dict3, \"g\", 4);\n \n     qdict_flatten(dict3);\n \n@@ -369,12 +369,12 @@ static void qdict_array_split_test(void)\n      * This example is given in the comment of qdict_array_split().\n      */\n \n-    qdict_put(test_dict, \"1.x\", qint_from_int(0));\n-    qdict_put(test_dict, \"4.y\", qint_from_int(1));\n-    qdict_put(test_dict, \"0.a\", qint_from_int(42));\n-    qdict_put(test_dict, \"o.o\", qint_from_int(7));\n-    qdict_put(test_dict, \"0.b\", qint_from_int(23));\n-    qdict_put(test_dict, \"2\", qint_from_int(66));\n+    qdict_put_int(test_dict, \"1.x\", 0);\n+    qdict_put_int(test_dict, \"4.y\", 1);\n+    qdict_put_int(test_dict, \"0.a\", 42);\n+    qdict_put_int(test_dict, \"o.o\", 7);\n+    qdict_put_int(test_dict, \"0.b\", 23);\n+    qdict_put_int(test_dict, \"2\", 66);\n \n     qdict_array_split(test_dict, &test_list);\n \n@@ -441,9 +441,9 @@ static void qdict_array_split_test(void)\n \n     test_dict = qdict_new();\n \n-    qdict_put(test_dict, \"0\", qint_from_int(42));\n-    qdict_put(test_dict, \"1\", qint_from_int(23));\n-    qdict_put(test_dict, \"1.x\", qint_from_int(84));\n+    qdict_put_int(test_dict, \"0\", 42);\n+    qdict_put_int(test_dict, \"1\", 23);\n+    qdict_put_int(test_dict, \"1.x\", 84);\n \n     qdict_array_split(test_dict, &test_list);\n \n@@ -472,38 +472,38 @@ static void qdict_array_entries_test(void)\n \n     g_assert_cmpint(qdict_array_entries(dict, \"foo.\"), ==, 0);\n \n-    qdict_put(dict, \"bar\", qint_from_int(0));\n-    qdict_put(dict, \"baz.0\", qint_from_int(0));\n+    qdict_put_int(dict, \"bar\", 0);\n+    qdict_put_int(dict, \"baz.0\", 0);\n     g_assert_cmpint(qdict_array_entries(dict, \"foo.\"), ==, 0);\n \n-    qdict_put(dict, \"foo.1\", qint_from_int(0));\n+    qdict_put_int(dict, \"foo.1\", 0);\n     g_assert_cmpint(qdict_array_entries(dict, \"foo.\"), ==, -EINVAL);\n-    qdict_put(dict, \"foo.0\", qint_from_int(0));\n+    qdict_put_int(dict, \"foo.0\", 0);\n     g_assert_cmpint(qdict_array_entries(dict, \"foo.\"), ==, 2);\n-    qdict_put(dict, \"foo.bar\", qint_from_int(0));\n+    qdict_put_int(dict, \"foo.bar\", 0);\n     g_assert_cmpint(qdict_array_entries(dict, \"foo.\"), ==, -EINVAL);\n     qdict_del(dict, \"foo.bar\");\n \n-    qdict_put(dict, \"foo.2.a\", qint_from_int(0));\n-    qdict_put(dict, \"foo.2.b\", qint_from_int(0));\n-    qdict_put(dict, \"foo.2.c\", qint_from_int(0));\n+    qdict_put_int(dict, \"foo.2.a\", 0);\n+    qdict_put_int(dict, \"foo.2.b\", 0);\n+    qdict_put_int(dict, \"foo.2.c\", 0);\n     g_assert_cmpint(qdict_array_entries(dict, \"foo.\"), ==, 3);\n     g_assert_cmpint(qdict_array_entries(dict, \"\"), ==, -EINVAL);\n \n     QDECREF(dict);\n \n     dict = qdict_new();\n-    qdict_put(dict, \"1\", qint_from_int(0));\n+    qdict_put_int(dict, \"1\", 0);\n     g_assert_cmpint(qdict_array_entries(dict, \"\"), ==, -EINVAL);\n-    qdict_put(dict, \"0\", qint_from_int(0));\n+    qdict_put_int(dict, \"0\", 0);\n     g_assert_cmpint(qdict_array_entries(dict, \"\"), ==, 2);\n-    qdict_put(dict, \"bar\", qint_from_int(0));\n+    qdict_put_int(dict, \"bar\", 0);\n     g_assert_cmpint(qdict_array_entries(dict, \"\"), ==, -EINVAL);\n     qdict_del(dict, \"bar\");\n \n-    qdict_put(dict, \"2.a\", qint_from_int(0));\n-    qdict_put(dict, \"2.b\", qint_from_int(0));\n-    qdict_put(dict, \"2.c\", qint_from_int(0));\n+    qdict_put_int(dict, \"2.a\", 0);\n+    qdict_put_int(dict, \"2.b\", 0);\n+    qdict_put_int(dict, \"2.c\", 0);\n     g_assert_cmpint(qdict_array_entries(dict, \"\"), ==, 3);\n \n     QDECREF(dict);\n@@ -529,7 +529,7 @@ static void qdict_join_test(void)\n \n         /* First iteration: Test movement */\n         /* Second iteration: Test empty source and non-empty destination */\n-        qdict_put(dict2, \"foo\", qint_from_int(42));\n+        qdict_put_int(dict2, \"foo\", 42);\n \n         for (i = 0; i < 2; i++) {\n             qdict_join(dict1, dict2, overwrite);\n@@ -541,7 +541,7 @@ static void qdict_join_test(void)\n         }\n \n         /* Test non-empty source and destination without conflict */\n-        qdict_put(dict2, \"bar\", qint_from_int(23));\n+        qdict_put_int(dict2, \"bar\", 23);\n \n         qdict_join(dict1, dict2, overwrite);\n \n@@ -552,7 +552,7 @@ static void qdict_join_test(void)\n         g_assert(qdict_get_int(dict1, \"bar\") == 23);\n \n         /* Test conflict */\n-        qdict_put(dict2, \"foo\", qint_from_int(84));\n+        qdict_put_int(dict2, \"foo\", 84);\n \n         qdict_join(dict1, dict2, overwrite);\n \n@@ -594,15 +594,15 @@ static void qdict_crumple_test_recursive(void)\n     QList *rules;\n \n     src = qdict_new();\n-    qdict_put(src, \"vnc.listen.addr\", qstring_from_str(\"127.0.0.1\"));\n-    qdict_put(src, \"vnc.listen.port\", qstring_from_str(\"5901\"));\n-    qdict_put(src, \"vnc.acl.rules.0.match\", qstring_from_str(\"fred\"));\n-    qdict_put(src, \"vnc.acl.rules.0.policy\", qstring_from_str(\"allow\"));\n-    qdict_put(src, \"vnc.acl.rules.1.match\", qstring_from_str(\"bob\"));\n-    qdict_put(src, \"vnc.acl.rules.1.policy\", qstring_from_str(\"deny\"));\n-    qdict_put(src, \"vnc.acl.default\", qstring_from_str(\"deny\"));\n-    qdict_put(src, \"vnc.acl..name\", qstring_from_str(\"acl0\"));\n-    qdict_put(src, \"vnc.acl.rule..name\", qstring_from_str(\"acl0\"));\n+    qdict_put_str(src, \"vnc.listen.addr\", \"127.0.0.1\");\n+    qdict_put_str(src, \"vnc.listen.port\", \"5901\");\n+    qdict_put_str(src, \"vnc.acl.rules.0.match\", \"fred\");\n+    qdict_put_str(src, \"vnc.acl.rules.0.policy\", \"allow\");\n+    qdict_put_str(src, \"vnc.acl.rules.1.match\", \"bob\");\n+    qdict_put_str(src, \"vnc.acl.rules.1.policy\", \"deny\");\n+    qdict_put_str(src, \"vnc.acl.default\", \"deny\");\n+    qdict_put_str(src, \"vnc.acl..name\", \"acl0\");\n+    qdict_put_str(src, \"vnc.acl.rule..name\", \"acl0\");\n \n     dst = qobject_to_qdict(qdict_crumple(src, &error_abort));\n     g_assert(dst);\n@@ -669,8 +669,8 @@ static void qdict_crumple_test_bad_inputs(void)\n \n     src = qdict_new();\n     /* rule.0 can't be both a string and a dict */\n-    qdict_put(src, \"rule.0\", qstring_from_str(\"fred\"));\n-    qdict_put(src, \"rule.0.policy\", qstring_from_str(\"allow\"));\n+    qdict_put_str(src, \"rule.0\", \"fred\");\n+    qdict_put_str(src, \"rule.0.policy\", \"allow\");\n \n     g_assert(qdict_crumple(src, &error) == NULL);\n     g_assert(error != NULL);\n@@ -680,8 +680,8 @@ static void qdict_crumple_test_bad_inputs(void)\n \n     src = qdict_new();\n     /* rule can't be both a list and a dict */\n-    qdict_put(src, \"rule.0\", qstring_from_str(\"fred\"));\n-    qdict_put(src, \"rule.a\", qstring_from_str(\"allow\"));\n+    qdict_put_str(src, \"rule.0\", \"fred\");\n+    qdict_put_str(src, \"rule.a\", \"allow\");\n \n     g_assert(qdict_crumple(src, &error) == NULL);\n     g_assert(error != NULL);\n@@ -692,7 +692,7 @@ static void qdict_crumple_test_bad_inputs(void)\n     src = qdict_new();\n     /* The input should be flat, ie no dicts or lists */\n     qdict_put(src, \"rule.a\", qdict_new());\n-    qdict_put(src, \"rule.b\", qstring_from_str(\"allow\"));\n+    qdict_put_str(src, \"rule.b\", \"allow\");\n \n     g_assert(qdict_crumple(src, &error) == NULL);\n     g_assert(error != NULL);\n@@ -702,8 +702,8 @@ static void qdict_crumple_test_bad_inputs(void)\n \n     src = qdict_new();\n     /* List indexes must not have gaps */\n-    qdict_put(src, \"rule.0\", qstring_from_str(\"deny\"));\n-    qdict_put(src, \"rule.3\", qstring_from_str(\"allow\"));\n+    qdict_put_str(src, \"rule.0\", \"deny\");\n+    qdict_put_str(src, \"rule.3\", \"allow\");\n \n     g_assert(qdict_crumple(src, &error) == NULL);\n     g_assert(error != NULL);\n@@ -713,8 +713,8 @@ static void qdict_crumple_test_bad_inputs(void)\n \n     src = qdict_new();\n     /* List indexes must be in %zu format */\n-    qdict_put(src, \"rule.0\", qstring_from_str(\"deny\"));\n-    qdict_put(src, \"rule.+1\", qstring_from_str(\"allow\"));\n+    qdict_put_str(src, \"rule.0\", \"deny\");\n+    qdict_put_str(src, \"rule.+1\", \"allow\");\n \n     g_assert(qdict_crumple(src, &error) == NULL);\n     g_assert(error != NULL);\n@@ -733,8 +733,8 @@ static void qdict_put_exists_test(void)\n     const char *key = \"exists\";\n     QDict *tests_dict = qdict_new();\n \n-    qdict_put(tests_dict, key, qint_from_int(1));\n-    qdict_put(tests_dict, key, qint_from_int(2));\n+    qdict_put_int(tests_dict, key, 1);\n+    qdict_put_int(tests_dict, key, 2);\n \n     value = qdict_get_int(tests_dict, key);\n     g_assert(value == 2);\ndiff --git a/tests/check-qlist.c b/tests/check-qlist.c\nindex e16da5e..4983867 100644\n--- a/tests/check-qlist.c\n+++ b/tests/check-qlist.c\n@@ -74,7 +74,7 @@ static void qlist_destroy_test(void)\n     qlist = qlist_new();\n \n     for (i = 0; i < 42; i++)\n-        qlist_append(qlist, qint_from_int(i));\n+        qlist_append_int(qlist, i);\n \n     QDECREF(qlist);\n }\n@@ -103,7 +103,7 @@ static void qlist_iter_test(void)\n     qlist = qlist_new();\n \n     for (i = 0; i < iter_max; i++)\n-        qlist_append(qlist, qint_from_int(i));\n+        qlist_append_int(qlist, i);\n \n     iter_called = 0;\n     qlist_iter(qlist, iter_func, NULL);\ndiff --git a/tests/device-introspect-test.c b/tests/device-introspect-test.c\nindex c5637cc..b1abb2a 100644\n--- a/tests/device-introspect-test.c\n+++ b/tests/device-introspect-test.c\n@@ -32,9 +32,9 @@ static QList *qom_list_types(const char *implements, bool abstract)\n     QList *ret;\n     QDict *args = qdict_new();\n \n-    qdict_put(args, \"abstract\", qbool_from_bool(abstract));\n+    qdict_put_bool(args, \"abstract\", abstract);\n     if (implements) {\n-        qdict_put(args, \"implements\", qstring_from_str(implements));\n+        qdict_put_str(args, \"implements\", implements);\n     }\n     resp = qmp(\"{'execute': 'qom-list-types',\"\n                \" 'arguments': %p }\", args);\ndiff --git a/tests/test-qemu-opts.c b/tests/test-qemu-opts.c\nindex 0ad74b4..cc1bb1a 100644\n--- a/tests/test-qemu-opts.c\n+++ b/tests/test-qemu-opts.c\n@@ -299,7 +299,7 @@ static void test_qemu_opt_get_size(void)\n     dict = qdict_new();\n     g_assert(dict != NULL);\n \n-    qdict_put(dict, \"size1\", qstring_from_str(\"10\"));\n+    qdict_put_str(dict, \"size1\", \"10\");\n \n     qemu_opts_absorb_qdict(opts, dict, &error_abort);\n     g_assert(error_abort == NULL);\n@@ -309,7 +309,7 @@ static void test_qemu_opt_get_size(void)\n     g_assert(opt == 10);\n \n     /* reset value */\n-    qdict_put(dict, \"size1\", qstring_from_str(\"15\"));\n+    qdict_put_str(dict, \"size1\", \"15\");\n \n     qemu_opts_absorb_qdict(opts, dict, &error_abort);\n     g_assert(error_abort == NULL);\ndiff --git a/tests/test-qmp-commands.c b/tests/test-qmp-commands.c\nindex ac3fd03..acdded4 100644\n--- a/tests/test-qmp-commands.c\n+++ b/tests/test-qmp-commands.c\n@@ -94,7 +94,7 @@ static void test_dispatch_cmd(void)\n     QDict *req = qdict_new();\n     QObject *resp;\n \n-    qdict_put(req, \"execute\", qstring_from_str(\"user_def_cmd\"));\n+    qdict_put_str(req, \"execute\", \"user_def_cmd\");\n \n     resp = qmp_dispatch(&qmp_commands, QOBJECT(req));\n     assert(resp != NULL);\n@@ -111,7 +111,7 @@ static void test_dispatch_cmd_failure(void)\n     QDict *args = qdict_new();\n     QObject *resp;\n \n-    qdict_put(req, \"execute\", qstring_from_str(\"user_def_cmd2\"));\n+    qdict_put_str(req, \"execute\", \"user_def_cmd2\");\n \n     resp = qmp_dispatch(&qmp_commands, QOBJECT(req));\n     assert(resp != NULL);\n@@ -122,10 +122,10 @@ static void test_dispatch_cmd_failure(void)\n \n     /* check that with extra arguments it throws an error */\n     req = qdict_new();\n-    qdict_put(args, \"a\", qint_from_int(66));\n+    qdict_put_int(args, \"a\", 66);\n     qdict_put(req, \"arguments\", args);\n \n-    qdict_put(req, \"execute\", qstring_from_str(\"user_def_cmd\"));\n+    qdict_put_str(req, \"execute\", \"user_def_cmd\");\n \n     resp = qmp_dispatch(&qmp_commands, QOBJECT(req));\n     assert(resp != NULL);\n@@ -164,14 +164,14 @@ static void test_dispatch_cmd_io(void)\n     QDict *ret_dict_dict2, *ret_dict_dict2_userdef;\n     QInt *ret3;\n \n-    qdict_put(ud1a, \"integer\", qint_from_int(42));\n-    qdict_put(ud1a, \"string\", qstring_from_str(\"hello\"));\n-    qdict_put(ud1b, \"integer\", qint_from_int(422));\n-    qdict_put(ud1b, \"string\", qstring_from_str(\"hello2\"));\n+    qdict_put_int(ud1a, \"integer\", 42);\n+    qdict_put_str(ud1a, \"string\", \"hello\");\n+    qdict_put_int(ud1b, \"integer\", 422);\n+    qdict_put_str(ud1b, \"string\", \"hello2\");\n     qdict_put(args, \"ud1a\", ud1a);\n     qdict_put(args, \"ud1b\", ud1b);\n     qdict_put(req, \"arguments\", args);\n-    qdict_put(req, \"execute\", qstring_from_str(\"user_def_cmd2\"));\n+    qdict_put_str(req, \"execute\", \"user_def_cmd2\");\n \n     ret = qobject_to_qdict(test_qmp_dispatch(req));\n \n@@ -190,9 +190,9 @@ static void test_dispatch_cmd_io(void)\n     assert(!strcmp(qdict_get_str(ret_dict_dict2, \"string\"), \"blah4\"));\n     QDECREF(ret);\n \n-    qdict_put(args3, \"a\", qint_from_int(66));\n+    qdict_put_int(args3, \"a\", 66);\n     qdict_put(req, \"arguments\", args3);\n-    qdict_put(req, \"execute\", qstring_from_str(\"guest-get-time\"));\n+    qdict_put_str(req, \"execute\", \"guest-get-time\");\n \n     ret3 = qobject_to_qint(test_qmp_dispatch(req));\n     assert(qint_get_int(ret3) == 66);\n@@ -244,7 +244,7 @@ static void test_dealloc_partial(void)\n         Visitor *v;\n \n         ud2_dict = qdict_new();\n-        qdict_put(ud2_dict, \"string0\", qstring_from_str(text));\n+        qdict_put_str(ud2_dict, \"string0\", text);\n \n         v = qobject_input_visitor_new(QOBJECT(ud2_dict));\n         visit_type_UserDefTwo(v, NULL, &ud2, &err);\ndiff --git a/tests/test-qmp-event.c b/tests/test-qmp-event.c\nindex 7bb621b..4c0f096 100644\n--- a/tests/test-qmp-event.c\n+++ b/tests/test-qmp-event.c\n@@ -153,7 +153,7 @@ static void test_event_a(TestEventData *data,\n {\n     QDict *d;\n     d = data->expect;\n-    qdict_put(d, \"event\", qstring_from_str(\"EVENT_A\"));\n+    qdict_put_str(d, \"event\", \"EVENT_A\");\n     qapi_event_send_event_a(&error_abort);\n }\n \n@@ -162,7 +162,7 @@ static void test_event_b(TestEventData *data,\n {\n     QDict *d;\n     d = data->expect;\n-    qdict_put(d, \"event\", qstring_from_str(\"EVENT_B\"));\n+    qdict_put_str(d, \"event\", \"EVENT_B\");\n     qapi_event_send_event_b(&error_abort);\n }\n \n@@ -177,16 +177,16 @@ static void test_event_c(TestEventData *data,\n     b.has_enum1 = false;\n \n     d_b = qdict_new();\n-    qdict_put(d_b, \"integer\", qint_from_int(2));\n-    qdict_put(d_b, \"string\", qstring_from_str(\"test1\"));\n+    qdict_put_int(d_b, \"integer\", 2);\n+    qdict_put_str(d_b, \"string\", \"test1\");\n \n     d_data = qdict_new();\n-    qdict_put(d_data, \"a\", qint_from_int(1));\n+    qdict_put_int(d_data, \"a\", 1);\n     qdict_put(d_data, \"b\", d_b);\n-    qdict_put(d_data, \"c\", qstring_from_str(\"test2\"));\n+    qdict_put_str(d_data, \"c\", \"test2\");\n \n     d = data->expect;\n-    qdict_put(d, \"event\", qstring_from_str(\"EVENT_C\"));\n+    qdict_put_str(d, \"event\", \"EVENT_C\");\n     qdict_put(d, \"data\", d_data);\n \n     qapi_event_send_event_c(true, 1, true, &b, \"test2\", &error_abort);\n@@ -213,22 +213,22 @@ static void test_event_d(TestEventData *data,\n     a.enum2 = ENUM_ONE_VALUE2;\n \n     d_struct1 = qdict_new();\n-    qdict_put(d_struct1, \"integer\", qint_from_int(2));\n-    qdict_put(d_struct1, \"string\", qstring_from_str(\"test1\"));\n-    qdict_put(d_struct1, \"enum1\", qstring_from_str(\"value1\"));\n+    qdict_put_int(d_struct1, \"integer\", 2);\n+    qdict_put_str(d_struct1, \"string\", \"test1\");\n+    qdict_put_str(d_struct1, \"enum1\", \"value1\");\n \n     d_a = qdict_new();\n     qdict_put(d_a, \"struct1\", d_struct1);\n-    qdict_put(d_a, \"string\", qstring_from_str(\"test2\"));\n-    qdict_put(d_a, \"enum2\", qstring_from_str(\"value2\"));\n+    qdict_put_str(d_a, \"string\", \"test2\");\n+    qdict_put_str(d_a, \"enum2\", \"value2\");\n \n     d_data = qdict_new();\n     qdict_put(d_data, \"a\", d_a);\n-    qdict_put(d_data, \"b\", qstring_from_str(\"test3\"));\n-    qdict_put(d_data, \"enum3\", qstring_from_str(\"value3\"));\n+    qdict_put_str(d_data, \"b\", \"test3\");\n+    qdict_put_str(d_data, \"enum3\", \"value3\");\n \n     d = data->expect;\n-    qdict_put(d, \"event\", qstring_from_str(\"EVENT_D\"));\n+    qdict_put_str(d, \"event\", \"EVENT_D\");\n     qdict_put(d, \"data\", d_data);\n \n     qapi_event_send_event_d(&a, \"test3\", false, NULL, true, ENUM_ONE_VALUE3,\ndiff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-output-visitor.c\nindex c213fce..94b9518 100644\n--- a/tests/test-qobject-output-visitor.c\n+++ b/tests/test-qobject-output-visitor.c\n@@ -343,9 +343,9 @@ static void test_visitor_out_any(TestOutputVisitorData *data,\n \n     visitor_reset(data);\n     qdict = qdict_new();\n-    qdict_put(qdict, \"integer\", qint_from_int(-42));\n-    qdict_put(qdict, \"boolean\", qbool_from_bool(true));\n-    qdict_put(qdict, \"string\", qstring_from_str(\"foo\"));\n+    qdict_put_int(qdict, \"integer\", -42);\n+    qdict_put_bool(qdict, \"boolean\", true);\n+    qdict_put_str(qdict, \"string\", \"foo\");\n     qobj = QOBJECT(qdict);\n     visit_type_any(data->ov, NULL, &qobj, &error_abort);\n     qobject_decref(qobj);\ndiff --git a/util/qemu-option.c b/util/qemu-option.c\nindex 5ce1b5c..a36cafa 100644\n--- a/util/qemu-option.c\n+++ b/util/qemu-option.c\n@@ -1060,7 +1060,7 @@ QDict *qemu_opts_to_qdict(QemuOpts *opts, QDict *qdict)\n         qdict = qdict_new();\n     }\n     if (opts->id) {\n-        qdict_put(qdict, \"id\", qstring_from_str(opts->id));\n+        qdict_put_str(qdict, \"id\", opts->id);\n     }\n     QTAILQ_FOREACH(opt, &opts->head, next) {\n         val = QOBJECT(qstring_from_str(opt->str));\n",
    "prefixes": [
        "18/79"
    ]
}