Skip to content

Commit

Permalink
qapi: Disallow qmp_marshal_FOO(NULL, ...)
Browse files Browse the repository at this point in the history
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 <[email protected]>
Message-Id: <[email protected]>
Reviewed-by: Eric Blake <[email protected]>
  • Loading branch information
Markus Armbruster committed Apr 30, 2020
1 parent ea097df commit 2061487
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 26 deletions.
2 changes: 1 addition & 1 deletion docs/devel/qapi-code-gen.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1579,8 +1579,8 @@ Example:
void qmp_marshal_my_command(QDict *args, QObject **ret, Error **errp)
{
Error *err = NULL;
UserDefOne *retval;
Visitor *v;
UserDefOne *retval;
q_obj_my_command_arg arg = {0};

v = qobject_input_visitor_new(QOBJECT(args));
Expand Down
5 changes: 4 additions & 1 deletion monitor/qmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -322,9 +322,12 @@ static QDict *qmp_greeting(MonitorQMP *mon)
{
QList *cap_list = qlist_new();
QObject *ver = NULL;
QDict *args;
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++) {
if (mon->capab_offered[cap]) {
Expand Down
26 changes: 2 additions & 24 deletions scripts/qapi/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ def gen_marshal(name, arg_type, boxed, ret_type):
%(proto)s
{
Error *err = NULL;
Visitor *v;
''',
proto=build_marshal_proto(name))

Expand All @@ -117,21 +118,14 @@ def gen_marshal(name, arg_type, boxed, ret_type):
visit_members = ('visit_type_%s_members(v, &arg, &err);'
% arg_type.c_name())
ret += mcgen('''
Visitor *v;
%(c_name)s arg = {0};
''',
c_name=arg_type.c_name())
else:
visit_members = ''
ret += mcgen('''
Visitor *v = NULL;
if (args) {
''')
push_indent()

ret += mcgen('''
v = qobject_input_visitor_new(QOBJECT(args));
visit_start_struct(v, NULL, NULL, 0, &err);
if (err) {
Expand All @@ -148,12 +142,6 @@ def gen_marshal(name, arg_type, boxed, ret_type):
''',
visit_members=visit_members)

if not have_args:
pop_indent()
ret += mcgen('''
}
''')

ret += gen_call(name, arg_type, boxed, ret_type)

ret += mcgen('''
Expand All @@ -168,10 +156,6 @@ def gen_marshal(name, arg_type, boxed, ret_type):
% arg_type.c_name())
else:
visit_members = ''
ret += mcgen('''
if (args) {
''')
push_indent()

ret += mcgen('''
v = qapi_dealloc_visitor_new();
Expand All @@ -182,12 +166,6 @@ def gen_marshal(name, arg_type, boxed, ret_type):
''',
visit_members=visit_members)

if not have_args:
pop_indent()
ret += mcgen('''
}
''')

ret += mcgen('''
}
''')
Expand Down

0 comments on commit 2061487

Please sign in to comment.