Commit d3226035 authored by Markus Armbruster's avatar Markus Armbruster
Browse files

qapi: Simplify how qmp_dispatch() deals with QCO_NO_SUCCESS_RESP



Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
Reviewed-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20200317115459.31821-23-armbru@redhat.com>
parent cf4a0643
Loading
Loading
Loading
Loading
+13 −12
Original line number Diff line number Diff line
@@ -106,7 +106,7 @@ QDict *qmp_dispatch(QmpCommandList *cmds, QObject *request,
    QDict *dict = qobject_to(QDict, request);
    QObject *id = dict ? qdict_get(dict, "id") : NULL;
    QObject *ret = NULL;
    QDict *rsp;
    QDict *rsp = NULL;

    dict = qmp_dispatch_check_obj(request, allow_oob, &err);
    if (!dict) {
@@ -151,31 +151,32 @@ QDict *qmp_dispatch(QmpCommandList *cmds, QObject *request,
        args = qdict_get_qdict(dict, "arguments");
        qobject_ref(args);
    }

    cmd->fn(args, &ret, &err);
    qobject_unref(args);
    if (err) {
        ;
    } else if (cmd->options & QCO_NO_SUCCESS_RESP) {
        goto out;
    }

    if (cmd->options & QCO_NO_SUCCESS_RESP) {
        g_assert(!ret);
        return NULL;
    } else if (!ret) {
        /* TODO turn into assertion */
        ret = QOBJECT(qdict_new());
    }

    qobject_unref(args);
    rsp = qdict_new();
    qdict_put_obj(rsp, "return", ret);

out:
    if (err) {
        assert(!rsp);
        rsp = qmp_error_response(err);
    } else if (ret) {
        rsp = qdict_new();
        qdict_put_obj(rsp, "return", ret);
    } else {
        /* Can only happen for commands with QCO_NO_SUCCESS_RESP */
        rsp = NULL;
    }

    if (rsp && id) {
    assert(rsp);

    if (id) {
        qdict_put_obj(rsp, "id", qobject_ref(id));
    }