From: Kővágó, Zoltán <[email protected]>

They are required for flat unions (you still have to allocate the
structs).

Signed-off-by: Kővágó, Zoltán <[email protected]>
Message-Id: 
<88451f26df139c09b56b1525f3c5afeea43dd3db.1441627175.git.dirty.ice...@gmail.com>
[rebase to latest tree]
Signed-off-by: Eric Blake <[email protected]>

---
v6: rebase from original posting and add to series
---
 qapi/opts-visitor.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/qapi/opts-visitor.c b/qapi/opts-visitor.c
index 28f9a8a..286d655 100644
--- a/qapi/opts-visitor.c
+++ b/qapi/opts-visitor.c
@@ -157,6 +157,12 @@ opts_start_struct(Visitor *v, const char *name, void **obj,
     return result;
 }

+static bool
+opts_start_implicit_struct(Visitor *v, void **obj, size_t size, Error **errp)
+{
+    return opts_start_struct(v, NULL, obj, size, errp);
+}
+

 static void
 opts_check_struct(Visitor *v, Error **errp)
@@ -199,6 +205,12 @@ opts_end_struct(Visitor *v)
     ov->fake_id_opt = NULL;
 }

+static void
+opts_end_implicit_struct(Visitor *v)
+{
+    opts_end_struct(v);
+}
+

 static GQueue *
 lookup_distinct(const OptsVisitor *ov, const char *name, Error **errp)
@@ -521,6 +533,9 @@ opts_visitor_new(const QemuOpts *opts)
     ov->visitor.check_struct = &opts_check_struct;
     ov->visitor.end_struct   = &opts_end_struct;

+    ov->visitor.start_implicit_struct = &opts_start_implicit_struct;
+    ov->visitor.end_implicit_struct = &opts_end_implicit_struct;
+
     ov->visitor.start_list = &opts_start_list;
     ov->visitor.next_list  = &opts_next_list;
     ov->visitor.end_list   = &opts_end_list;
-- 
2.4.3


Reply via email to