Blame SOURCES/kvm-block-Factor-out-qobject_input_visitor_new_flat_conf.patch

1bdc94
From 8a66fde222f0192c1d9ce215f297964ab34235c7 Mon Sep 17 00:00:00 2001
1bdc94
From: Markus Armbruster <armbru@redhat.com>
1bdc94
Date: Mon, 18 Jun 2018 08:43:20 +0200
1bdc94
Subject: [PATCH 13/54] block: Factor out
1bdc94
 qobject_input_visitor_new_flat_confused()
1bdc94
1bdc94
RH-Author: Markus Armbruster <armbru@redhat.com>
1bdc94
Message-id: <20180618084330.30009-14-armbru@redhat.com>
1bdc94
Patchwork-id: 80728
1bdc94
O-Subject: [RHEL-7.6 qemu-kvm-rhev PATCH 13/23] block: Factor out qobject_input_visitor_new_flat_confused()
1bdc94
Bugzilla: 1557995
1bdc94
RH-Acked-by: Max Reitz <mreitz@redhat.com>
1bdc94
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
1bdc94
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
1bdc94
1bdc94
Signed-off-by: Markus Armbruster <armbru@redhat.com>
1bdc94
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
1bdc94
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
1bdc94
(cherry picked from commit af91062ee1408f7f5bb58389d355d29a5040c648)
1bdc94
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
1bdc94
---
1bdc94
 block/nbd.c           |  7 ++-----
1bdc94
 block/nfs.c           |  7 ++-----
1bdc94
 block/parallels.c     |  7 ++-----
1bdc94
 block/qcow.c          |  7 ++-----
1bdc94
 block/qcow2.c         |  7 ++-----
1bdc94
 block/qed.c           |  7 ++-----
1bdc94
 block/rbd.c           |  7 ++-----
1bdc94
 block/sheepdog.c      | 14 ++++----------
1bdc94
 block/ssh.c           |  7 ++-----
1bdc94
 block/vhdx.c          |  7 ++-----
1bdc94
 block/vpc.c           |  7 ++-----
1bdc94
 include/block/qdict.h |  3 ++-
1bdc94
 qobject/block-qdict.c | 28 +++++++++++++++++++++++++++-
1bdc94
 13 files changed, 53 insertions(+), 62 deletions(-)
1bdc94
1bdc94
diff --git a/block/nbd.c b/block/nbd.c
1bdc94
index b0be357..10912c3 100644
1bdc94
--- a/block/nbd.c
1bdc94
+++ b/block/nbd.c
1bdc94
@@ -263,7 +263,6 @@ static SocketAddress *nbd_config(BDRVNBDState *s, QDict *options,
1bdc94
 {
1bdc94
     SocketAddress *saddr = NULL;
1bdc94
     QDict *addr = NULL;
1bdc94
-    QObject *crumpled_addr = NULL;
1bdc94
     Visitor *iv = NULL;
1bdc94
     Error *local_err = NULL;
1bdc94
 
1bdc94
@@ -273,12 +272,11 @@ static SocketAddress *nbd_config(BDRVNBDState *s, QDict *options,
1bdc94
         goto done;
1bdc94
     }
1bdc94
 
1bdc94
-    crumpled_addr = qdict_crumple_for_keyval_qiv(addr, errp);
1bdc94
-    if (!crumpled_addr) {
1bdc94
+    iv = qobject_input_visitor_new_flat_confused(addr, errp);
1bdc94
+    if (!iv) {
1bdc94
         goto done;
1bdc94
     }
1bdc94
 
1bdc94
-    iv = qobject_input_visitor_new_keyval(crumpled_addr);
1bdc94
     visit_type_SocketAddress(iv, NULL, &saddr, &local_err);
1bdc94
     if (local_err) {
1bdc94
         error_propagate(errp, local_err);
1bdc94
@@ -287,7 +285,6 @@ static SocketAddress *nbd_config(BDRVNBDState *s, QDict *options,
1bdc94
 
1bdc94
 done:
1bdc94
     qobject_unref(addr);
1bdc94
-    qobject_unref(crumpled_addr);
1bdc94
     visit_free(iv);
1bdc94
     return saddr;
1bdc94
 }
1bdc94
diff --git a/block/nfs.c b/block/nfs.c
1bdc94
index 4090d28..1e12958 100644
1bdc94
--- a/block/nfs.c
1bdc94
+++ b/block/nfs.c
1bdc94
@@ -556,19 +556,16 @@ static BlockdevOptionsNfs *nfs_options_qdict_to_qapi(QDict *options,
1bdc94
                                                      Error **errp)
1bdc94
 {
1bdc94
     BlockdevOptionsNfs *opts = NULL;
1bdc94
-    QObject *crumpled = NULL;
1bdc94
     Visitor *v;
1bdc94
     Error *local_err = NULL;
1bdc94
 
1bdc94
-    crumpled = qdict_crumple_for_keyval_qiv(options, errp);
1bdc94
-    if (crumpled == NULL) {
1bdc94
+    v = qobject_input_visitor_new_flat_confused(options, errp);
1bdc94
+    if (!v) {
1bdc94
         return NULL;
1bdc94
     }
1bdc94
 
1bdc94
-    v = qobject_input_visitor_new_keyval(crumpled);
1bdc94
     visit_type_BlockdevOptionsNfs(v, NULL, &opts, &local_err);
1bdc94
     visit_free(v);
1bdc94
-    qobject_unref(crumpled);
1bdc94
 
1bdc94
     if (local_err) {
1bdc94
         return NULL;
1bdc94
diff --git a/block/parallels.c b/block/parallels.c
1bdc94
index 1c96c39..b6ebe36 100644
1bdc94
--- a/block/parallels.c
1bdc94
+++ b/block/parallels.c
1bdc94
@@ -615,7 +615,6 @@ static int coroutine_fn parallels_co_create_opts(const char *filename,
1bdc94
     Error *local_err = NULL;
1bdc94
     BlockDriverState *bs = NULL;
1bdc94
     QDict *qdict;
1bdc94
-    QObject *qobj;
1bdc94
     Visitor *v;
1bdc94
     int ret;
1bdc94
 
1bdc94
@@ -651,14 +650,12 @@ static int coroutine_fn parallels_co_create_opts(const char *filename,
1bdc94
     qdict_put_str(qdict, "driver", "parallels");
1bdc94
     qdict_put_str(qdict, "file", bs->node_name);
1bdc94
 
1bdc94
-    qobj = qdict_crumple_for_keyval_qiv(qdict, errp);
1bdc94
-    if (!qobj) {
1bdc94
+    v = qobject_input_visitor_new_flat_confused(qdict, errp);
1bdc94
+    if (!v) {
1bdc94
         ret = -EINVAL;
1bdc94
         goto done;
1bdc94
     }
1bdc94
 
1bdc94
-    v = qobject_input_visitor_new_keyval(qobj);
1bdc94
-    qobject_unref(qobj);
1bdc94
     visit_type_BlockdevCreateOptions(v, NULL, &create_options, &local_err);
1bdc94
     visit_free(v);
1bdc94
 
1bdc94
diff --git a/block/qcow.c b/block/qcow.c
1bdc94
index 43a595a..4b3bc31 100644
1bdc94
--- a/block/qcow.c
1bdc94
+++ b/block/qcow.c
1bdc94
@@ -945,7 +945,6 @@ static int coroutine_fn qcow_co_create_opts(const char *filename,
1bdc94
     BlockdevCreateOptions *create_options = NULL;
1bdc94
     BlockDriverState *bs = NULL;
1bdc94
     QDict *qdict;
1bdc94
-    QObject *qobj;
1bdc94
     Visitor *v;
1bdc94
     const char *val;
1bdc94
     Error *local_err = NULL;
1bdc94
@@ -995,14 +994,12 @@ static int coroutine_fn qcow_co_create_opts(const char *filename,
1bdc94
     qdict_put_str(qdict, "driver", "qcow");
1bdc94
     qdict_put_str(qdict, "file", bs->node_name);
1bdc94
 
1bdc94
-    qobj = qdict_crumple_for_keyval_qiv(qdict, errp);
1bdc94
-    if (!qobj) {
1bdc94
+    v = qobject_input_visitor_new_flat_confused(qdict, errp);
1bdc94
+    if (!v) {
1bdc94
         ret = -EINVAL;
1bdc94
         goto fail;
1bdc94
     }
1bdc94
 
1bdc94
-    v = qobject_input_visitor_new_keyval(qobj);
1bdc94
-    qobject_unref(qobj);
1bdc94
     visit_type_BlockdevCreateOptions(v, NULL, &create_options, &local_err);
1bdc94
     visit_free(v);
1bdc94
 
1bdc94
diff --git a/block/qcow2.c b/block/qcow2.c
1bdc94
index ede52a8..35842c5 100644
1bdc94
--- a/block/qcow2.c
1bdc94
+++ b/block/qcow2.c
1bdc94
@@ -3068,7 +3068,6 @@ static int coroutine_fn qcow2_co_create_opts(const char *filename, QemuOpts *opt
1bdc94
 {
1bdc94
     BlockdevCreateOptions *create_options = NULL;
1bdc94
     QDict *qdict;
1bdc94
-    QObject *qobj;
1bdc94
     Visitor *v;
1bdc94
     BlockDriverState *bs = NULL;
1bdc94
     Error *local_err = NULL;
1bdc94
@@ -3139,14 +3138,12 @@ static int coroutine_fn qcow2_co_create_opts(const char *filename, QemuOpts *opt
1bdc94
     qdict_put_str(qdict, "file", bs->node_name);
1bdc94
 
1bdc94
     /* Now get the QAPI type BlockdevCreateOptions */
1bdc94
-    qobj = qdict_crumple_for_keyval_qiv(qdict, errp);
1bdc94
-    if (!qobj) {
1bdc94
+    v = qobject_input_visitor_new_flat_confused(qdict, errp);
1bdc94
+    if (!v) {
1bdc94
         ret = -EINVAL;
1bdc94
         goto finish;
1bdc94
     }
1bdc94
 
1bdc94
-    v = qobject_input_visitor_new_keyval(qobj);
1bdc94
-    qobject_unref(qobj);
1bdc94
     visit_type_BlockdevCreateOptions(v, NULL, &create_options, &local_err);
1bdc94
     visit_free(v);
1bdc94
 
1bdc94
diff --git a/block/qed.c b/block/qed.c
1bdc94
index 3818888..4c5d7e8 100644
1bdc94
--- a/block/qed.c
1bdc94
+++ b/block/qed.c
1bdc94
@@ -723,7 +723,6 @@ static int coroutine_fn bdrv_qed_co_create_opts(const char *filename,
1bdc94
 {
1bdc94
     BlockdevCreateOptions *create_options = NULL;
1bdc94
     QDict *qdict;
1bdc94
-    QObject *qobj;
1bdc94
     Visitor *v;
1bdc94
     BlockDriverState *bs = NULL;
1bdc94
     Error *local_err = NULL;
1bdc94
@@ -763,14 +762,12 @@ static int coroutine_fn bdrv_qed_co_create_opts(const char *filename,
1bdc94
     qdict_put_str(qdict, "driver", "qed");
1bdc94
     qdict_put_str(qdict, "file", bs->node_name);
1bdc94
 
1bdc94
-    qobj = qdict_crumple_for_keyval_qiv(qdict, errp);
1bdc94
-    if (!qobj) {
1bdc94
+    v = qobject_input_visitor_new_flat_confused(qdict, errp);
1bdc94
+    if (!v) {
1bdc94
         ret = -EINVAL;
1bdc94
         goto fail;
1bdc94
     }
1bdc94
 
1bdc94
-    v = qobject_input_visitor_new_keyval(qobj);
1bdc94
-    qobject_unref(qobj);
1bdc94
     visit_type_BlockdevCreateOptions(v, NULL, &create_options, &local_err);
1bdc94
     visit_free(v);
1bdc94
 
1bdc94
diff --git a/block/rbd.c b/block/rbd.c
1bdc94
index 0b5455f..c834d72 100644
1bdc94
--- a/block/rbd.c
1bdc94
+++ b/block/rbd.c
1bdc94
@@ -623,7 +623,6 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
1bdc94
     BDRVRBDState *s = bs->opaque;
1bdc94
     BlockdevOptionsRbd *opts = NULL;
1bdc94
     Visitor *v;
1bdc94
-    QObject *crumpled = NULL;
1bdc94
     const QDictEntry *e;
1bdc94
     Error *local_err = NULL;
1bdc94
     char *keypairs, *secretid;
1bdc94
@@ -640,16 +639,14 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
1bdc94
     }
1bdc94
 
1bdc94
     /* Convert the remaining options into a QAPI object */
1bdc94
-    crumpled = qdict_crumple_for_keyval_qiv(options, errp);
1bdc94
-    if (crumpled == NULL) {
1bdc94
+    v = qobject_input_visitor_new_flat_confused(options, errp);
1bdc94
+    if (!v) {
1bdc94
         r = -EINVAL;
1bdc94
         goto out;
1bdc94
     }
1bdc94
 
1bdc94
-    v = qobject_input_visitor_new_keyval(crumpled);
1bdc94
     visit_type_BlockdevOptionsRbd(v, NULL, &opts, &local_err);
1bdc94
     visit_free(v);
1bdc94
-    qobject_unref(crumpled);
1bdc94
 
1bdc94
     if (local_err) {
1bdc94
         error_propagate(errp, local_err);
1bdc94
diff --git a/block/sheepdog.c b/block/sheepdog.c
1bdc94
index dd582d5..d1c9bf5 100644
1bdc94
--- a/block/sheepdog.c
1bdc94
+++ b/block/sheepdog.c
1bdc94
@@ -539,19 +539,17 @@ static void sd_aio_setup(SheepdogAIOCB *acb, BDRVSheepdogState *s,
1bdc94
 static SocketAddress *sd_server_config(QDict *options, Error **errp)
1bdc94
 {
1bdc94
     QDict *server = NULL;
1bdc94
-    QObject *crumpled_server = NULL;
1bdc94
     Visitor *iv = NULL;
1bdc94
     SocketAddress *saddr = NULL;
1bdc94
     Error *local_err = NULL;
1bdc94
 
1bdc94
     qdict_extract_subqdict(options, &server, "server.");
1bdc94
 
1bdc94
-    crumpled_server = qdict_crumple_for_keyval_qiv(server, errp);
1bdc94
-    if (!crumpled_server) {
1bdc94
+    iv = qobject_input_visitor_new_flat_confused(server, errp);
1bdc94
+    if (!iv) {
1bdc94
         goto done;
1bdc94
     }
1bdc94
 
1bdc94
-    iv = qobject_input_visitor_new_keyval(crumpled_server);
1bdc94
     visit_type_SocketAddress(iv, NULL, &saddr, &local_err);
1bdc94
     if (local_err) {
1bdc94
         error_propagate(errp, local_err);
1bdc94
@@ -560,7 +558,6 @@ static SocketAddress *sd_server_config(QDict *options, Error **errp)
1bdc94
 
1bdc94
 done:
1bdc94
     visit_free(iv);
1bdc94
-    qobject_unref(crumpled_server);
1bdc94
     qobject_unref(server);
1bdc94
     return saddr;
1bdc94
 }
1bdc94
@@ -2174,7 +2171,6 @@ static int coroutine_fn sd_co_create_opts(const char *filename, QemuOpts *opts,
1bdc94
 {
1bdc94
     BlockdevCreateOptions *create_options = NULL;
1bdc94
     QDict *qdict, *location_qdict;
1bdc94
-    QObject *crumpled;
1bdc94
     Visitor *v;
1bdc94
     const char *redundancy;
1bdc94
     Error *local_err = NULL;
1bdc94
@@ -2210,16 +2206,14 @@ static int coroutine_fn sd_co_create_opts(const char *filename, QemuOpts *opts,
1bdc94
     }
1bdc94
 
1bdc94
     /* Get the QAPI object */
1bdc94
-    crumpled = qdict_crumple_for_keyval_qiv(qdict, errp);
1bdc94
-    if (crumpled == NULL) {
1bdc94
+    v = qobject_input_visitor_new_flat_confused(qdict, errp);
1bdc94
+    if (!v) {
1bdc94
         ret = -EINVAL;
1bdc94
         goto fail;
1bdc94
     }
1bdc94
 
1bdc94
-    v = qobject_input_visitor_new_keyval(crumpled);
1bdc94
     visit_type_BlockdevCreateOptions(v, NULL, &create_options, &local_err);
1bdc94
     visit_free(v);
1bdc94
-    qobject_unref(crumpled);
1bdc94
 
1bdc94
     if (local_err) {
1bdc94
         error_propagate(errp, local_err);
1bdc94
diff --git a/block/ssh.c b/block/ssh.c
1bdc94
index 2fc7cd9..aab6996 100644
1bdc94
--- a/block/ssh.c
1bdc94
+++ b/block/ssh.c
1bdc94
@@ -606,7 +606,6 @@ static BlockdevOptionsSsh *ssh_parse_options(QDict *options, Error **errp)
1bdc94
     BlockdevOptionsSsh *result = NULL;
1bdc94
     QemuOpts *opts = NULL;
1bdc94
     Error *local_err = NULL;
1bdc94
-    QObject *crumpled;
1bdc94
     const QDictEntry *e;
1bdc94
     Visitor *v;
1bdc94
 
1bdc94
@@ -623,15 +622,13 @@ static BlockdevOptionsSsh *ssh_parse_options(QDict *options, Error **errp)
1bdc94
     }
1bdc94
 
1bdc94
     /* Create the QAPI object */
1bdc94
-    crumpled = qdict_crumple_for_keyval_qiv(options, errp);
1bdc94
-    if (crumpled == NULL) {
1bdc94
+    v = qobject_input_visitor_new_flat_confused(options, errp);
1bdc94
+    if (!v) {
1bdc94
         goto fail;
1bdc94
     }
1bdc94
 
1bdc94
-    v = qobject_input_visitor_new_keyval(crumpled);
1bdc94
     visit_type_BlockdevOptionsSsh(v, NULL, &result, &local_err);
1bdc94
     visit_free(v);
1bdc94
-    qobject_unref(crumpled);
1bdc94
 
1bdc94
     if (local_err) {
1bdc94
         error_propagate(errp, local_err);
1bdc94
diff --git a/block/vhdx.c b/block/vhdx.c
1bdc94
index 728d8b3..6731298 100644
1bdc94
--- a/block/vhdx.c
1bdc94
+++ b/block/vhdx.c
1bdc94
@@ -1964,7 +1964,6 @@ static int coroutine_fn vhdx_co_create_opts(const char *filename,
1bdc94
 {
1bdc94
     BlockdevCreateOptions *create_options = NULL;
1bdc94
     QDict *qdict;
1bdc94
-    QObject *qobj;
1bdc94
     Visitor *v;
1bdc94
     BlockDriverState *bs = NULL;
1bdc94
     Error *local_err = NULL;
1bdc94
@@ -2003,14 +2002,12 @@ static int coroutine_fn vhdx_co_create_opts(const char *filename,
1bdc94
     qdict_put_str(qdict, "driver", "vhdx");
1bdc94
     qdict_put_str(qdict, "file", bs->node_name);
1bdc94
 
1bdc94
-    qobj = qdict_crumple_for_keyval_qiv(qdict, errp);
1bdc94
-    if (!qobj) {
1bdc94
+    v = qobject_input_visitor_new_flat_confused(qdict, errp);
1bdc94
+    if (!v) {
1bdc94
         ret = -EINVAL;
1bdc94
         goto fail;
1bdc94
     }
1bdc94
 
1bdc94
-    v = qobject_input_visitor_new_keyval(qobj);
1bdc94
-    qobject_unref(qobj);
1bdc94
     visit_type_BlockdevCreateOptions(v, NULL, &create_options, &local_err);
1bdc94
     visit_free(v);
1bdc94
 
1bdc94
diff --git a/block/vpc.c b/block/vpc.c
1bdc94
index a9bb041..bf294ab 100644
1bdc94
--- a/block/vpc.c
1bdc94
+++ b/block/vpc.c
1bdc94
@@ -1082,7 +1082,6 @@ static int coroutine_fn vpc_co_create_opts(const char *filename,
1bdc94
 {
1bdc94
     BlockdevCreateOptions *create_options = NULL;
1bdc94
     QDict *qdict;
1bdc94
-    QObject *qobj;
1bdc94
     Visitor *v;
1bdc94
     BlockDriverState *bs = NULL;
1bdc94
     Error *local_err = NULL;
1bdc94
@@ -1119,14 +1118,12 @@ static int coroutine_fn vpc_co_create_opts(const char *filename,
1bdc94
     qdict_put_str(qdict, "driver", "vpc");
1bdc94
     qdict_put_str(qdict, "file", bs->node_name);
1bdc94
 
1bdc94
-    qobj = qdict_crumple_for_keyval_qiv(qdict, errp);
1bdc94
-    if (!qobj) {
1bdc94
+    v = qobject_input_visitor_new_flat_confused(qdict, errp);
1bdc94
+    if (!v) {
1bdc94
         ret = -EINVAL;
1bdc94
         goto fail;
1bdc94
     }
1bdc94
 
1bdc94
-    v = qobject_input_visitor_new_keyval(qobj);
1bdc94
-    qobject_unref(qobj);
1bdc94
     visit_type_BlockdevCreateOptions(v, NULL, &create_options, &local_err);
1bdc94
     visit_free(v);
1bdc94
 
1bdc94
diff --git a/include/block/qdict.h b/include/block/qdict.h
1bdc94
index 47d9638..d8cb502 100644
1bdc94
--- a/include/block/qdict.h
1bdc94
+++ b/include/block/qdict.h
1bdc94
@@ -21,7 +21,6 @@ void qdict_extract_subqdict(QDict *src, QDict **dst, const char *start);
1bdc94
 void qdict_array_split(QDict *src, QList **dst);
1bdc94
 int qdict_array_entries(QDict *src, const char *subqdict);
1bdc94
 QObject *qdict_crumple(const QDict *src, Error **errp);
1bdc94
-QObject *qdict_crumple_for_keyval_qiv(QDict *qdict, Error **errp);
1bdc94
 void qdict_flatten(QDict *qdict);
1bdc94
 
1bdc94
 typedef struct QDictRenames {
1bdc94
@@ -30,4 +29,6 @@ typedef struct QDictRenames {
1bdc94
 } QDictRenames;
1bdc94
 bool qdict_rename_keys(QDict *qdict, const QDictRenames *renames, Error **errp);
1bdc94
 
1bdc94
+Visitor *qobject_input_visitor_new_flat_confused(QDict *qdict,
1bdc94
+                                                 Error **errp);
1bdc94
 #endif
1bdc94
diff --git a/qobject/block-qdict.c b/qobject/block-qdict.c
1bdc94
index aba372c..41f39ab 100644
1bdc94
--- a/qobject/block-qdict.c
1bdc94
+++ b/qobject/block-qdict.c
1bdc94
@@ -13,6 +13,7 @@
1bdc94
 #include "qapi/qmp/qlist.h"
1bdc94
 #include "qapi/qmp/qnum.h"
1bdc94
 #include "qapi/qmp/qstring.h"
1bdc94
+#include "qapi/qobject-input-visitor.h"
1bdc94
 #include "qemu/cutils.h"
1bdc94
 #include "qapi/error.h"
1bdc94
 
1bdc94
@@ -529,7 +530,7 @@ QObject *qdict_crumple(const QDict *src, Error **errp)
1bdc94
  * used for anything else, and it should go away once the block
1bdc94
  * subsystem has been cleaned up.
1bdc94
  */
1bdc94
-QObject *qdict_crumple_for_keyval_qiv(QDict *src, Error **errp)
1bdc94
+static QObject *qdict_crumple_for_keyval_qiv(QDict *src, Error **errp)
1bdc94
 {
1bdc94
     QDict *tmp = NULL;
1bdc94
     char *buf;
1bdc94
@@ -695,3 +696,28 @@ bool qdict_rename_keys(QDict *qdict, const QDictRenames *renames, Error **errp)
1bdc94
     }
1bdc94
     return true;
1bdc94
 }
1bdc94
+
1bdc94
+/*
1bdc94
+ * Create a QObject input visitor for flat @qdict with possibly
1bdc94
+ * confused scalar types.
1bdc94
+ *
1bdc94
+ * The block subsystem uses this function to visit its flat QDict with
1bdc94
+ * possibly confused scalar types.  It should not be used for anything
1bdc94
+ * else, and it should go away once the block subsystem has been
1bdc94
+ * cleaned up.
1bdc94
+ */
1bdc94
+Visitor *qobject_input_visitor_new_flat_confused(QDict *qdict,
1bdc94
+                                                 Error **errp)
1bdc94
+{
1bdc94
+    QObject *crumpled;
1bdc94
+    Visitor *v;
1bdc94
+
1bdc94
+    crumpled = qdict_crumple_for_keyval_qiv(qdict, errp);
1bdc94
+    if (!crumpled) {
1bdc94
+        return NULL;
1bdc94
+    }
1bdc94
+
1bdc94
+    v = qobject_input_visitor_new_keyval(crumpled);
1bdc94
+    qobject_unref(crumpled);
1bdc94
+    return v;
1bdc94
+}
1bdc94
-- 
1bdc94
1.8.3.1
1bdc94