static void blkverify_refresh_filename(BlockDriverState *bs) { BDRVBlkverifyState *s = bs->opaque; /* bs->file has already been refreshed */ bdrv_refresh_filename(s->test_file); if (bs->file->full_open_options && s->test_file->full_open_options) { QDict *opts = qdict_new(); qdict_put_obj(opts, "driver", QOBJECT(qstring_from_str("blkverify"))); QINCREF(bs->file->full_open_options); qdict_put_obj(opts, "raw", QOBJECT(bs->file->full_open_options)); QINCREF(s->test_file->full_open_options); qdict_put_obj(opts, "test", QOBJECT(s->test_file->full_open_options)); bs->full_open_options = opts; } if (bs->file->exact_filename[0] && s->test_file->exact_filename[0]) { snprintf(bs->exact_filename, sizeof(bs->exact_filename), "blkverify:%s:%s", bs->file->exact_filename, s->test_file->exact_filename); } }
Error *error_copy(const Error *err) { Error *err_new; err_new = g_malloc0(sizeof(*err)); err_new->msg = g_strdup(err->msg); err_new->fmt = err->fmt; err_new->obj = err->obj; QINCREF(err_new->obj); return err_new; }
static QList *device_type_list(bool abstract) { QDict *resp; QList *ret; resp = qmp("{'execute': 'qom-list-types'," " 'arguments': {'implements': 'device', 'abstract': %i}}", abstract); g_assert(qdict_haskey(resp, "return")); ret = qdict_get_qlist(resp, "return"); QINCREF(ret); QDECREF(resp); return ret; }
static QObject *do_qmp_dispatch(QObject *request, Error **errp) { Error *local_err = NULL; const char *command; QDict *args, *dict; QmpCommand *cmd; QObject *ret = NULL; dict = qmp_dispatch_check_obj(request, errp); if (!dict) { return NULL; } command = qdict_get_str(dict, "execute"); cmd = qmp_find_command(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 (!qdict_haskey(dict, "arguments")) { args = qdict_new(); } else { args = qdict_get_qdict(dict, "arguments"); QINCREF(args); } switch (cmd->type) { case QCT_NORMAL: 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) { ret = QOBJECT(qdict_new()); } break; } QDECREF(args); return ret; }
static QList *qom_list_types(const char *implements, bool abstract) { QDict *resp; QList *ret; QDict *args = qdict_new(); qdict_put_bool(args, "abstract", abstract); if (implements) { qdict_put_str(args, "implements", implements); } resp = qmp("{'execute': 'qom-list-types'," " 'arguments': %p }", args); g_assert(qdict_haskey(resp, "return")); ret = qdict_get_qlist(resp, "return"); QINCREF(ret); QDECREF(resp); return ret; }
static QObject *do_qmp_dispatch(QObject *request, Error **errp) { const char *command; QDict *args, *dict; QmpCommand *cmd; QObject *ret = NULL; dict = qmp_dispatch_check_obj(request, errp); if (!dict || error_is_set(errp)) { return NULL; } command = qdict_get_str(dict, "execute"); cmd = qmp_find_command(command); if (cmd == NULL) { error_set(errp, QERR_COMMAND_NOT_FOUND, command); return NULL; } if (!cmd->enabled) { error_set(errp, QERR_COMMAND_DISABLED, command); return NULL; } if (!qdict_haskey(dict, "arguments")) { args = qdict_new(); } else { args = qdict_get_qdict(dict, "arguments"); QINCREF(args); } switch (cmd->type) { case QCT_NORMAL: cmd->fn(args, &ret, errp); if (!error_is_set(errp) && ret == NULL) { ret = QOBJECT(qdict_new()); } break; } QDECREF(args); return ret; }
void qerror_report_err(Error *err) { QError *qerr; int i; qerr = qerror_new(); loc_save(&qerr->loc); QINCREF(err->obj); qerr->error = err->obj; for (i = 0; qerror_table[i].error_fmt; i++) { if (strcmp(qerror_table[i].error_fmt, err->fmt) == 0) { qerr->entry = &qerror_table[i]; break; } } if (monitor_cur_is_qmp()) { monitor_set_error(cur_mon, qerr); } else { qerror_print(qerr); QDECREF(qerr); } }
QDict *error_get_data(Error *err) { QDict *data = qdict_get_qdict(err->obj, "data"); QINCREF(data); return data; }
QObject *error_get_qobject(Error *err) { QINCREF(err->obj); return QOBJECT(err->obj); }