They are required for flat unions (you still have to allocate the structs).
Signed-off-by: Kővágó, Zoltán <dirty.ice...@gmail.com> --- 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