summaryrefslogtreecommitdiffstats
path: root/include/qapi/visitor.h
diff options
context:
space:
mode:
authorMarkus Armbruster2017-03-03 13:32:45 +0100
committerMarkus Armbruster2017-03-05 09:14:20 +0100
commita4a1c70dc759e5b81627e96564f344ab43ea86eb (patch)
tree56d44358c6e76c57a01aed7ee789b68965dcc2ff /include/qapi/visitor.h
parenttest-qobject-input-visitor: Cover missing nested struct member (diff)
downloadqemu-a4a1c70dc759e5b81627e96564f344ab43ea86eb.tar.gz
qemu-a4a1c70dc759e5b81627e96564f344ab43ea86eb.tar.xz
qemu-a4a1c70dc759e5b81627e96564f344ab43ea86eb.zip
qapi: Make input visitors detect unvisited list tails
Fix the design flaw demonstrated in the previous commit: new method check_list() lets input visitors report that unvisited input remains for a list, exactly like check_struct() lets them report that unvisited input remains for a struct or union. Implement the method for the qobject input visitor (straightforward), and the string input visitor (less so, due to the magic list syntax there). The opts visitor's list magic is even more impenetrable, and all I can do there today is a stub with a FIXME comment. No worse than before. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <1488544368-30622-26-git-send-email-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'include/qapi/visitor.h')
-rw-r--r--include/qapi/visitor.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/include/qapi/visitor.h b/include/qapi/visitor.h
index 7c91a50a4c..1a1b62012b 100644
--- a/include/qapi/visitor.h
+++ b/include/qapi/visitor.h
@@ -370,6 +370,19 @@ void visit_start_list(Visitor *v, const char *name, GenericList **list,
GenericList *visit_next_list(Visitor *v, GenericList *tail, size_t size);
/*
+ * Prepare for completing a list visit.
+ *
+ * @errp obeys typical error usage, and reports failures such as
+ * unvisited list tail remaining in the input stream.
+ *
+ * Should be called prior to visit_end_list() if all other
+ * intermediate visit steps were successful, to allow the visitor one
+ * last chance to report errors. May be skipped on a cleanup path,
+ * where there is no need to check for further errors.
+ */
+void visit_check_list(Visitor *v, Error **errp);
+
+/*
* Complete a list visit started earlier.
*
* @list must match what was passed to the paired visit_start_list().