qapi: Disallow qmp_marshal_FOO(NULL, ...)
For QMP commands without arguments, gen_marshal() laboriously generates a qmp_marshal_FOO() that copes with null @args. Turns there's just one caller that passes null instead of an empty QDict. Adjust that caller, and simplify gen_marshal(). Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20200424084338.26803-15-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
ea097dff0f
commit
2061487bdb
@ -1579,8 +1579,8 @@ Example:
|
|||||||
void qmp_marshal_my_command(QDict *args, QObject **ret, Error **errp)
|
void qmp_marshal_my_command(QDict *args, QObject **ret, Error **errp)
|
||||||
{
|
{
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
UserDefOne *retval;
|
|
||||||
Visitor *v;
|
Visitor *v;
|
||||||
|
UserDefOne *retval;
|
||||||
q_obj_my_command_arg arg = {0};
|
q_obj_my_command_arg arg = {0};
|
||||||
|
|
||||||
v = qobject_input_visitor_new(QOBJECT(args));
|
v = qobject_input_visitor_new(QOBJECT(args));
|
||||||
|
@ -322,9 +322,12 @@ static QDict *qmp_greeting(MonitorQMP *mon)
|
|||||||
{
|
{
|
||||||
QList *cap_list = qlist_new();
|
QList *cap_list = qlist_new();
|
||||||
QObject *ver = NULL;
|
QObject *ver = NULL;
|
||||||
|
QDict *args;
|
||||||
QMPCapability cap;
|
QMPCapability cap;
|
||||||
|
|
||||||
qmp_marshal_query_version(NULL, &ver, NULL);
|
args = qdict_new();
|
||||||
|
qmp_marshal_query_version(args, &ver, NULL);
|
||||||
|
qobject_unref(args);
|
||||||
|
|
||||||
for (cap = 0; cap < QMP_CAPABILITY__MAX; cap++) {
|
for (cap = 0; cap < QMP_CAPABILITY__MAX; cap++) {
|
||||||
if (mon->capab_offered[cap]) {
|
if (mon->capab_offered[cap]) {
|
||||||
|
@ -104,6 +104,7 @@ def gen_marshal(name, arg_type, boxed, ret_type):
|
|||||||
%(proto)s
|
%(proto)s
|
||||||
{
|
{
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
Visitor *v;
|
||||||
''',
|
''',
|
||||||
proto=build_marshal_proto(name))
|
proto=build_marshal_proto(name))
|
||||||
|
|
||||||
@ -117,21 +118,14 @@ def gen_marshal(name, arg_type, boxed, ret_type):
|
|||||||
visit_members = ('visit_type_%s_members(v, &arg, &err);'
|
visit_members = ('visit_type_%s_members(v, &arg, &err);'
|
||||||
% arg_type.c_name())
|
% arg_type.c_name())
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
Visitor *v;
|
|
||||||
%(c_name)s arg = {0};
|
%(c_name)s arg = {0};
|
||||||
|
|
||||||
''',
|
''',
|
||||||
c_name=arg_type.c_name())
|
c_name=arg_type.c_name())
|
||||||
else:
|
else:
|
||||||
visit_members = ''
|
visit_members = ''
|
||||||
ret += mcgen('''
|
|
||||||
Visitor *v = NULL;
|
|
||||||
|
|
||||||
if (args) {
|
|
||||||
''')
|
|
||||||
push_indent()
|
|
||||||
|
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
|
|
||||||
v = qobject_input_visitor_new(QOBJECT(args));
|
v = qobject_input_visitor_new(QOBJECT(args));
|
||||||
visit_start_struct(v, NULL, NULL, 0, &err);
|
visit_start_struct(v, NULL, NULL, 0, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
@ -148,12 +142,6 @@ def gen_marshal(name, arg_type, boxed, ret_type):
|
|||||||
''',
|
''',
|
||||||
visit_members=visit_members)
|
visit_members=visit_members)
|
||||||
|
|
||||||
if not have_args:
|
|
||||||
pop_indent()
|
|
||||||
ret += mcgen('''
|
|
||||||
}
|
|
||||||
''')
|
|
||||||
|
|
||||||
ret += gen_call(name, arg_type, boxed, ret_type)
|
ret += gen_call(name, arg_type, boxed, ret_type)
|
||||||
|
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
@ -168,10 +156,6 @@ out:
|
|||||||
% arg_type.c_name())
|
% arg_type.c_name())
|
||||||
else:
|
else:
|
||||||
visit_members = ''
|
visit_members = ''
|
||||||
ret += mcgen('''
|
|
||||||
if (args) {
|
|
||||||
''')
|
|
||||||
push_indent()
|
|
||||||
|
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
v = qapi_dealloc_visitor_new();
|
v = qapi_dealloc_visitor_new();
|
||||||
@ -182,12 +166,6 @@ out:
|
|||||||
''',
|
''',
|
||||||
visit_members=visit_members)
|
visit_members=visit_members)
|
||||||
|
|
||||||
if not have_args:
|
|
||||||
pop_indent()
|
|
||||||
ret += mcgen('''
|
|
||||||
}
|
|
||||||
''')
|
|
||||||
|
|
||||||
ret += mcgen('''
|
ret += mcgen('''
|
||||||
}
|
}
|
||||||
''')
|
''')
|
||||||
|
Loading…
Reference in New Issue
Block a user