qapi: Make visitor functions taking Error ** return bool, not void

See recent commit "error: Document Error API usage rules" for
rationale.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-Id: <20200707160613.848843-18-armbru@redhat.com>
This commit is contained in:
Markus Armbruster 2020-07-07 18:05:45 +02:00
parent 3c4b89c3b2
commit 012d4c96e2
14 changed files with 456 additions and 361 deletions

View file

@ -1408,42 +1408,38 @@ Example:
#include "example-qapi-types.h"
void visit_type_UserDefOne_members(Visitor *v, UserDefOne *obj, Error **errp);
void visit_type_UserDefOne(Visitor *v, const char *name, UserDefOne **obj, Error **errp);
void visit_type_UserDefOneList(Visitor *v, const char *name, UserDefOneList **obj, Error **errp);
bool visit_type_UserDefOne_members(Visitor *v, UserDefOne *obj, Error **errp);
bool visit_type_UserDefOne(Visitor *v, const char *name, UserDefOne **obj, Error **errp);
bool visit_type_UserDefOneList(Visitor *v, const char *name, UserDefOneList **obj, Error **errp);
void visit_type_q_obj_my_command_arg_members(Visitor *v, q_obj_my_command_arg *obj, Error **errp);
bool visit_type_q_obj_my_command_arg_members(Visitor *v, q_obj_my_command_arg *obj, Error **errp);
#endif /* EXAMPLE_QAPI_VISIT_H */
$ cat qapi-generated/example-qapi-visit.c
[Uninteresting stuff omitted...]
void visit_type_UserDefOne_members(Visitor *v, UserDefOne *obj, Error **errp)
bool visit_type_UserDefOne_members(Visitor *v, UserDefOne *obj, Error **errp)
{
Error *err = NULL;
visit_type_int(v, "integer", &obj->integer, &err);
if (err) {
goto out;
if (!visit_type_int(v, "integer", &obj->integer, errp)) {
return false;
}
if (visit_optional(v, "string", &obj->has_string)) {
visit_type_str(v, "string", &obj->string, &err);
if (err) {
goto out;
if (!visit_type_str(v, "string", &obj->string, errp)) {
return false;
}
}
out:
error_propagate(errp, err);
return !err;
}
void visit_type_UserDefOne(Visitor *v, const char *name, UserDefOne **obj, Error **errp)
bool visit_type_UserDefOne(Visitor *v, const char *name, UserDefOne **obj, Error **errp)
{
Error *err = NULL;
visit_start_struct(v, name, (void **)obj, sizeof(UserDefOne), &err);
if (err) {
goto out;
if (!visit_start_struct(v, name, (void **)obj, sizeof(UserDefOne), errp)) {
return false;
}
if (!*obj) {
/* incomplete */
@ -1461,19 +1457,18 @@ Example:
qapi_free_UserDefOne(*obj);
*obj = NULL;
}
out:
error_propagate(errp, err);
return !err;
}
void visit_type_UserDefOneList(Visitor *v, const char *name, UserDefOneList **obj, Error **errp)
bool visit_type_UserDefOneList(Visitor *v, const char *name, UserDefOneList **obj, Error **errp)
{
Error *err = NULL;
UserDefOneList *tail;
size_t size = sizeof(**obj);
visit_start_list(v, name, (GenericList **)obj, size, &err);
if (err) {
goto out;
if (!visit_start_list(v, name, (GenericList **)obj, size, errp)) {
return false;
}
for (tail = *obj; tail;
@ -1492,21 +1487,19 @@ Example:
qapi_free_UserDefOneList(*obj);
*obj = NULL;
}
out:
error_propagate(errp, err);
return !err;
}
void visit_type_q_obj_my_command_arg_members(Visitor *v, q_obj_my_command_arg *obj, Error **errp)
bool visit_type_q_obj_my_command_arg_members(Visitor *v, q_obj_my_command_arg *obj, Error **errp)
{
Error *err = NULL;
visit_type_UserDefOneList(v, "arg1", &obj->arg1, &err);
if (err) {
goto out;
if (!visit_type_UserDefOneList(v, "arg1", &obj->arg1, errp)) {
return false;
}
out:
error_propagate(errp, err);
return !err;
}
[Uninteresting stuff omitted...]