qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v2 01/52] qapi: support alternates in OptsVisitor


From: Kővágó, Zoltán
Subject: [Qemu-devel] [PATCH v2 01/52] qapi: support alternates in OptsVisitor
Date: Sun, 23 Dec 2018 21:51:37 +0100

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

Signed-off-by: Kővágó, Zoltán <address@hidden>
---
 include/qapi/opts-visitor.h |  7 +++----
 qapi/opts-visitor.c         | 16 ++++++++++++++++
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/include/qapi/opts-visitor.h b/include/qapi/opts-visitor.h
index 9b989e7e08..ca044e3b33 100644
--- a/include/qapi/opts-visitor.h
+++ b/include/qapi/opts-visitor.h
@@ -29,10 +29,9 @@ typedef struct OptsVisitor OptsVisitor;
  * - values below INT64_MIN or LLONG_MIN are rejected,
  * - values above INT64_MAX or LLONG_MAX are rejected.
  *
- * The Opts input visitor does not implement support for visiting QAPI
- * alternates, numbers (other than integers), null, or arbitrary
- * QTypes.  It also requires a non-null list argument to
- * visit_start_list().
+ * The Opts input visitor does not implement support for visiting numbers
+ * (other than integers), null, or arbitrary QTypes. It also requires a
+ * non-null list argument to visit_start_list().
  */
 Visitor *opts_visitor_new(const QemuOpts *opts);
 
diff --git a/qapi/opts-visitor.c b/qapi/opts-visitor.c
index 324b197495..4af6043b75 100644
--- a/qapi/opts-visitor.c
+++ b/qapi/opts-visitor.c
@@ -156,6 +156,13 @@ opts_start_struct(Visitor *v, const char *name, void **obj,
     }
 }
 
+static void
+opts_start_alternate(Visitor *v, const char *name, GenericAlternate **obj,
+                     size_t size, Error **errp)
+{
+    opts_start_struct(v, name, (void **)obj, size, errp);
+}
+
 
 static void
 opts_check_struct(Visitor *v, Error **errp)
@@ -198,6 +205,12 @@ opts_end_struct(Visitor *v, void **obj)
     ov->fake_id_opt = NULL;
 }
 
+static void
+opts_end_alternate(Visitor *v, void **obj)
+{
+    opts_end_struct(v, obj);
+}
+
 
 static GQueue *
 lookup_distinct(const OptsVisitor *ov, const char *name, Error **errp)
@@ -547,6 +560,9 @@ opts_visitor_new(const QemuOpts *opts)
     ov->visitor.check_struct = &opts_check_struct;
     ov->visitor.end_struct   = &opts_end_struct;
 
+    ov->visitor.start_alternate = &opts_start_alternate;
+    ov->visitor.end_alternate = &opts_end_alternate;
+
     ov->visitor.start_list = &opts_start_list;
     ov->visitor.next_list  = &opts_next_list;
     ov->visitor.check_list = &opts_check_list;
-- 
2.20.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]