diff mbox series

[v2,01/52] qapi: support alternates in OptsVisitor

Message ID 5ffd8b7b6fefbc3c2c4fb074f3083ffbdc946d20.1545598229.git.DirtY.iCE.hu@gmail.com (mailing list archive)
State New, archived
Headers show
Series Audio 5.1 patches | expand

Commit Message

Zoltán Kővágó Dec. 23, 2018, 8:51 p.m. UTC
They are required for flat unions (you still have to allocate the
structs).

Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com>
---
 include/qapi/opts-visitor.h |  7 +++----
 qapi/opts-visitor.c         | 16 ++++++++++++++++
 2 files changed, 19 insertions(+), 4 deletions(-)
diff mbox series

Patch

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;