mirror of https://github.com/xqemu/xqemu.git
Merge remote-tracking branch 'remotes/qmp-unstable/queue/qmp' into staging
* remotes/qmp-unstable/queue/qmp: monitor: Add object_add class argument completion. monitor: Add object_del id argument completion. monitor: Add device_add device argument completion. monitor: Add device_del id argument completion. qmp: expose list of supported character device backends Use error_is_set() only when necessary QMP: allow JSON dict arguments in qmp-shell hmp: migrate command (without -d) now blocks correctly Conflicts: blockdev.c [PMM: resolved trivial conflict in blockdev.c] Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
4c0c9bbe78
16
block.c
16
block.c
|
@ -421,7 +421,7 @@ static void coroutine_fn bdrv_create_co_entry(void *opaque)
|
||||||
assert(cco->drv);
|
assert(cco->drv);
|
||||||
|
|
||||||
ret = cco->drv->bdrv_create(cco->filename, cco->options, &local_err);
|
ret = cco->drv->bdrv_create(cco->filename, cco->options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(&cco->err, local_err);
|
error_propagate(&cco->err, local_err);
|
||||||
}
|
}
|
||||||
cco->ret = ret;
|
cco->ret = ret;
|
||||||
|
@ -460,7 +460,7 @@ int bdrv_create(BlockDriver *drv, const char* filename,
|
||||||
|
|
||||||
ret = cco.ret;
|
ret = cco.ret;
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (error_is_set(&cco.err)) {
|
if (cco.err) {
|
||||||
error_propagate(errp, cco.err);
|
error_propagate(errp, cco.err);
|
||||||
} else {
|
} else {
|
||||||
error_setg_errno(errp, -ret, "Could not create image");
|
error_setg_errno(errp, -ret, "Could not create image");
|
||||||
|
@ -486,7 +486,7 @@ int bdrv_create_file(const char* filename, QEMUOptionParameter *options,
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = bdrv_create(drv, filename, options, &local_err);
|
ret = bdrv_create(drv, filename, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -916,7 +916,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
} else if (bs->filename[0]) {
|
} else if (bs->filename[0]) {
|
||||||
error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
|
error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
|
||||||
|
@ -1037,7 +1037,7 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename,
|
||||||
/* Parse the filename and open it */
|
/* Parse the filename and open it */
|
||||||
if (drv->bdrv_parse_filename && filename) {
|
if (drv->bdrv_parse_filename && filename) {
|
||||||
drv->bdrv_parse_filename(filename, options, &local_err);
|
drv->bdrv_parse_filename(filename, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -1406,7 +1406,7 @@ fail:
|
||||||
QDECREF(bs->options);
|
QDECREF(bs->options);
|
||||||
QDECREF(options);
|
QDECREF(options);
|
||||||
bs->options = NULL;
|
bs->options = NULL;
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1414,7 +1414,7 @@ fail:
|
||||||
close_and_fail:
|
close_and_fail:
|
||||||
bdrv_close(bs);
|
bdrv_close(bs);
|
||||||
QDECREF(options);
|
QDECREF(options);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -5340,7 +5340,7 @@ out:
|
||||||
free_option_parameters(create_options);
|
free_option_parameters(create_options);
|
||||||
free_option_parameters(param);
|
free_option_parameters(param);
|
||||||
|
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -303,7 +303,7 @@ static int read_config(BDRVBlkdebugState *s, const char *filename,
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_config_parse_qdict(options, config_groups, &local_err);
|
qemu_config_parse_qdict(options, config_groups, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -393,7 +393,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
|
|
||||||
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
@ -128,7 +128,7 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
|
|
||||||
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
|
@ -463,7 +463,7 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
|
|
||||||
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
goto out_noclean;
|
goto out_noclean;
|
||||||
|
|
|
@ -282,7 +282,7 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options,
|
||||||
|
|
||||||
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
|
|
@ -1127,7 +1127,7 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
|
|
||||||
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
|
|
@ -209,7 +209,7 @@ static int nbd_config(BDRVNBDState *s, QDict *options, char **export)
|
||||||
&error_abort);
|
&error_abort);
|
||||||
|
|
||||||
qemu_opts_absorb_qdict(s->socket_opts, options, &local_err);
|
qemu_opts_absorb_qdict(s->socket_opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -271,7 +271,7 @@ void bdrv_query_info(BlockDriverState *bs,
|
||||||
p_image_info = &info->inserted->image;
|
p_image_info = &info->inserted->image;
|
||||||
while (1) {
|
while (1) {
|
||||||
bdrv_query_image_info(bs0, p_image_info, &local_err);
|
bdrv_query_image_info(bs0, p_image_info, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
@ -336,7 +336,7 @@ BlockInfoList *qmp_query_block(Error **errp)
|
||||||
while ((bs = bdrv_next(bs))) {
|
while ((bs = bdrv_next(bs))) {
|
||||||
BlockInfoList *info = g_malloc0(sizeof(*info));
|
BlockInfoList *info = g_malloc0(sizeof(*info));
|
||||||
bdrv_query_info(bs, &info->value, &local_err);
|
bdrv_query_info(bs, &info->value, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -671,7 +671,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
/* Enable lazy_refcounts according to image and command line options */
|
/* Enable lazy_refcounts according to image and command line options */
|
||||||
opts = qemu_opts_create(&qcow2_runtime_opts, NULL, 0, &error_abort);
|
opts = qemu_opts_create(&qcow2_runtime_opts, NULL, 0, &error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -1605,7 +1605,7 @@ static int qcow2_create2(const char *filename, int64_t total_size,
|
||||||
ret = bdrv_open(bs, filename, NULL,
|
ret = bdrv_open(bs, filename, NULL,
|
||||||
BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_BACKING,
|
BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_BACKING,
|
||||||
drv, &local_err);
|
drv, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -1685,7 +1685,7 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options,
|
||||||
|
|
||||||
ret = qcow2_create2(filename, sectors, backing_file, backing_fmt, flags,
|
ret = qcow2_create2(filename, sectors, backing_file, backing_fmt, flags,
|
||||||
cluster_size, prealloc, options, version, &local_err);
|
cluster_size, prealloc, options, version, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -361,7 +361,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
|
||||||
|
|
||||||
opts = qemu_opts_create(&raw_runtime_opts, NULL, 0, &error_abort);
|
opts = qemu_opts_create(&raw_runtime_opts, NULL, 0, &error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -448,7 +448,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
|
|
||||||
s->type = FTYPE_FILE;
|
s->type = FTYPE_FILE;
|
||||||
ret = raw_open_common(bs, options, flags, 0, &local_err);
|
ret = raw_open_common(bs, options, flags, 0, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1597,7 +1597,7 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
|
|
||||||
ret = raw_open_common(bs, options, flags, 0, &local_err);
|
ret = raw_open_common(bs, options, flags, 0, &local_err);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1832,7 +1832,7 @@ static int floppy_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
/* open will not fail even if no floppy is inserted, so add O_NONBLOCK */
|
/* open will not fail even if no floppy is inserted, so add O_NONBLOCK */
|
||||||
ret = raw_open_common(bs, options, flags, O_NONBLOCK, &local_err);
|
ret = raw_open_common(bs, options, flags, O_NONBLOCK, &local_err);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1961,7 +1961,7 @@ static int cdrom_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
|
|
||||||
/* open will not fail even if no CD is inserted, so add O_NONBLOCK */
|
/* open will not fail even if no CD is inserted, so add O_NONBLOCK */
|
||||||
ret = raw_open_common(bs, options, flags, O_NONBLOCK, &local_err);
|
ret = raw_open_common(bs, options, flags, O_NONBLOCK, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -2078,7 +2078,7 @@ static int cdrom_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
|
|
||||||
ret = raw_open_common(bs, options, flags, 0, &local_err);
|
ret = raw_open_common(bs, options, flags, 0, &local_err);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -279,7 +279,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
|
|
||||||
opts = qemu_opts_create(&raw_runtime_opts, NULL, 0, &error_abort);
|
opts = qemu_opts_create(&raw_runtime_opts, NULL, 0, &error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -594,7 +594,7 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
QemuOpts *opts = qemu_opts_create(&raw_runtime_opts, NULL, 0,
|
QemuOpts *opts = qemu_opts_create(&raw_runtime_opts, NULL, 0,
|
||||||
&error_abort);
|
&error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto done;
|
goto done;
|
||||||
|
|
|
@ -146,7 +146,7 @@ static int raw_create(const char *filename, QEMUOptionParameter *options,
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = bdrv_create_file(filename, options, &local_err);
|
ret = bdrv_create_file(filename, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -440,7 +440,7 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
|
|
||||||
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
qemu_opts_del(opts);
|
qemu_opts_del(opts);
|
||||||
|
|
|
@ -1385,7 +1385,7 @@ static int sd_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
|
|
||||||
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
|
|
@ -345,7 +345,7 @@ int bdrv_snapshot_load_tmp_by_id_or_name(BlockDriverState *bs,
|
||||||
ret = bdrv_snapshot_load_tmp(bs, NULL, id_or_name, &local_err);
|
ret = bdrv_snapshot_load_tmp(bs, NULL, id_or_name, &local_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1085,7 +1085,7 @@ DLOG(if (stderr == NULL) {
|
||||||
|
|
||||||
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
||||||
qemu_opts_absorb_qdict(opts, options, &local_err);
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
|
42
blockdev.c
42
blockdev.c
|
@ -330,13 +330,13 @@ static DriveInfo *blockdev_init(const char *file, QDict *bs_opts,
|
||||||
* stay in bs_opts for processing by bdrv_open(). */
|
* stay in bs_opts for processing by bdrv_open(). */
|
||||||
id = qdict_get_try_str(bs_opts, "id");
|
id = qdict_get_try_str(bs_opts, "id");
|
||||||
opts = qemu_opts_create(&qemu_common_drive_opts, id, 1, &error);
|
opts = qemu_opts_create(&qemu_common_drive_opts, id, 1, &error);
|
||||||
if (error_is_set(&error)) {
|
if (error) {
|
||||||
error_propagate(errp, error);
|
error_propagate(errp, error);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_opts_absorb_qdict(opts, bs_opts, &error);
|
qemu_opts_absorb_qdict(opts, bs_opts, &error);
|
||||||
if (error_is_set(&error)) {
|
if (error) {
|
||||||
error_propagate(errp, error);
|
error_propagate(errp, error);
|
||||||
goto early_err;
|
goto early_err;
|
||||||
}
|
}
|
||||||
|
@ -437,7 +437,7 @@ static DriveInfo *blockdev_init(const char *file, QDict *bs_opts,
|
||||||
on_write_error = BLOCKDEV_ON_ERROR_ENOSPC;
|
on_write_error = BLOCKDEV_ON_ERROR_ENOSPC;
|
||||||
if ((buf = qemu_opt_get(opts, "werror")) != NULL) {
|
if ((buf = qemu_opt_get(opts, "werror")) != NULL) {
|
||||||
on_write_error = parse_block_error_action(buf, 0, &error);
|
on_write_error = parse_block_error_action(buf, 0, &error);
|
||||||
if (error_is_set(&error)) {
|
if (error) {
|
||||||
error_propagate(errp, error);
|
error_propagate(errp, error);
|
||||||
goto early_err;
|
goto early_err;
|
||||||
}
|
}
|
||||||
|
@ -446,7 +446,7 @@ static DriveInfo *blockdev_init(const char *file, QDict *bs_opts,
|
||||||
on_read_error = BLOCKDEV_ON_ERROR_REPORT;
|
on_read_error = BLOCKDEV_ON_ERROR_REPORT;
|
||||||
if ((buf = qemu_opt_get(opts, "rerror")) != NULL) {
|
if ((buf = qemu_opt_get(opts, "rerror")) != NULL) {
|
||||||
on_read_error = parse_block_error_action(buf, 1, &error);
|
on_read_error = parse_block_error_action(buf, 1, &error);
|
||||||
if (error_is_set(&error)) {
|
if (error) {
|
||||||
error_propagate(errp, error);
|
error_propagate(errp, error);
|
||||||
goto early_err;
|
goto early_err;
|
||||||
}
|
}
|
||||||
|
@ -691,7 +691,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||||
legacy_opts = qemu_opts_create(&qemu_legacy_drive_opts, NULL, 0,
|
legacy_opts = qemu_opts_create(&qemu_legacy_drive_opts, NULL, 0,
|
||||||
&error_abort);
|
&error_abort);
|
||||||
qemu_opts_absorb_qdict(legacy_opts, bs_opts, &local_err);
|
qemu_opts_absorb_qdict(legacy_opts, bs_opts, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -899,13 +899,13 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||||
/* Actual block device init: Functionality shared with blockdev-add */
|
/* Actual block device init: Functionality shared with blockdev-add */
|
||||||
dinfo = blockdev_init(filename, bs_opts, &local_err);
|
dinfo = blockdev_init(filename, bs_opts, &local_err);
|
||||||
if (dinfo == NULL) {
|
if (dinfo == NULL) {
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
}
|
}
|
||||||
goto fail;
|
goto fail;
|
||||||
} else {
|
} else {
|
||||||
assert(!error_is_set(&local_err));
|
assert(!local_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set legacy DriveInfo fields */
|
/* Set legacy DriveInfo fields */
|
||||||
|
@ -1042,7 +1042,7 @@ SnapshotInfo *qmp_blockdev_snapshot_delete_internal_sync(const char *device,
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = bdrv_snapshot_find_by_id_and_name(bs, id, name, &sn, &local_err);
|
ret = bdrv_snapshot_find_by_id_and_name(bs, id, name, &sn, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1055,7 +1055,7 @@ SnapshotInfo *qmp_blockdev_snapshot_delete_internal_sync(const char *device,
|
||||||
}
|
}
|
||||||
|
|
||||||
bdrv_snapshot_delete(bs, id, name, &local_err);
|
bdrv_snapshot_delete(bs, id, name, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1269,7 +1269,7 @@ static void external_snapshot_prepare(BlkTransactionState *common,
|
||||||
state->old_bs = bdrv_lookup_bs(has_device ? device : NULL,
|
state->old_bs = bdrv_lookup_bs(has_device ? device : NULL,
|
||||||
has_node_name ? node_name : NULL,
|
has_node_name ? node_name : NULL,
|
||||||
&local_err);
|
&local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1314,7 +1314,7 @@ static void external_snapshot_prepare(BlkTransactionState *common,
|
||||||
state->old_bs->filename,
|
state->old_bs->filename,
|
||||||
state->old_bs->drv->format_name,
|
state->old_bs->drv->format_name,
|
||||||
NULL, -1, flags, &local_err, false);
|
NULL, -1, flags, &local_err, false);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1383,7 +1383,7 @@ static void drive_backup_prepare(BlkTransactionState *common, Error **errp)
|
||||||
backup->has_on_source_error, backup->on_source_error,
|
backup->has_on_source_error, backup->on_source_error,
|
||||||
backup->has_on_target_error, backup->on_target_error,
|
backup->has_on_target_error, backup->on_target_error,
|
||||||
&local_err);
|
&local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
state->bs = NULL;
|
state->bs = NULL;
|
||||||
state->job = NULL;
|
state->job = NULL;
|
||||||
|
@ -1475,7 +1475,7 @@ void qmp_transaction(TransactionActionList *dev_list, Error **errp)
|
||||||
QSIMPLEQ_INSERT_TAIL(&snap_bdrv_states, state, entry);
|
QSIMPLEQ_INSERT_TAIL(&snap_bdrv_states, state, entry);
|
||||||
|
|
||||||
state->ops->prepare(state, &local_err);
|
state->ops->prepare(state, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto delete_and_fail;
|
goto delete_and_fail;
|
||||||
}
|
}
|
||||||
|
@ -1556,7 +1556,7 @@ void qmp_block_passwd(bool has_device, const char *device,
|
||||||
bs = bdrv_lookup_bs(has_device ? device : NULL,
|
bs = bdrv_lookup_bs(has_device ? device : NULL,
|
||||||
has_node_name ? node_name : NULL,
|
has_node_name ? node_name : NULL,
|
||||||
&local_err);
|
&local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1621,7 +1621,7 @@ void qmp_change_blockdev(const char *device, const char *filename,
|
||||||
}
|
}
|
||||||
|
|
||||||
eject_device(bs, 0, &err);
|
eject_device(bs, 0, &err);
|
||||||
if (error_is_set(&err)) {
|
if (err) {
|
||||||
error_propagate(errp, err);
|
error_propagate(errp, err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1758,7 +1758,7 @@ void qmp_block_resize(bool has_device, const char *device,
|
||||||
bs = bdrv_lookup_bs(has_device ? device : NULL,
|
bs = bdrv_lookup_bs(has_device ? device : NULL,
|
||||||
has_node_name ? node_name : NULL,
|
has_node_name ? node_name : NULL,
|
||||||
&local_err);
|
&local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1851,7 +1851,7 @@ void qmp_block_stream(const char *device, bool has_base,
|
||||||
|
|
||||||
stream_start(bs, base_bs, base, has_speed ? speed : 0,
|
stream_start(bs, base_bs, base, has_speed ? speed : 0,
|
||||||
on_error, block_job_cb, bs, &local_err);
|
on_error, block_job_cb, bs, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2009,7 +2009,7 @@ void qmp_drive_backup(const char *device, const char *target,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2150,7 +2150,7 @@ void qmp_drive_mirror(const char *device, const char *target,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2289,7 +2289,7 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp)
|
||||||
|
|
||||||
visit_type_BlockdevOptions(qmp_output_get_visitor(ov),
|
visit_type_BlockdevOptions(qmp_output_get_visitor(ov),
|
||||||
&options, NULL, &local_err);
|
&options, NULL, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
@ -2300,7 +2300,7 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp)
|
||||||
qdict_flatten(qdict);
|
qdict_flatten(qdict);
|
||||||
|
|
||||||
blockdev_init(NULL, qdict, &local_err);
|
blockdev_init(NULL, qdict, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ void *block_job_create(const BlockJobDriver *driver, BlockDriverState *bs,
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
block_job_set_speed(job, speed, &local_err);
|
block_job_set_speed(job, speed, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
bs->job = NULL;
|
bs->job = NULL;
|
||||||
g_free(job);
|
g_free(job);
|
||||||
bdrv_set_in_use(bs, 0);
|
bdrv_set_in_use(bs, 0);
|
||||||
|
@ -92,7 +92,7 @@ void block_job_set_speed(BlockJob *job, int64_t speed, Error **errp)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
job->driver->set_speed(job, speed, &local_err);
|
job->driver->set_speed(job, speed, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
11
hmp.c
11
hmp.c
|
@ -881,7 +881,7 @@ void hmp_balloon(Monitor *mon, const QDict *qdict)
|
||||||
Error *errp = NULL;
|
Error *errp = NULL;
|
||||||
|
|
||||||
qmp_balloon(value, &errp);
|
qmp_balloon(value, &errp);
|
||||||
if (error_is_set(&errp)) {
|
if (errp) {
|
||||||
monitor_printf(mon, "balloon: %s\n", error_get_pretty(errp));
|
monitor_printf(mon, "balloon: %s\n", error_get_pretty(errp));
|
||||||
error_free(errp);
|
error_free(errp);
|
||||||
}
|
}
|
||||||
|
@ -1118,7 +1118,7 @@ void hmp_change(Monitor *mon, const QDict *qdict)
|
||||||
}
|
}
|
||||||
|
|
||||||
qmp_change(device, target, !!arg, arg, &err);
|
qmp_change(device, target, !!arg, arg, &err);
|
||||||
if (error_is_set(&err) &&
|
if (err &&
|
||||||
error_get_class(err) == ERROR_CLASS_DEVICE_ENCRYPTED) {
|
error_get_class(err) == ERROR_CLASS_DEVICE_ENCRYPTED) {
|
||||||
error_free(err);
|
error_free(err);
|
||||||
monitor_read_block_device_key(mon, device, NULL, NULL);
|
monitor_read_block_device_key(mon, device, NULL, NULL);
|
||||||
|
@ -1234,7 +1234,8 @@ static void hmp_migrate_status_cb(void *opaque)
|
||||||
MigrationInfo *info;
|
MigrationInfo *info;
|
||||||
|
|
||||||
info = qmp_query_migrate(NULL);
|
info = qmp_query_migrate(NULL);
|
||||||
if (!info->has_status || strcmp(info->status, "active") == 0) {
|
if (!info->has_status || strcmp(info->status, "active") == 0 ||
|
||||||
|
strcmp(info->status, "setup") == 0) {
|
||||||
if (info->has_disk) {
|
if (info->has_disk) {
|
||||||
int progress;
|
int progress;
|
||||||
|
|
||||||
|
@ -1335,12 +1336,12 @@ void hmp_netdev_add(Monitor *mon, const QDict *qdict)
|
||||||
QemuOpts *opts;
|
QemuOpts *opts;
|
||||||
|
|
||||||
opts = qemu_opts_from_qdict(qemu_find_opts("netdev"), qdict, &err);
|
opts = qemu_opts_from_qdict(qemu_find_opts("netdev"), qdict, &err);
|
||||||
if (error_is_set(&err)) {
|
if (err) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
netdev_add(opts, &err);
|
netdev_add(opts, &err);
|
||||||
if (error_is_set(&err)) {
|
if (err) {
|
||||||
qemu_opts_del(opts);
|
qemu_opts_del(opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ static PCIDevice *qemu_pci_hot_add_nic(Monitor *mon,
|
||||||
qemu_opt_set(opts, "type", "nic");
|
qemu_opt_set(opts, "type", "nic");
|
||||||
|
|
||||||
ret = net_client_init(opts, 0, &local_err);
|
ret = net_client_init(opts, 0, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -322,7 +322,7 @@ static int pci_device_hot_remove(Monitor *mon, const char *pci_addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
qdev_unplug(&d->qdev, &local_err);
|
qdev_unplug(&d->qdev, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
monitor_printf(mon, "%s\n", error_get_pretty(local_err));
|
monitor_printf(mon, "%s\n", error_get_pretty(local_err));
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -1391,7 +1391,7 @@ static USBDevice *usb_net_init(USBBus *bus, const char *cmdline)
|
||||||
qemu_opt_set(opts, "model", "usb");
|
qemu_opt_set(opts, "model", "usb");
|
||||||
|
|
||||||
idx = net_client_init(opts, 0, &local_err);
|
idx = net_client_init(opts, 0, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
95
monitor.c
95
monitor.c
|
@ -56,6 +56,7 @@
|
||||||
#include "qapi/qmp/qjson.h"
|
#include "qapi/qmp/qjson.h"
|
||||||
#include "qapi/qmp/json-streamer.h"
|
#include "qapi/qmp/json-streamer.h"
|
||||||
#include "qapi/qmp/json-parser.h"
|
#include "qapi/qmp/json-parser.h"
|
||||||
|
#include <qom/object_interfaces.h>
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
@ -4254,6 +4255,87 @@ static const char *next_arg_type(const char *typestr)
|
||||||
return (p != NULL ? ++p : typestr);
|
return (p != NULL ? ++p : typestr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void device_add_completion(ReadLineState *rs, const char *str)
|
||||||
|
{
|
||||||
|
GSList *list, *elt;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
len = strlen(str);
|
||||||
|
readline_set_completion_index(rs, len);
|
||||||
|
list = elt = object_class_get_list(TYPE_DEVICE, false);
|
||||||
|
while (elt) {
|
||||||
|
const char *name;
|
||||||
|
DeviceClass *dc = OBJECT_CLASS_CHECK(DeviceClass, elt->data,
|
||||||
|
TYPE_DEVICE);
|
||||||
|
name = object_class_get_name(OBJECT_CLASS(dc));
|
||||||
|
if (!strncmp(name, str, len)) {
|
||||||
|
readline_add_completion(rs, name);
|
||||||
|
}
|
||||||
|
elt = elt->next;
|
||||||
|
}
|
||||||
|
g_slist_free(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void object_add_completion(ReadLineState *rs, const char *str)
|
||||||
|
{
|
||||||
|
GSList *list, *elt;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
len = strlen(str);
|
||||||
|
readline_set_completion_index(rs, len);
|
||||||
|
list = elt = object_class_get_list(TYPE_USER_CREATABLE, false);
|
||||||
|
while (elt) {
|
||||||
|
const char *name;
|
||||||
|
|
||||||
|
name = object_class_get_name(OBJECT_CLASS(elt->data));
|
||||||
|
if (!strncmp(name, str, len) && strcmp(name, TYPE_USER_CREATABLE)) {
|
||||||
|
readline_add_completion(rs, name);
|
||||||
|
}
|
||||||
|
elt = elt->next;
|
||||||
|
}
|
||||||
|
g_slist_free(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void device_del_completion(ReadLineState *rs, BusState *bus,
|
||||||
|
const char *str, size_t len)
|
||||||
|
{
|
||||||
|
BusChild *kid;
|
||||||
|
|
||||||
|
QTAILQ_FOREACH(kid, &bus->children, sibling) {
|
||||||
|
DeviceState *dev = kid->child;
|
||||||
|
BusState *dev_child;
|
||||||
|
|
||||||
|
if (dev->id && !strncmp(str, dev->id, len)) {
|
||||||
|
readline_add_completion(rs, dev->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
QLIST_FOREACH(dev_child, &dev->child_bus, sibling) {
|
||||||
|
device_del_completion(rs, dev_child, str, len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void object_del_completion(ReadLineState *rs, const char *str)
|
||||||
|
{
|
||||||
|
ObjectPropertyInfoList *list, *start;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
len = strlen(str);
|
||||||
|
readline_set_completion_index(rs, len);
|
||||||
|
|
||||||
|
start = list = qmp_qom_list("/objects", NULL);
|
||||||
|
while (list) {
|
||||||
|
ObjectPropertyInfo *info = list->value;
|
||||||
|
|
||||||
|
if (!strncmp(info->type, "child<", 5)
|
||||||
|
&& !strncmp(info->name, str, len)) {
|
||||||
|
readline_add_completion(rs, info->name);
|
||||||
|
}
|
||||||
|
list = list->next;
|
||||||
|
}
|
||||||
|
qapi_free_ObjectPropertyInfoList(start);
|
||||||
|
}
|
||||||
|
|
||||||
static void monitor_find_completion_by_table(Monitor *mon,
|
static void monitor_find_completion_by_table(Monitor *mon,
|
||||||
const mon_cmd_t *cmd_table,
|
const mon_cmd_t *cmd_table,
|
||||||
char **args,
|
char **args,
|
||||||
|
@ -4317,6 +4399,13 @@ static void monitor_find_completion_by_table(Monitor *mon,
|
||||||
readline_set_completion_index(mon->rs, strlen(str));
|
readline_set_completion_index(mon->rs, strlen(str));
|
||||||
bdrv_iterate(block_completion_it, &mbs);
|
bdrv_iterate(block_completion_it, &mbs);
|
||||||
break;
|
break;
|
||||||
|
case 'O':
|
||||||
|
if (!strcmp(cmd->name, "device_add") && nb_args == 2) {
|
||||||
|
device_add_completion(mon->rs, str);
|
||||||
|
} else if (!strcmp(cmd->name, "object_add") && nb_args == 2) {
|
||||||
|
object_add_completion(mon->rs, str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
case 'S':
|
case 'S':
|
||||||
if (!strcmp(cmd->name, "sendkey")) {
|
if (!strcmp(cmd->name, "sendkey")) {
|
||||||
|
@ -4330,6 +4419,12 @@ static void monitor_find_completion_by_table(Monitor *mon,
|
||||||
} else if (!strcmp(cmd->name, "help|?")) {
|
} else if (!strcmp(cmd->name, "help|?")) {
|
||||||
monitor_find_completion_by_table(mon, cmd_table,
|
monitor_find_completion_by_table(mon, cmd_table,
|
||||||
&args[1], nb_args - 1);
|
&args[1], nb_args - 1);
|
||||||
|
} else if (!strcmp(cmd->name, "device_del") && nb_args == 2) {
|
||||||
|
size_t len = strlen(str);
|
||||||
|
readline_set_completion_index(mon->rs, len);
|
||||||
|
device_del_completion(mon->rs, sysbus_get_default(), str, len);
|
||||||
|
} else if (!strcmp(cmd->name, "object_del") && nb_args == 2) {
|
||||||
|
object_del_completion(mon->rs, str);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
12
net/net.c
12
net/net.c
|
@ -882,7 +882,7 @@ void net_host_device_add(Monitor *mon, const QDict *qdict)
|
||||||
qemu_opt_set(opts, "type", device);
|
qemu_opt_set(opts, "type", device);
|
||||||
|
|
||||||
net_client_init(opts, 0, &local_err);
|
net_client_init(opts, 0, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
monitor_printf(mon, "adding host network device %s failed\n", device);
|
monitor_printf(mon, "adding host network device %s failed\n", device);
|
||||||
|
@ -918,17 +918,17 @@ int qmp_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret)
|
||||||
QemuOpts *opts;
|
QemuOpts *opts;
|
||||||
|
|
||||||
opts_list = qemu_find_opts_err("netdev", &local_err);
|
opts_list = qemu_find_opts_err("netdev", &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
goto exit_err;
|
goto exit_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
opts = qemu_opts_from_qdict(opts_list, qdict, &local_err);
|
opts = qemu_opts_from_qdict(opts_list, qdict, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
goto exit_err;
|
goto exit_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
netdev_add(opts, &local_err);
|
netdev_add(opts, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qemu_opts_del(opts);
|
qemu_opts_del(opts);
|
||||||
goto exit_err;
|
goto exit_err;
|
||||||
}
|
}
|
||||||
|
@ -1152,7 +1152,7 @@ static int net_init_client(QemuOpts *opts, void *dummy)
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
net_client_init(opts, 0, &local_err);
|
net_client_init(opts, 0, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1167,7 +1167,7 @@ static int net_init_netdev(QemuOpts *opts, void *dummy)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = net_client_init(opts, 1, &local_err);
|
ret = net_client_init(opts, 1, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -436,6 +436,28 @@
|
||||||
##
|
##
|
||||||
{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }
|
{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @ChardevBackendInfo:
|
||||||
|
#
|
||||||
|
# Information about a character device backend
|
||||||
|
#
|
||||||
|
# @name: The backend name
|
||||||
|
#
|
||||||
|
# Since: 2.0
|
||||||
|
##
|
||||||
|
{ 'type': 'ChardevBackendInfo', 'data': {'name': 'str'} }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @query-chardev-backends:
|
||||||
|
#
|
||||||
|
# Returns information about character device backends.
|
||||||
|
#
|
||||||
|
# Returns: a list of @ChardevBackendInfo
|
||||||
|
#
|
||||||
|
# Since: 2.0
|
||||||
|
##
|
||||||
|
{ 'command': 'query-chardev-backends', 'returns': ['ChardevBackendInfo'] }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @DataFormat:
|
# @DataFormat:
|
||||||
#
|
#
|
||||||
|
|
|
@ -656,7 +656,7 @@ int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
|
|
||||||
opts = qemu_opts_from_qdict(qemu_find_opts("device"), qdict, &local_err);
|
opts = qemu_opts_from_qdict(qemu_find_opts("device"), qdict, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
25
qemu-char.c
25
qemu-char.c
|
@ -2725,7 +2725,7 @@ static CharDriverState *qemu_chr_open_socket(QemuOpts *opts)
|
||||||
|
|
||||||
chr = qemu_chr_open_socket_fd(fd, do_nodelay, is_listen, is_telnet,
|
chr = qemu_chr_open_socket_fd(fd, do_nodelay, is_listen, is_telnet,
|
||||||
is_waitconnect, &local_err);
|
is_waitconnect, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
return chr;
|
return chr;
|
||||||
|
@ -2938,7 +2938,7 @@ QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename)
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
opts = qemu_opts_create(qemu_find_opts("chardev"), label, 1, &local_err);
|
opts = qemu_opts_create(qemu_find_opts("chardev"), label, 1, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -3323,7 +3323,7 @@ CharDriverState *qemu_chr_new(const char *label, const char *filename, void (*in
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
chr = qemu_chr_new_from_opts(opts, init, &err);
|
chr = qemu_chr_new_from_opts(opts, init, &err);
|
||||||
if (error_is_set(&err)) {
|
if (err) {
|
||||||
error_report("%s", error_get_pretty(err));
|
error_report("%s", error_get_pretty(err));
|
||||||
error_free(err);
|
error_free(err);
|
||||||
}
|
}
|
||||||
|
@ -3432,6 +3432,25 @@ ChardevInfoList *qmp_query_chardev(Error **errp)
|
||||||
return chr_list;
|
return chr_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ChardevBackendInfoList *qmp_query_chardev_backends(Error **errp)
|
||||||
|
{
|
||||||
|
ChardevBackendInfoList *backend_list = NULL;
|
||||||
|
CharDriver *c = NULL;
|
||||||
|
GSList *i = NULL;
|
||||||
|
|
||||||
|
for (i = backends; i; i = i->next) {
|
||||||
|
ChardevBackendInfoList *info = g_malloc0(sizeof(*info));
|
||||||
|
c = i->data;
|
||||||
|
info->value = g_malloc0(sizeof(*info->value));
|
||||||
|
info->value->name = g_strdup(c->name);
|
||||||
|
|
||||||
|
info->next = backend_list;
|
||||||
|
backend_list = info;
|
||||||
|
}
|
||||||
|
|
||||||
|
return backend_list;
|
||||||
|
}
|
||||||
|
|
||||||
CharDriverState *qemu_chr_find(const char *name)
|
CharDriverState *qemu_chr_find(const char *name)
|
||||||
{
|
{
|
||||||
CharDriverState *chr;
|
CharDriverState *chr;
|
||||||
|
|
|
@ -419,7 +419,7 @@ static int img_create(int argc, char **argv)
|
||||||
|
|
||||||
bdrv_img_create(filename, fmt, base_filename, base_fmt,
|
bdrv_img_create(filename, fmt, base_filename, base_fmt,
|
||||||
options, img_size, BDRV_O_FLAGS, &local_err, quiet);
|
options, img_size, BDRV_O_FLAGS, &local_err, quiet);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_report("%s: %s", filename, error_get_pretty(local_err));
|
error_report("%s: %s", filename, error_get_pretty(local_err));
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1289,7 +1289,7 @@ static int img_convert(int argc, char **argv)
|
||||||
|
|
||||||
bdrv_snapshot_load_tmp_by_id_or_name(bs[0], snapshot_name, &local_err);
|
bdrv_snapshot_load_tmp_by_id_or_name(bs[0], snapshot_name, &local_err);
|
||||||
}
|
}
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_report("Failed to load snapshot: %s",
|
error_report("Failed to load snapshot: %s",
|
||||||
error_get_pretty(local_err));
|
error_get_pretty(local_err));
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
|
@ -1775,7 +1775,7 @@ static ImageInfoList *collect_image_info_list(const char *filename,
|
||||||
}
|
}
|
||||||
|
|
||||||
bdrv_query_image_info(bs, &info, &err);
|
bdrv_query_image_info(bs, &info, &err);
|
||||||
if (error_is_set(&err)) {
|
if (err) {
|
||||||
error_report("%s", error_get_pretty(err));
|
error_report("%s", error_get_pretty(err));
|
||||||
error_free(err);
|
error_free(err);
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -2184,7 +2184,7 @@ static int img_snapshot(int argc, char **argv)
|
||||||
|
|
||||||
case SNAPSHOT_DELETE:
|
case SNAPSHOT_DELETE:
|
||||||
bdrv_snapshot_delete_by_id_or_name(bs, snapshot_name, &err);
|
bdrv_snapshot_delete_by_id_or_name(bs, snapshot_name, &err);
|
||||||
if (error_is_set(&err)) {
|
if (err) {
|
||||||
error_report("Could not delete snapshot '%s': (%s)",
|
error_report("Could not delete snapshot '%s': (%s)",
|
||||||
snapshot_name, error_get_pretty(err));
|
snapshot_name, error_get_pretty(err));
|
||||||
error_free(err);
|
error_free(err);
|
||||||
|
|
|
@ -108,7 +108,7 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ga_wait_child(pid, &status, &local_err);
|
ga_wait_child(pid, &status, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(err, local_err);
|
error_propagate(err, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -181,7 +181,7 @@ void qmp_guest_set_time(int64_t time_ns, Error **errp)
|
||||||
}
|
}
|
||||||
|
|
||||||
ga_wait_child(pid, &status, &local_err);
|
ga_wait_child(pid, &status, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -669,7 +669,7 @@ static void execute_fsfreeze_hook(FsfreezeHookArg arg, Error **err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ga_wait_child(pid, &status, &local_err);
|
ga_wait_child(pid, &status, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(err, local_err);
|
error_propagate(err, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -713,14 +713,14 @@ int64_t qmp_guest_fsfreeze_freeze(Error **err)
|
||||||
slog("guest-fsfreeze called");
|
slog("guest-fsfreeze called");
|
||||||
|
|
||||||
execute_fsfreeze_hook(FSFREEZE_HOOK_FREEZE, &local_err);
|
execute_fsfreeze_hook(FSFREEZE_HOOK_FREEZE, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(err, local_err);
|
error_propagate(err, local_err);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
QTAILQ_INIT(&mounts);
|
QTAILQ_INIT(&mounts);
|
||||||
build_fs_mount_list(&mounts, &local_err);
|
build_fs_mount_list(&mounts, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(err, local_err);
|
error_propagate(err, local_err);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -780,7 +780,7 @@ int64_t qmp_guest_fsfreeze_thaw(Error **err)
|
||||||
|
|
||||||
QTAILQ_INIT(&mounts);
|
QTAILQ_INIT(&mounts);
|
||||||
build_fs_mount_list(&mounts, &local_err);
|
build_fs_mount_list(&mounts, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(err, local_err);
|
error_propagate(err, local_err);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -861,7 +861,7 @@ void qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **err)
|
||||||
|
|
||||||
QTAILQ_INIT(&mounts);
|
QTAILQ_INIT(&mounts);
|
||||||
build_fs_mount_list(&mounts, &local_err);
|
build_fs_mount_list(&mounts, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(err, local_err);
|
error_propagate(err, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -957,7 +957,7 @@ static void bios_supports_mode(const char *pmutils_bin, const char *pmutils_arg,
|
||||||
}
|
}
|
||||||
|
|
||||||
ga_wait_child(pid, &status, &local_err);
|
ga_wait_child(pid, &status, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(err, local_err);
|
error_propagate(err, local_err);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -1034,7 +1034,7 @@ static void guest_suspend(const char *pmutils_bin, const char *sysfile_str,
|
||||||
}
|
}
|
||||||
|
|
||||||
ga_wait_child(pid, &status, &local_err);
|
ga_wait_child(pid, &status, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(err, local_err);
|
error_propagate(err, local_err);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
|
@ -197,7 +197,7 @@ int64_t qmp_guest_fsfreeze_freeze(Error **err)
|
||||||
|
|
||||||
error:
|
error:
|
||||||
qmp_guest_fsfreeze_thaw(&local_err);
|
qmp_guest_fsfreeze_thaw(&local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
g_debug("cleanup thaw: %s", error_get_pretty(local_err));
|
g_debug("cleanup thaw: %s", error_get_pretty(local_err));
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1923,6 +1923,47 @@ EQMP
|
||||||
.mhandler.cmd_new = qmp_marshal_input_query_chardev,
|
.mhandler.cmd_new = qmp_marshal_input_query_chardev,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
SQMP
|
||||||
|
query-chardev-backends
|
||||||
|
-------------
|
||||||
|
|
||||||
|
List available character device backends.
|
||||||
|
|
||||||
|
Each backend is represented by a json-object, the returned value is a json-array
|
||||||
|
of all backends.
|
||||||
|
|
||||||
|
Each json-object contains:
|
||||||
|
|
||||||
|
- "name": backend name (json-string)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
-> { "execute": "query-chardev-backends" }
|
||||||
|
<- {
|
||||||
|
"return":[
|
||||||
|
{
|
||||||
|
"name":"udp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"tcp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"unix"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"spiceport"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
EQMP
|
||||||
|
|
||||||
|
{
|
||||||
|
.name = "query-chardev-backends",
|
||||||
|
.args_type = "",
|
||||||
|
.mhandler.cmd_new = qmp_marshal_input_query_chardev_backends,
|
||||||
|
},
|
||||||
|
|
||||||
SQMP
|
SQMP
|
||||||
query-block
|
query-block
|
||||||
-----------
|
-----------
|
||||||
|
|
4
savevm.c
4
savevm.c
|
@ -880,7 +880,7 @@ static int del_existing_snapshots(Monitor *mon, const char *name)
|
||||||
if (bdrv_can_snapshot(bs) &&
|
if (bdrv_can_snapshot(bs) &&
|
||||||
bdrv_snapshot_find(bs, snapshot, name) >= 0) {
|
bdrv_snapshot_find(bs, snapshot, name) >= 0) {
|
||||||
bdrv_snapshot_delete_by_id_or_name(bs, name, &err);
|
bdrv_snapshot_delete_by_id_or_name(bs, name, &err);
|
||||||
if (error_is_set(&err)) {
|
if (err) {
|
||||||
monitor_printf(mon,
|
monitor_printf(mon,
|
||||||
"Error while deleting snapshot on device '%s':"
|
"Error while deleting snapshot on device '%s':"
|
||||||
" %s\n",
|
" %s\n",
|
||||||
|
@ -1115,7 +1115,7 @@ void do_delvm(Monitor *mon, const QDict *qdict)
|
||||||
while ((bs1 = bdrv_next(bs1))) {
|
while ((bs1 = bdrv_next(bs1))) {
|
||||||
if (bdrv_can_snapshot(bs1)) {
|
if (bdrv_can_snapshot(bs1)) {
|
||||||
bdrv_snapshot_delete_by_id_or_name(bs, name, &err);
|
bdrv_snapshot_delete_by_id_or_name(bs, name, &err);
|
||||||
if (error_is_set(&err)) {
|
if (err) {
|
||||||
monitor_printf(mon,
|
monitor_printf(mon,
|
||||||
"Error while deleting snapshot on device '%s':"
|
"Error while deleting snapshot on device '%s':"
|
||||||
" %s\n",
|
" %s\n",
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
# (QEMU)
|
# (QEMU)
|
||||||
|
|
||||||
import qmp
|
import qmp
|
||||||
|
import json
|
||||||
import readline
|
import readline
|
||||||
import sys
|
import sys
|
||||||
import pprint
|
import pprint
|
||||||
|
@ -107,6 +108,8 @@ class QMPShell(qmp.QEMUMonitorProtocol):
|
||||||
value = True
|
value = True
|
||||||
elif opt[1] == 'false':
|
elif opt[1] == 'false':
|
||||||
value = False
|
value = False
|
||||||
|
elif opt[1].startswith('{'):
|
||||||
|
value = json.loads(opt[1])
|
||||||
else:
|
else:
|
||||||
value = opt[1]
|
value = opt[1]
|
||||||
qmpcmd['arguments'][opt[0]] = value
|
qmpcmd['arguments'][opt[0]] = value
|
||||||
|
|
|
@ -92,7 +92,7 @@ static void test_validate_struct(TestInputVisitorData *data,
|
||||||
v = validate_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo' }");
|
v = validate_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo' }");
|
||||||
|
|
||||||
visit_type_TestStruct(v, &p, NULL, &errp);
|
visit_type_TestStruct(v, &p, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_free(p->string);
|
g_free(p->string);
|
||||||
g_free(p);
|
g_free(p);
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ static void test_validate_struct_nested(TestInputVisitorData *data,
|
||||||
v = validate_test_init(data, "{ 'string0': 'string0', 'dict1': { 'string1': 'string1', 'dict2': { 'userdef1': { 'integer': 42, 'string': 'string' }, 'string2': 'string2'}}}");
|
v = validate_test_init(data, "{ 'string0': 'string0', 'dict1': { 'string1': 'string1', 'dict2': { 'userdef1': { 'integer': 42, 'string': 'string' }, 'string2': 'string2'}}}");
|
||||||
|
|
||||||
visit_type_UserDefNested(v, &udp, NULL, &errp);
|
visit_type_UserDefNested(v, &udp, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
qapi_free_UserDefNested(udp);
|
qapi_free_UserDefNested(udp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ static void test_validate_list(TestInputVisitorData *data,
|
||||||
v = validate_test_init(data, "[ { 'string': 'string0', 'integer': 42 }, { 'string': 'string1', 'integer': 43 }, { 'string': 'string2', 'integer': 44 } ]");
|
v = validate_test_init(data, "[ { 'string': 'string0', 'integer': 42 }, { 'string': 'string1', 'integer': 43 }, { 'string': 'string2', 'integer': 44 } ]");
|
||||||
|
|
||||||
visit_type_UserDefOneList(v, &head, NULL, &errp);
|
visit_type_UserDefOneList(v, &head, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
qapi_free_UserDefOneList(head);
|
qapi_free_UserDefOneList(head);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ static void test_validate_union(TestInputVisitorData *data,
|
||||||
v = validate_test_init(data, "{ 'type': 'b', 'data' : { 'integer': 42 } }");
|
v = validate_test_init(data, "{ 'type': 'b', 'data' : { 'integer': 42 } }");
|
||||||
|
|
||||||
visit_type_UserDefUnion(v, &tmp, NULL, &errp);
|
visit_type_UserDefUnion(v, &tmp, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
qapi_free_UserDefUnion(tmp);
|
qapi_free_UserDefUnion(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ static void test_validate_fail_struct(TestInputVisitorData *data,
|
||||||
v = validate_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo', 'extra': 42 }");
|
v = validate_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo', 'extra': 42 }");
|
||||||
|
|
||||||
visit_type_TestStruct(v, &p, NULL, &errp);
|
visit_type_TestStruct(v, &p, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp));
|
g_assert(errp);
|
||||||
if (p) {
|
if (p) {
|
||||||
g_free(p->string);
|
g_free(p->string);
|
||||||
}
|
}
|
||||||
|
@ -166,7 +166,7 @@ static void test_validate_fail_struct_nested(TestInputVisitorData *data,
|
||||||
v = validate_test_init(data, "{ 'string0': 'string0', 'dict1': { 'string1': 'string1', 'dict2': { 'userdef1': { 'integer': 42, 'string': 'string', 'extra': [42, 23, {'foo':'bar'}] }, 'string2': 'string2'}}}");
|
v = validate_test_init(data, "{ 'string0': 'string0', 'dict1': { 'string1': 'string1', 'dict2': { 'userdef1': { 'integer': 42, 'string': 'string', 'extra': [42, 23, {'foo':'bar'}] }, 'string2': 'string2'}}}");
|
||||||
|
|
||||||
visit_type_UserDefNested(v, &udp, NULL, &errp);
|
visit_type_UserDefNested(v, &udp, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp));
|
g_assert(errp);
|
||||||
qapi_free_UserDefNested(udp);
|
qapi_free_UserDefNested(udp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ static void test_validate_fail_list(TestInputVisitorData *data,
|
||||||
v = validate_test_init(data, "[ { 'string': 'string0', 'integer': 42 }, { 'string': 'string1', 'integer': 43 }, { 'string': 'string2', 'integer': 44, 'extra': 'ggg' } ]");
|
v = validate_test_init(data, "[ { 'string': 'string0', 'integer': 42 }, { 'string': 'string1', 'integer': 43 }, { 'string': 'string2', 'integer': 44, 'extra': 'ggg' } ]");
|
||||||
|
|
||||||
visit_type_UserDefOneList(v, &head, NULL, &errp);
|
visit_type_UserDefOneList(v, &head, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp));
|
g_assert(errp);
|
||||||
qapi_free_UserDefOneList(head);
|
qapi_free_UserDefOneList(head);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ static void test_validate_fail_union(TestInputVisitorData *data,
|
||||||
v = validate_test_init(data, "{ 'type': 'b', 'data' : { 'integer': 42 }, 'extra': 'yyy' }");
|
v = validate_test_init(data, "{ 'type': 'b', 'data' : { 'integer': 42 }, 'extra': 'yyy' }");
|
||||||
|
|
||||||
visit_type_UserDefUnion(v, &tmp, NULL, &errp);
|
visit_type_UserDefUnion(v, &tmp, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp));
|
g_assert(errp);
|
||||||
qapi_free_UserDefUnion(tmp);
|
qapi_free_UserDefUnion(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ static void test_visitor_in_int(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "%" PRId64, value);
|
v = visitor_input_test_init(data, "%" PRId64, value);
|
||||||
|
|
||||||
visit_type_int(v, &res, NULL, &errp);
|
visit_type_int(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpint(res, ==, value);
|
g_assert_cmpint(res, ==, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ static void test_visitor_in_int_overflow(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "%f", DBL_MAX);
|
v = visitor_input_test_init(data, "%f", DBL_MAX);
|
||||||
|
|
||||||
visit_type_int(v, &res, NULL, &errp);
|
visit_type_int(v, &res, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp));
|
g_assert(errp);
|
||||||
error_free(errp);
|
error_free(errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ static void test_visitor_in_bool(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "true");
|
v = visitor_input_test_init(data, "true");
|
||||||
|
|
||||||
visit_type_bool(v, &res, NULL, &errp);
|
visit_type_bool(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpint(res, ==, true);
|
g_assert_cmpint(res, ==, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,7 +142,7 @@ static void test_visitor_in_number(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "%f", value);
|
v = visitor_input_test_init(data, "%f", value);
|
||||||
|
|
||||||
visit_type_number(v, &res, NULL, &errp);
|
visit_type_number(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpfloat(res, ==, value);
|
g_assert_cmpfloat(res, ==, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,7 +156,7 @@ static void test_visitor_in_string(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "%s", value);
|
v = visitor_input_test_init(data, "%s", value);
|
||||||
|
|
||||||
visit_type_str(v, &res, NULL, &errp);
|
visit_type_str(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpstr(res, ==, value);
|
g_assert_cmpstr(res, ==, value);
|
||||||
|
|
||||||
g_free(res);
|
g_free(res);
|
||||||
|
@ -175,7 +175,7 @@ static void test_visitor_in_enum(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "%s", EnumOne_lookup[i]);
|
v = visitor_input_test_init(data, "%s", EnumOne_lookup[i]);
|
||||||
|
|
||||||
visit_type_EnumOne(v, &res, NULL, &errp);
|
visit_type_EnumOne(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpint(i, ==, res);
|
g_assert_cmpint(i, ==, res);
|
||||||
|
|
||||||
visitor_input_teardown(data, NULL);
|
visitor_input_teardown(data, NULL);
|
||||||
|
@ -223,7 +223,7 @@ static void test_visitor_in_struct(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo' }");
|
v = visitor_input_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo' }");
|
||||||
|
|
||||||
visit_type_TestStruct(v, &p, NULL, &errp);
|
visit_type_TestStruct(v, &p, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpint(p->integer, ==, -42);
|
g_assert_cmpint(p->integer, ==, -42);
|
||||||
g_assert(p->boolean == true);
|
g_assert(p->boolean == true);
|
||||||
g_assert_cmpstr(p->string, ==, "foo");
|
g_assert_cmpstr(p->string, ==, "foo");
|
||||||
|
@ -248,7 +248,7 @@ static void test_visitor_in_struct_nested(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "{ 'string0': 'string0', 'dict1': { 'string1': 'string1', 'dict2': { 'userdef1': { 'integer': 42, 'string': 'string' }, 'string2': 'string2'}}}");
|
v = visitor_input_test_init(data, "{ 'string0': 'string0', 'dict1': { 'string1': 'string1', 'dict2': { 'userdef1': { 'integer': 42, 'string': 'string' }, 'string2': 'string2'}}}");
|
||||||
|
|
||||||
visit_type_UserDefNested(v, &udp, NULL, &errp);
|
visit_type_UserDefNested(v, &udp, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
|
|
||||||
check_and_free_str(udp->string0, "string0");
|
check_and_free_str(udp->string0, "string0");
|
||||||
check_and_free_str(udp->dict1.string1, "string1");
|
check_and_free_str(udp->dict1.string1, "string1");
|
||||||
|
@ -272,7 +272,7 @@ static void test_visitor_in_list(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "[ { 'string': 'string0', 'integer': 42 }, { 'string': 'string1', 'integer': 43 }, { 'string': 'string2', 'integer': 44 } ]");
|
v = visitor_input_test_init(data, "[ { 'string': 'string0', 'integer': 42 }, { 'string': 'string1', 'integer': 43 }, { 'string': 'string2', 'integer': 44 } ]");
|
||||||
|
|
||||||
visit_type_UserDefOneList(v, &head, NULL, &errp);
|
visit_type_UserDefOneList(v, &head, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert(head != NULL);
|
g_assert(head != NULL);
|
||||||
|
|
||||||
for (i = 0, item = head; item; item = item->next, i++) {
|
for (i = 0, item = head; item; item = item->next, i++) {
|
||||||
|
@ -601,7 +601,7 @@ static void test_visitor_in_errors(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "{ 'integer': false, 'boolean': 'foo', 'string': -42 }");
|
v = visitor_input_test_init(data, "{ 'integer': false, 'boolean': 'foo', 'string': -42 }");
|
||||||
|
|
||||||
visit_type_TestStruct(v, &p, NULL, &errp);
|
visit_type_TestStruct(v, &p, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp));
|
g_assert(errp);
|
||||||
g_assert(p->string == NULL);
|
g_assert(p->string == NULL);
|
||||||
|
|
||||||
error_free(errp);
|
error_free(errp);
|
||||||
|
|
|
@ -49,7 +49,7 @@ static void test_visitor_out_int(TestOutputVisitorData *data,
|
||||||
QObject *obj;
|
QObject *obj;
|
||||||
|
|
||||||
visit_type_int(data->ov, &value, NULL, &errp);
|
visit_type_int(data->ov, &value, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp) == 0);
|
g_assert(!errp);
|
||||||
|
|
||||||
obj = qmp_output_get_qobject(data->qov);
|
obj = qmp_output_get_qobject(data->qov);
|
||||||
g_assert(obj != NULL);
|
g_assert(obj != NULL);
|
||||||
|
@ -67,7 +67,7 @@ static void test_visitor_out_bool(TestOutputVisitorData *data,
|
||||||
QObject *obj;
|
QObject *obj;
|
||||||
|
|
||||||
visit_type_bool(data->ov, &value, NULL, &errp);
|
visit_type_bool(data->ov, &value, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp) == 0);
|
g_assert(!errp);
|
||||||
|
|
||||||
obj = qmp_output_get_qobject(data->qov);
|
obj = qmp_output_get_qobject(data->qov);
|
||||||
g_assert(obj != NULL);
|
g_assert(obj != NULL);
|
||||||
|
@ -85,7 +85,7 @@ static void test_visitor_out_number(TestOutputVisitorData *data,
|
||||||
QObject *obj;
|
QObject *obj;
|
||||||
|
|
||||||
visit_type_number(data->ov, &value, NULL, &errp);
|
visit_type_number(data->ov, &value, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp) == 0);
|
g_assert(!errp);
|
||||||
|
|
||||||
obj = qmp_output_get_qobject(data->qov);
|
obj = qmp_output_get_qobject(data->qov);
|
||||||
g_assert(obj != NULL);
|
g_assert(obj != NULL);
|
||||||
|
@ -103,7 +103,7 @@ static void test_visitor_out_string(TestOutputVisitorData *data,
|
||||||
QObject *obj;
|
QObject *obj;
|
||||||
|
|
||||||
visit_type_str(data->ov, &string, NULL, &errp);
|
visit_type_str(data->ov, &string, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp) == 0);
|
g_assert(!errp);
|
||||||
|
|
||||||
obj = qmp_output_get_qobject(data->qov);
|
obj = qmp_output_get_qobject(data->qov);
|
||||||
g_assert(obj != NULL);
|
g_assert(obj != NULL);
|
||||||
|
@ -122,7 +122,7 @@ static void test_visitor_out_no_string(TestOutputVisitorData *data,
|
||||||
|
|
||||||
/* A null string should return "" */
|
/* A null string should return "" */
|
||||||
visit_type_str(data->ov, &string, NULL, &errp);
|
visit_type_str(data->ov, &string, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp) == 0);
|
g_assert(!errp);
|
||||||
|
|
||||||
obj = qmp_output_get_qobject(data->qov);
|
obj = qmp_output_get_qobject(data->qov);
|
||||||
g_assert(obj != NULL);
|
g_assert(obj != NULL);
|
||||||
|
@ -141,7 +141,7 @@ static void test_visitor_out_enum(TestOutputVisitorData *data,
|
||||||
|
|
||||||
for (i = 0; i < ENUM_ONE_MAX; i++) {
|
for (i = 0; i < ENUM_ONE_MAX; i++) {
|
||||||
visit_type_EnumOne(data->ov, &i, "unused", &errp);
|
visit_type_EnumOne(data->ov, &i, "unused", &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
|
|
||||||
obj = qmp_output_get_qobject(data->qov);
|
obj = qmp_output_get_qobject(data->qov);
|
||||||
g_assert(obj != NULL);
|
g_assert(obj != NULL);
|
||||||
|
@ -161,7 +161,7 @@ static void test_visitor_out_enum_errors(TestOutputVisitorData *data,
|
||||||
for (i = 0; i < ARRAY_SIZE(bad_values) ; i++) {
|
for (i = 0; i < ARRAY_SIZE(bad_values) ; i++) {
|
||||||
errp = NULL;
|
errp = NULL;
|
||||||
visit_type_EnumOne(data->ov, &bad_values[i], "unused", &errp);
|
visit_type_EnumOne(data->ov, &bad_values[i], "unused", &errp);
|
||||||
g_assert(error_is_set(&errp) == true);
|
g_assert(errp);
|
||||||
error_free(errp);
|
error_free(errp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -198,7 +198,7 @@ static void test_visitor_out_struct(TestOutputVisitorData *data,
|
||||||
QDict *qdict;
|
QDict *qdict;
|
||||||
|
|
||||||
visit_type_TestStruct(data->ov, &p, NULL, &errp);
|
visit_type_TestStruct(data->ov, &p, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
|
|
||||||
obj = qmp_output_get_qobject(data->qov);
|
obj = qmp_output_get_qobject(data->qov);
|
||||||
g_assert(obj != NULL);
|
g_assert(obj != NULL);
|
||||||
|
@ -241,7 +241,7 @@ static void test_visitor_out_struct_nested(TestOutputVisitorData *data,
|
||||||
ud2->dict1.dict3.string3 = g_strdup(strings[3]);
|
ud2->dict1.dict3.string3 = g_strdup(strings[3]);
|
||||||
|
|
||||||
visit_type_UserDefNested(data->ov, &ud2, "unused", &errp);
|
visit_type_UserDefNested(data->ov, &ud2, "unused", &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
|
|
||||||
obj = qmp_output_get_qobject(data->qov);
|
obj = qmp_output_get_qobject(data->qov);
|
||||||
g_assert(obj != NULL);
|
g_assert(obj != NULL);
|
||||||
|
@ -288,7 +288,7 @@ static void test_visitor_out_struct_errors(TestOutputVisitorData *data,
|
||||||
u.has_enum1 = true;
|
u.has_enum1 = true;
|
||||||
u.enum1 = bad_values[i];
|
u.enum1 = bad_values[i];
|
||||||
visit_type_UserDefOne(data->ov, &pu, "unused", &errp);
|
visit_type_UserDefOne(data->ov, &pu, "unused", &errp);
|
||||||
g_assert(error_is_set(&errp) == true);
|
g_assert(errp);
|
||||||
error_free(errp);
|
error_free(errp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -343,7 +343,7 @@ static void test_visitor_out_list(TestOutputVisitorData *data,
|
||||||
}
|
}
|
||||||
|
|
||||||
visit_type_TestStructList(data->ov, &head, NULL, &errp);
|
visit_type_TestStructList(data->ov, &head, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
|
|
||||||
obj = qmp_output_get_qobject(data->qov);
|
obj = qmp_output_get_qobject(data->qov);
|
||||||
g_assert(obj != NULL);
|
g_assert(obj != NULL);
|
||||||
|
|
|
@ -60,7 +60,7 @@ static void test_visitor_in_int(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "-42");
|
v = visitor_input_test_init(data, "-42");
|
||||||
|
|
||||||
visit_type_int(v, &res, NULL, &errp);
|
visit_type_int(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpint(res, ==, value);
|
g_assert_cmpint(res, ==, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,42 +74,42 @@ static void test_visitor_in_bool(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "true");
|
v = visitor_input_test_init(data, "true");
|
||||||
|
|
||||||
visit_type_bool(v, &res, NULL, &errp);
|
visit_type_bool(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpint(res, ==, true);
|
g_assert_cmpint(res, ==, true);
|
||||||
visitor_input_teardown(data, unused);
|
visitor_input_teardown(data, unused);
|
||||||
|
|
||||||
v = visitor_input_test_init(data, "yes");
|
v = visitor_input_test_init(data, "yes");
|
||||||
|
|
||||||
visit_type_bool(v, &res, NULL, &errp);
|
visit_type_bool(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpint(res, ==, true);
|
g_assert_cmpint(res, ==, true);
|
||||||
visitor_input_teardown(data, unused);
|
visitor_input_teardown(data, unused);
|
||||||
|
|
||||||
v = visitor_input_test_init(data, "on");
|
v = visitor_input_test_init(data, "on");
|
||||||
|
|
||||||
visit_type_bool(v, &res, NULL, &errp);
|
visit_type_bool(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpint(res, ==, true);
|
g_assert_cmpint(res, ==, true);
|
||||||
visitor_input_teardown(data, unused);
|
visitor_input_teardown(data, unused);
|
||||||
|
|
||||||
v = visitor_input_test_init(data, "false");
|
v = visitor_input_test_init(data, "false");
|
||||||
|
|
||||||
visit_type_bool(v, &res, NULL, &errp);
|
visit_type_bool(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpint(res, ==, false);
|
g_assert_cmpint(res, ==, false);
|
||||||
visitor_input_teardown(data, unused);
|
visitor_input_teardown(data, unused);
|
||||||
|
|
||||||
v = visitor_input_test_init(data, "no");
|
v = visitor_input_test_init(data, "no");
|
||||||
|
|
||||||
visit_type_bool(v, &res, NULL, &errp);
|
visit_type_bool(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpint(res, ==, false);
|
g_assert_cmpint(res, ==, false);
|
||||||
visitor_input_teardown(data, unused);
|
visitor_input_teardown(data, unused);
|
||||||
|
|
||||||
v = visitor_input_test_init(data, "off");
|
v = visitor_input_test_init(data, "off");
|
||||||
|
|
||||||
visit_type_bool(v, &res, NULL, &errp);
|
visit_type_bool(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpint(res, ==, false);
|
g_assert_cmpint(res, ==, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ static void test_visitor_in_number(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, "3.14");
|
v = visitor_input_test_init(data, "3.14");
|
||||||
|
|
||||||
visit_type_number(v, &res, NULL, &errp);
|
visit_type_number(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpfloat(res, ==, value);
|
g_assert_cmpfloat(res, ==, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ static void test_visitor_in_string(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, value);
|
v = visitor_input_test_init(data, value);
|
||||||
|
|
||||||
visit_type_str(v, &res, NULL, &errp);
|
visit_type_str(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpstr(res, ==, value);
|
g_assert_cmpstr(res, ==, value);
|
||||||
|
|
||||||
g_free(res);
|
g_free(res);
|
||||||
|
@ -156,7 +156,7 @@ static void test_visitor_in_enum(TestInputVisitorData *data,
|
||||||
v = visitor_input_test_init(data, EnumOne_lookup[i]);
|
v = visitor_input_test_init(data, EnumOne_lookup[i]);
|
||||||
|
|
||||||
visit_type_EnumOne(v, &res, NULL, &errp);
|
visit_type_EnumOne(v, &res, NULL, &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
g_assert_cmpint(i, ==, res);
|
g_assert_cmpint(i, ==, res);
|
||||||
|
|
||||||
visitor_input_teardown(data, NULL);
|
visitor_input_teardown(data, NULL);
|
||||||
|
|
|
@ -49,7 +49,7 @@ static void test_visitor_out_int(TestOutputVisitorData *data,
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
visit_type_int(data->ov, &value, NULL, &errp);
|
visit_type_int(data->ov, &value, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp) == 0);
|
g_assert(!errp);
|
||||||
|
|
||||||
str = string_output_get_string(data->sov);
|
str = string_output_get_string(data->sov);
|
||||||
g_assert(str != NULL);
|
g_assert(str != NULL);
|
||||||
|
@ -65,7 +65,7 @@ static void test_visitor_out_bool(TestOutputVisitorData *data,
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
visit_type_bool(data->ov, &value, NULL, &errp);
|
visit_type_bool(data->ov, &value, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp) == 0);
|
g_assert(!errp);
|
||||||
|
|
||||||
str = string_output_get_string(data->sov);
|
str = string_output_get_string(data->sov);
|
||||||
g_assert(str != NULL);
|
g_assert(str != NULL);
|
||||||
|
@ -81,7 +81,7 @@ static void test_visitor_out_number(TestOutputVisitorData *data,
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
visit_type_number(data->ov, &value, NULL, &errp);
|
visit_type_number(data->ov, &value, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp) == 0);
|
g_assert(!errp);
|
||||||
|
|
||||||
str = string_output_get_string(data->sov);
|
str = string_output_get_string(data->sov);
|
||||||
g_assert(str != NULL);
|
g_assert(str != NULL);
|
||||||
|
@ -97,7 +97,7 @@ static void test_visitor_out_string(TestOutputVisitorData *data,
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
visit_type_str(data->ov, &string, NULL, &errp);
|
visit_type_str(data->ov, &string, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp) == 0);
|
g_assert(!errp);
|
||||||
|
|
||||||
str = string_output_get_string(data->sov);
|
str = string_output_get_string(data->sov);
|
||||||
g_assert(str != NULL);
|
g_assert(str != NULL);
|
||||||
|
@ -114,7 +114,7 @@ static void test_visitor_out_no_string(TestOutputVisitorData *data,
|
||||||
|
|
||||||
/* A null string should return "" */
|
/* A null string should return "" */
|
||||||
visit_type_str(data->ov, &string, NULL, &errp);
|
visit_type_str(data->ov, &string, NULL, &errp);
|
||||||
g_assert(error_is_set(&errp) == 0);
|
g_assert(!errp);
|
||||||
|
|
||||||
str = string_output_get_string(data->sov);
|
str = string_output_get_string(data->sov);
|
||||||
g_assert(str != NULL);
|
g_assert(str != NULL);
|
||||||
|
@ -131,7 +131,7 @@ static void test_visitor_out_enum(TestOutputVisitorData *data,
|
||||||
|
|
||||||
for (i = 0; i < ENUM_ONE_MAX; i++) {
|
for (i = 0; i < ENUM_ONE_MAX; i++) {
|
||||||
visit_type_EnumOne(data->ov, &i, "unused", &errp);
|
visit_type_EnumOne(data->ov, &i, "unused", &errp);
|
||||||
g_assert(!error_is_set(&errp));
|
g_assert(!errp);
|
||||||
|
|
||||||
str = string_output_get_string(data->sov);
|
str = string_output_get_string(data->sov);
|
||||||
g_assert(str != NULL);
|
g_assert(str != NULL);
|
||||||
|
@ -149,7 +149,7 @@ static void test_visitor_out_enum_errors(TestOutputVisitorData *data,
|
||||||
for (i = 0; i < ARRAY_SIZE(bad_values) ; i++) {
|
for (i = 0; i < ARRAY_SIZE(bad_values) ; i++) {
|
||||||
errp = NULL;
|
errp = NULL;
|
||||||
visit_type_EnumOne(data->ov, &bad_values[i], "unused", &errp);
|
visit_type_EnumOne(data->ov, &bad_values[i], "unused", &errp);
|
||||||
g_assert(error_is_set(&errp) == true);
|
g_assert(errp);
|
||||||
error_free(errp);
|
error_free(errp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
2
tpm.c
2
tpm.c
|
@ -161,7 +161,7 @@ static int configure_tpm(QemuOpts *opts)
|
||||||
|
|
||||||
/* validate backend specific opts */
|
/* validate backend specific opts */
|
||||||
qemu_opts_validate(opts, be->opts, &local_err);
|
qemu_opts_validate(opts, be->opts, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -31,7 +31,7 @@ QemuOptsList *qemu_find_opts(const char *group)
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
ret = find_list(vm_config_groups, group, &local_err);
|
ret = find_list(vm_config_groups, group, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_report("%s", error_get_pretty(local_err));
|
error_report("%s", error_get_pretty(local_err));
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
}
|
}
|
||||||
|
@ -295,7 +295,7 @@ int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname)
|
||||||
if (sscanf(line, "[%63s \"%63[^\"]\"]", group, id) == 2) {
|
if (sscanf(line, "[%63s \"%63[^\"]\"]", group, id) == 2) {
|
||||||
/* group with id */
|
/* group with id */
|
||||||
list = find_list(lists, group, &local_err);
|
list = find_list(lists, group, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_report("%s", error_get_pretty(local_err));
|
error_report("%s", error_get_pretty(local_err));
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -306,7 +306,7 @@ int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname)
|
||||||
if (sscanf(line, "[%63[^]]]", group) == 1) {
|
if (sscanf(line, "[%63[^]]]", group) == 1) {
|
||||||
/* group without id */
|
/* group without id */
|
||||||
list = find_list(lists, group, &local_err);
|
list = find_list(lists, group, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_report("%s", error_get_pretty(local_err));
|
error_report("%s", error_get_pretty(local_err));
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -376,13 +376,13 @@ static void config_parse_qdict_section(QDict *options, QemuOptsList *opts,
|
||||||
}
|
}
|
||||||
|
|
||||||
subopts = qemu_opts_create(opts, NULL, 0, &local_err);
|
subopts = qemu_opts_create(opts, NULL, 0, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_opts_absorb_qdict(subopts, subqdict, &local_err);
|
qemu_opts_absorb_qdict(subopts, subqdict, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -416,13 +416,13 @@ static void config_parse_qdict_section(QDict *options, QemuOptsList *opts,
|
||||||
opt_name = g_strdup_printf("%s.%u", opts->name, i++);
|
opt_name = g_strdup_printf("%s.%u", opts->name, i++);
|
||||||
subopts = qemu_opts_create(opts, opt_name, 1, &local_err);
|
subopts = qemu_opts_create(opts, opt_name, 1, &local_err);
|
||||||
g_free(opt_name);
|
g_free(opt_name);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_opts_absorb_qdict(subopts, section, &local_err);
|
qemu_opts_absorb_qdict(subopts, section, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
qemu_opts_del(subopts);
|
qemu_opts_del(subopts);
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -450,7 +450,7 @@ void qemu_config_parse_qdict(QDict *options, QemuOptsList **lists,
|
||||||
|
|
||||||
for (i = 0; lists[i]; i++) {
|
for (i = 0; lists[i]; i++) {
|
||||||
config_parse_qdict_section(options, lists[i], &local_err);
|
config_parse_qdict_section(options, lists[i], &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -246,7 +246,7 @@ int set_option_parameter(QEMUOptionParameter *list, const char *name,
|
||||||
switch (list->type) {
|
switch (list->type) {
|
||||||
case OPT_FLAG:
|
case OPT_FLAG:
|
||||||
parse_option_bool(name, value, &flag, &local_err);
|
parse_option_bool(name, value, &flag, &local_err);
|
||||||
if (!error_is_set(&local_err)) {
|
if (!local_err) {
|
||||||
list->value.n = flag;
|
list->value.n = flag;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -269,7 +269,7 @@ int set_option_parameter(QEMUOptionParameter *list, const char *name,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -640,7 +640,7 @@ static void opt_set(QemuOpts *opts, const char *name, const char *value,
|
||||||
opt->desc = desc;
|
opt->desc = desc;
|
||||||
opt->str = g_strdup(value);
|
opt->str = g_strdup(value);
|
||||||
qemu_opt_parse(opt, &local_err);
|
qemu_opt_parse(opt, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
qemu_opt_del(opt);
|
qemu_opt_del(opt);
|
||||||
}
|
}
|
||||||
|
@ -651,7 +651,7 @@ int qemu_opt_set(QemuOpts *opts, const char *name, const char *value)
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
opt_set(opts, name, value, false, &local_err);
|
opt_set(opts, name, value, false, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -812,7 +812,7 @@ int qemu_opts_set(QemuOptsList *list, const char *id,
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
opts = qemu_opts_create(list, id, 1, &local_err);
|
opts = qemu_opts_create(list, id, 1, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -897,7 +897,7 @@ static int opts_do_parse(QemuOpts *opts, const char *params,
|
||||||
if (strcmp(option, "id") != 0) {
|
if (strcmp(option, "id") != 0) {
|
||||||
/* store and parse */
|
/* store and parse */
|
||||||
opt_set(opts, option, value, prepend, &local_err);
|
opt_set(opts, option, value, prepend, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -945,7 +945,7 @@ static QemuOpts *opts_parse(QemuOptsList *list, const char *params,
|
||||||
assert(!defaults || list->merge_lists);
|
assert(!defaults || list->merge_lists);
|
||||||
opts = qemu_opts_create(list, id, !defaults, &local_err);
|
opts = qemu_opts_create(list, id, !defaults, &local_err);
|
||||||
if (opts == NULL) {
|
if (opts == NULL) {
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
qerror_report_err(local_err);
|
qerror_report_err(local_err);
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
}
|
}
|
||||||
|
@ -1034,7 +1034,7 @@ QemuOpts *qemu_opts_from_qdict(QemuOptsList *list, const QDict *qdict,
|
||||||
|
|
||||||
opts = qemu_opts_create(list, qdict_get_try_str(qdict, "id"), 1,
|
opts = qemu_opts_create(list, qdict_get_try_str(qdict, "id"), 1,
|
||||||
&local_err);
|
&local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1044,7 +1044,7 @@ QemuOpts *qemu_opts_from_qdict(QemuOptsList *list, const QDict *qdict,
|
||||||
state.errp = &local_err;
|
state.errp = &local_err;
|
||||||
state.opts = opts;
|
state.opts = opts;
|
||||||
qdict_iter(qdict, qemu_opts_from_qdict_1, &state);
|
qdict_iter(qdict, qemu_opts_from_qdict_1, &state);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
qemu_opts_del(opts);
|
qemu_opts_del(opts);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1075,7 +1075,7 @@ void qemu_opts_absorb_qdict(QemuOpts *opts, QDict *qdict, Error **errp)
|
||||||
|
|
||||||
if (find_desc_by_name(opts->list->desc, entry->key)) {
|
if (find_desc_by_name(opts->list->desc, entry->key)) {
|
||||||
qemu_opts_from_qdict_1(entry->key, entry->value, &state);
|
qemu_opts_from_qdict_1(entry->key, entry->value, &state);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1129,7 +1129,7 @@ void qemu_opts_validate(QemuOpts *opts, const QemuOptDesc *desc, Error **errp)
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_opt_parse(opt, &local_err);
|
qemu_opt_parse(opt, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
2
vl.c
2
vl.c
|
@ -2268,7 +2268,7 @@ static int chardev_init_func(QemuOpts *opts, void *opaque)
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
qemu_chr_new_from_opts(opts, NULL, &local_err);
|
qemu_chr_new_from_opts(opts, NULL, &local_err);
|
||||||
if (error_is_set(&local_err)) {
|
if (local_err) {
|
||||||
error_report("%s", error_get_pretty(local_err));
|
error_report("%s", error_get_pretty(local_err));
|
||||||
error_free(local_err);
|
error_free(local_err);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue