From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40008) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aHaAq-00007R-Rx for qemu-devel@nongnu.org; Fri, 08 Jan 2016 11:46:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aHaAn-0006g4-DK for qemu-devel@nongnu.org; Fri, 08 Jan 2016 11:46:00 -0500 Received: from resqmta-po-11v.sys.comcast.net ([2001:558:fe16:19:96:114:154:170]:34728) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aHaAn-0006fL-7g for qemu-devel@nongnu.org; Fri, 08 Jan 2016 11:45:57 -0500 From: Eric Blake Date: Fri, 8 Jan 2016 09:45:47 -0700 Message-Id: <1452271547-29090-1-git-send-email-eblake@redhat.com> In-Reply-To: <1450717720-9627-36-git-send-email-eblake@redhat.com> References: <1450717720-9627-36-git-send-email-eblake@redhat.com> Subject: [Qemu-devel] [PATCH] qapi: Update docs to match recent generated changes, part 2 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: marcandre.lureau@redhat.com, armbru@redhat.com, Michael Roth [Either worth squashing into a single patch with the posted v8 14.5/35 and sinking it to the end of the series, or else splitting it into pieces and squashing per patch that makes a change to generated output] Signed-off-by: Eric Blake --- v9: new patch --- docs/qapi-code-gen.txt | 51 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/docs/qapi-code-gen.txt b/docs/qapi-code-gen.txt index f9b1d0c..b21e247 100644 --- a/docs/qapi-code-gen.txt +++ b/docs/qapi-code-gen.txt @@ -820,11 +820,8 @@ Example: void qapi_free_UserDefOne(UserDefOne *obj); struct UserDefOneList { - union { - UserDefOne *value; - uint64_t padding; - }; UserDefOneList *next; + UserDefOne *value; }; void qapi_free_UserDefOneList(UserDefOneList *obj); @@ -878,8 +875,10 @@ Example: void visit_type_UserDefOne(Visitor *v, const char *name, UserDefOne **obj, Error **errp) { Error *err = NULL; + bool allocated; - visit_start_struct(v, name, (void **)obj, "UserDefOne", sizeof(UserDefOne), &err); + allocated = visit_start_struct(v, name, (void **)obj, sizeof(UserDefOne), + &err); if (err) { goto out; } @@ -887,10 +886,16 @@ Example: goto out_obj; } visit_type_UserDefOne_fields(v, obj, &err); + if (err) { + goto out_obj; + } + visit_check_struct(v, &err); out_obj: - error_propagate(errp, err); - err = NULL; - visit_end_struct(v, &err); + visit_end_struct(v); + if (allocated && err) { + qapi_free_UserDefOne(*obj); + *obj = NULL; + } out: error_propagate(errp, err); } @@ -898,24 +903,30 @@ Example: void visit_type_UserDefOneList(Visitor *v, const char *name, UserDefOneList **obj, Error **errp) { Error *err = NULL; - GenericList *i, **prev; + UserDefOneList *eld; + bool allocated; - visit_start_list(v, name, &err); + allocated = visit_start_list(v, name, (GenericList **)obj, sizeof(UserDefOneList), &err); if (err) { goto out; } - - for (prev = (GenericList **)obj; - !err && (i = visit_next_list(v, prev, &err)) != NULL; - prev = &i) { - UserDefOneList *native_i = (UserDefOneList *)i; - visit_type_UserDefOne(v, NULL, &native_i->value, &err); + elt = *obj; + while (elt) { + visit_type_UserDefOne(v, NULL, &elt->value, &err); + if (err) { + break; + } + elt = (UserDefOneList *)visit_next_list(v, (GenericList *)elt, sizeof(UserDefOneList), &err); + if (err) { + break; + } } - - error_propagate(errp, err); - err = NULL; - visit_end_list(v, &err); + visit_end_list(v); out: + if (allocated && err) { + qapi_free_UserDefOneList(*obj); + *obj = NULL; + } error_propagate(errp, err); } $ cat qapi-generated/example-qapi-visit.h -- 2.4.3