void qmp_exit_preconfig(Error **errp) { if (!runstate_check(RUN_STATE_PRECONFIG)) { error_setg(errp, "The command is permitted only in '%s' state", RunState_str(RUN_STATE_PRECONFIG)); return; } qemu_exit_preconfig_request(); }
static QObject *do_qmp_dispatch(QmpCommandList *cmds, QObject *request, bool allow_oob, Error **errp) { Error *local_err = NULL; bool oob; const char *command; QDict *args, *dict; QmpCommand *cmd; QObject *ret = NULL; dict = qmp_dispatch_check_obj(request, allow_oob, errp); if (!dict) { return NULL; } command = qdict_get_try_str(dict, "execute"); oob = false; if (!command) { assert(allow_oob); command = qdict_get_str(dict, "exec-oob"); oob = true; } cmd = qmp_find_command(cmds, command); if (cmd == NULL) { error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND, "The command %s has not been found", command); return NULL; } if (!cmd->enabled) { error_setg(errp, "The command %s has been disabled for this instance", command); return NULL; } if (oob && !(cmd->options & QCO_ALLOW_OOB)) { error_setg(errp, "The command %s does not support OOB", command); return NULL; } if (runstate_check(RUN_STATE_PRECONFIG) && !(cmd->options & QCO_ALLOW_PRECONFIG)) { error_setg(errp, "The command '%s' isn't permitted in '%s' state", cmd->name, RunState_str(RUN_STATE_PRECONFIG)); return NULL; } if (!qdict_haskey(dict, "arguments")) { args = qdict_new(); } else { args = qdict_get_qdict(dict, "arguments"); qobject_ref(args); } cmd->fn(args, &ret, &local_err); if (local_err) { error_propagate(errp, local_err); } else if (cmd->options & QCO_NO_SUCCESS_RESP) { g_assert(!ret); } else if (!ret) { /* TODO turn into assertion */ ret = QOBJECT(qdict_new()); } qobject_unref(args); return ret; }