Commit 2061487b authored by Markus Armbruster's avatar Markus Armbruster
Browse files

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: default avatarMarkus Armbruster <armbru@redhat.com>
Message-Id: <20200424084338.26803-15-armbru@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
parent ea097dff
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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));
+4 −1
Original line number Diff line number Diff line
@@ -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]) {
+2 −24
Original line number Diff line number Diff line
@@ -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))

@@ -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) {
@@ -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('''
@@ -168,10 +156,6 @@ out:
                         % arg_type.c_name())
    else:
        visit_members = ''
        ret += mcgen('''
    if (args) {
''')
        push_indent()

    ret += mcgen('''
    v = qapi_dealloc_visitor_new();
@@ -182,12 +166,6 @@ out:
''',
                 visit_members=visit_members)

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

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