mirror of https://gitee.com/openkylin/qemu.git
QAPI patches for 2016-02-09
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJWucW3AAoJEDhwtADrkYZTBjsQALayVM8D3+Boy4UwhodDSJK+ FFvc6BZdNvRQEzkV8IP1qedNwd86CcYrmOePvVUeQIhRHFInb35d7aapOm6W4pr3 ED7yLkJ7/LOtM/hVYc72Z766Y0246VXFjZ5SdMjiVT754xT4fc3Fjh7T39Xg57Rz ZHeWzMxwU3glGL9KW6rpRaV8+3xFaew6LcrHRsc3jPGJy1M9gQWcRViGMYvYeSvQ SRRoBanmeJW/z5dCv/dIhlU/euYWSQzBTK2TcTZjJhDiPRilCnRP8HhE0+ImfRbE Q5Ebf0BGHcA1p+tBqc3nm4AIX3ZvJNjWxFiVqSWFlkXCBftp26RTssE6y3CTYddp v+ss3/8wd69VHtmWDeKirP+sv7tGQvMf7+nBDyIHS3s70TT6OpmdDlXv6+Bw1rVZ Lspn0+eypVWaYDN7hiup+nV7IoAvIljlieGQp9By8KBDgdA/D6N3CjGJD7Gl3ato 3gLadi0czf/ENvvyzWHs6zbtdG7aW3csDY+byfKjd6S6zxKyKIs+0vO7s4hxfsmP Dj+DD1jLdKCNt74IELL1JqE8X6DrnjF2+Wy7+O45rS+l112pSSCDrraI1Lniueok 5OohWign2jkoJE8YBHrfU91Fk5oJPbeUGH7zEALsAxVF/lA23TxPFVn6GKNTq8Um 51SbgxIsd2TN5jnk/0jK =DCYp -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/armbru/tags/pull-qapi-2016-02-09' into staging QAPI patches for 2016-02-09 # gpg: Signature made Tue 09 Feb 2016 10:55:51 GMT using RSA key ID EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" * remotes/armbru/tags/pull-qapi-2016-02-09: (31 commits) qapi: Add missing JSON files in build dependencies qapi: Fix compilation failure on MIPS and SPARC qmp: Don't abuse stack to track qmp-output root qmp: Fix reference-counting of qnull on empty output visit qapi: Drop unused error argument for list and implicit struct qapi: Tighten qmp_input_end_list() qapi: Drop unused 'kind' for struct/enum visit qapi: Swap 'name' in visit_* callbacks to match public API qom: Swap 'name' next to visitor in ObjectPropertyAccessor qapi: Swap visit_* arguments for consistent 'name' placement qom: Use typedef for Visitor qapi: Don't cast Enum* to int* qapi: Consolidate visitor small integer callbacks qapi: Make all visitors supply uint64 callbacks qapi: Prefer type_int64 over type_int in visitors qapi-visit: Kill unused visit_end_union() qapi: Track all failures between visit_start/stop qapi: Improve generated event use of qapi visitor balloon: Improve use of qapi visitor vl: Ensure qapi visitor properly ends struct visit ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
ac1be2ae6b
3
Makefile
3
Makefile
|
@ -272,7 +272,8 @@ $(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
|
|||
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
|
||||
$(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
|
||||
$(SRC_PATH)/qapi/event.json $(SRC_PATH)/qapi/introspect.json \
|
||||
$(SRC_PATH)/qapi/crypto.json
|
||||
$(SRC_PATH)/qapi/crypto.json $(SRC_PATH)/qapi/rocker.json \
|
||||
$(SRC_PATH)/qapi/trace.json
|
||||
|
||||
qapi-types.c qapi-types.h :\
|
||||
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
|
||||
|
|
|
@ -27,18 +27,18 @@ QEMU_BUILD_BUG_ON(HOST_MEM_POLICY_INTERLEAVE != MPOL_INTERLEAVE);
|
|||
#endif
|
||||
|
||||
static void
|
||||
host_memory_backend_get_size(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
host_memory_backend_get_size(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
HostMemoryBackend *backend = MEMORY_BACKEND(obj);
|
||||
uint64_t value = backend->size;
|
||||
|
||||
visit_type_size(v, &value, name, errp);
|
||||
visit_type_size(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void
|
||||
host_memory_backend_set_size(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
host_memory_backend_set_size(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
HostMemoryBackend *backend = MEMORY_BACKEND(obj);
|
||||
Error *local_err = NULL;
|
||||
|
@ -49,7 +49,7 @@ host_memory_backend_set_size(Object *obj, Visitor *v, void *opaque,
|
|||
goto out;
|
||||
}
|
||||
|
||||
visit_type_size(v, &value, name, &local_err);
|
||||
visit_type_size(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
goto out;
|
||||
}
|
||||
|
@ -64,8 +64,8 @@ out:
|
|||
}
|
||||
|
||||
static void
|
||||
host_memory_backend_get_host_nodes(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
host_memory_backend_get_host_nodes(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
HostMemoryBackend *backend = MEMORY_BACKEND(obj);
|
||||
uint16List *host_nodes = NULL;
|
||||
|
@ -92,18 +92,18 @@ host_memory_backend_get_host_nodes(Object *obj, Visitor *v, void *opaque,
|
|||
node = &(*node)->next;
|
||||
} while (true);
|
||||
|
||||
visit_type_uint16List(v, &host_nodes, name, errp);
|
||||
visit_type_uint16List(v, name, &host_nodes, errp);
|
||||
}
|
||||
|
||||
static void
|
||||
host_memory_backend_set_host_nodes(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
host_memory_backend_set_host_nodes(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
#ifdef CONFIG_NUMA
|
||||
HostMemoryBackend *backend = MEMORY_BACKEND(obj);
|
||||
uint16List *l = NULL;
|
||||
|
||||
visit_type_uint16List(v, &l, name, errp);
|
||||
visit_type_uint16List(v, name, &l, errp);
|
||||
|
||||
while (l) {
|
||||
bitmap_set(backend->host_nodes, l->value, 1);
|
||||
|
|
|
@ -641,7 +641,7 @@ void bdrv_image_info_specific_dump(fprintf_function func_fprintf, void *f,
|
|||
QmpOutputVisitor *ov = qmp_output_visitor_new();
|
||||
QObject *obj, *data;
|
||||
|
||||
visit_type_ImageInfoSpecific(qmp_output_get_visitor(ov), &info_spec, NULL,
|
||||
visit_type_ImageInfoSpecific(qmp_output_get_visitor(ov), NULL, &info_spec,
|
||||
&error_abort);
|
||||
obj = qmp_output_get_qobject(ov);
|
||||
assert(qobject_type(obj) == QTYPE_QDICT);
|
||||
|
|
|
@ -3860,8 +3860,8 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp)
|
|||
}
|
||||
}
|
||||
|
||||
visit_type_BlockdevOptions(qmp_output_get_visitor(ov),
|
||||
&options, NULL, &local_err);
|
||||
visit_type_BlockdevOptions(qmp_output_get_visitor(ov), NULL, &options,
|
||||
&local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
goto fail;
|
||||
|
|
12
bootdevice.c
12
bootdevice.c
|
@ -271,21 +271,21 @@ typedef struct {
|
|||
DeviceState *dev;
|
||||
} BootIndexProperty;
|
||||
|
||||
static void device_get_bootindex(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void device_get_bootindex(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
BootIndexProperty *prop = opaque;
|
||||
visit_type_int32(v, prop->bootindex, name, errp);
|
||||
visit_type_int32(v, name, prop->bootindex, errp);
|
||||
}
|
||||
|
||||
static void device_set_bootindex(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void device_set_bootindex(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
BootIndexProperty *prop = opaque;
|
||||
int32_t boot_index;
|
||||
Error *local_err = NULL;
|
||||
|
||||
visit_type_int32(v, &boot_index, name, &local_err);
|
||||
visit_type_int32(v, name, &boot_index, &local_err);
|
||||
if (local_err) {
|
||||
goto out;
|
||||
}
|
||||
|
|
10
cpus.c
10
cpus.c
|
@ -1576,13 +1576,13 @@ CpuInfoList *qmp_query_cpus(Error **errp)
|
|||
info->value->u.ppc->nip = env->nip;
|
||||
#elif defined(TARGET_SPARC)
|
||||
info->value->arch = CPU_INFO_ARCH_SPARC;
|
||||
info->value->u.sparc = g_new0(CpuInfoSPARC, 1);
|
||||
info->value->u.sparc->pc = env->pc;
|
||||
info->value->u.sparc->npc = env->npc;
|
||||
info->value->u.q_sparc = g_new0(CpuInfoSPARC, 1);
|
||||
info->value->u.q_sparc->pc = env->pc;
|
||||
info->value->u.q_sparc->npc = env->npc;
|
||||
#elif defined(TARGET_MIPS)
|
||||
info->value->arch = CPU_INFO_ARCH_MIPS;
|
||||
info->value->u.mips = g_new0(CpuInfoMIPS, 1);
|
||||
info->value->u.mips->PC = env->active_tc.PC;
|
||||
info->value->u.q_mips = g_new0(CpuInfoMIPS, 1);
|
||||
info->value->u.q_mips->PC = env->active_tc.PC;
|
||||
#elif defined(TARGET_TRICORE)
|
||||
info->value->arch = CPU_INFO_ARCH_TRICORE;
|
||||
info->value->u.tricore = g_new0(CpuInfoTricore, 1);
|
||||
|
|
26
hmp.c
26
hmp.c
|
@ -319,11 +319,13 @@ void hmp_info_cpus(Monitor *mon, const QDict *qdict)
|
|||
monitor_printf(mon, " nip=0x%016" PRIx64, cpu->value->u.ppc->nip);
|
||||
break;
|
||||
case CPU_INFO_ARCH_SPARC:
|
||||
monitor_printf(mon, " pc=0x%016" PRIx64, cpu->value->u.sparc->pc);
|
||||
monitor_printf(mon, " npc=0x%016" PRIx64, cpu->value->u.sparc->npc);
|
||||
monitor_printf(mon, " pc=0x%016" PRIx64,
|
||||
cpu->value->u.q_sparc->pc);
|
||||
monitor_printf(mon, " npc=0x%016" PRIx64,
|
||||
cpu->value->u.q_sparc->npc);
|
||||
break;
|
||||
case CPU_INFO_ARCH_MIPS:
|
||||
monitor_printf(mon, " PC=0x%016" PRIx64, cpu->value->u.mips->PC);
|
||||
monitor_printf(mon, " PC=0x%016" PRIx64, cpu->value->u.q_mips->PC);
|
||||
break;
|
||||
case CPU_INFO_ARCH_TRICORE:
|
||||
monitor_printf(mon, " PC=0x%016" PRIx64, cpu->value->u.tricore->PC);
|
||||
|
@ -1657,9 +1659,9 @@ void hmp_object_add(Monitor *mon, const QDict *qdict)
|
|||
QemuOpts *opts;
|
||||
char *type = NULL;
|
||||
char *id = NULL;
|
||||
void *dummy = NULL;
|
||||
OptsVisitor *ov;
|
||||
QDict *pdict;
|
||||
Visitor *v;
|
||||
|
||||
opts = qemu_opts_from_qdict(qemu_find_opts("object"), qdict, &err);
|
||||
if (err) {
|
||||
|
@ -1668,28 +1670,29 @@ void hmp_object_add(Monitor *mon, const QDict *qdict)
|
|||
|
||||
ov = opts_visitor_new(opts);
|
||||
pdict = qdict_clone_shallow(qdict);
|
||||
v = opts_get_visitor(ov);
|
||||
|
||||
visit_start_struct(opts_get_visitor(ov), &dummy, NULL, NULL, 0, &err);
|
||||
visit_start_struct(v, NULL, NULL, 0, &err);
|
||||
if (err) {
|
||||
goto out_clean;
|
||||
}
|
||||
|
||||
qdict_del(pdict, "qom-type");
|
||||
visit_type_str(opts_get_visitor(ov), &type, "qom-type", &err);
|
||||
visit_type_str(v, "qom-type", &type, &err);
|
||||
if (err) {
|
||||
goto out_end;
|
||||
}
|
||||
|
||||
qdict_del(pdict, "id");
|
||||
visit_type_str(opts_get_visitor(ov), &id, "id", &err);
|
||||
visit_type_str(v, "id", &id, &err);
|
||||
if (err) {
|
||||
goto out_end;
|
||||
}
|
||||
|
||||
object_add(type, id, pdict, opts_get_visitor(ov), &err);
|
||||
object_add(type, id, pdict, v, &err);
|
||||
|
||||
out_end:
|
||||
visit_end_struct(opts_get_visitor(ov), &err_end);
|
||||
visit_end_struct(v, &err_end);
|
||||
if (!err && err_end) {
|
||||
qmp_object_del(id, NULL);
|
||||
}
|
||||
|
@ -1701,7 +1704,6 @@ out_clean:
|
|||
qemu_opts_del(opts);
|
||||
g_free(id);
|
||||
g_free(type);
|
||||
g_free(dummy);
|
||||
|
||||
out:
|
||||
hmp_handle_error(mon, &err);
|
||||
|
@ -1948,8 +1950,8 @@ void hmp_info_memdev(Monitor *mon, const QDict *qdict)
|
|||
|
||||
while (m) {
|
||||
ov = string_output_visitor_new(false);
|
||||
visit_type_uint16List(string_output_get_visitor(ov),
|
||||
&m->value->host_nodes, NULL, NULL);
|
||||
visit_type_uint16List(string_output_get_visitor(ov), NULL,
|
||||
&m->value->host_nodes, NULL);
|
||||
monitor_printf(mon, "memory backend: %d\n", i);
|
||||
monitor_printf(mon, " size: %" PRId64 "\n", m->value->size);
|
||||
monitor_printf(mon, " merge: %s\n",
|
||||
|
|
|
@ -243,7 +243,7 @@ void acpi_table_add(const QemuOpts *opts, Error **errp)
|
|||
OptsVisitor *ov;
|
||||
|
||||
ov = opts_visitor_new(opts);
|
||||
visit_type_AcpiTableOptions(opts_get_visitor(ov), &hdrs, NULL, &err);
|
||||
visit_type_AcpiTableOptions(opts_get_visitor(ov), NULL, &hdrs, &err);
|
||||
opts_visitor_cleanup(ov);
|
||||
}
|
||||
|
||||
|
@ -302,7 +302,7 @@ out:
|
|||
QapiDeallocVisitor *dv;
|
||||
|
||||
dv = qapi_dealloc_visitor_new();
|
||||
visit_type_AcpiTableOptions(qapi_dealloc_get_visitor(dv), &hdrs, NULL,
|
||||
visit_type_AcpiTableOptions(qapi_dealloc_get_visitor(dv), NULL, &hdrs,
|
||||
NULL);
|
||||
qapi_dealloc_visitor_cleanup(dv);
|
||||
}
|
||||
|
|
|
@ -283,14 +283,13 @@ void ich9_pm_init(PCIDevice *lpc_pci, ICH9LPCPMRegs *pm,
|
|||
}
|
||||
}
|
||||
|
||||
static void ich9_pm_get_gpe0_blk(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void ich9_pm_get_gpe0_blk(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
ICH9LPCPMRegs *pm = opaque;
|
||||
uint32_t value = pm->pm_io_base + ICH9_PMIO_GPE0_STS;
|
||||
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static bool ich9_pm_get_memory_hotplug_support(Object *obj, Error **errp)
|
||||
|
@ -308,25 +307,23 @@ static void ich9_pm_set_memory_hotplug_support(Object *obj, bool value,
|
|||
s->pm.acpi_memory_hotplug.is_enabled = value;
|
||||
}
|
||||
|
||||
static void ich9_pm_get_disable_s3(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void ich9_pm_get_disable_s3(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
ICH9LPCPMRegs *pm = opaque;
|
||||
uint8_t value = pm->disable_s3;
|
||||
|
||||
visit_type_uint8(v, &value, name, errp);
|
||||
visit_type_uint8(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void ich9_pm_set_disable_s3(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void ich9_pm_set_disable_s3(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
ICH9LPCPMRegs *pm = opaque;
|
||||
Error *local_err = NULL;
|
||||
uint8_t value;
|
||||
|
||||
visit_type_uint8(v, &value, name, &local_err);
|
||||
visit_type_uint8(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
goto out;
|
||||
}
|
||||
|
@ -335,25 +332,23 @@ out:
|
|||
error_propagate(errp, local_err);
|
||||
}
|
||||
|
||||
static void ich9_pm_get_disable_s4(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void ich9_pm_get_disable_s4(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
ICH9LPCPMRegs *pm = opaque;
|
||||
uint8_t value = pm->disable_s4;
|
||||
|
||||
visit_type_uint8(v, &value, name, errp);
|
||||
visit_type_uint8(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void ich9_pm_set_disable_s4(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void ich9_pm_set_disable_s4(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
ICH9LPCPMRegs *pm = opaque;
|
||||
Error *local_err = NULL;
|
||||
uint8_t value;
|
||||
|
||||
visit_type_uint8(v, &value, name, &local_err);
|
||||
visit_type_uint8(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
goto out;
|
||||
}
|
||||
|
@ -362,25 +357,23 @@ out:
|
|||
error_propagate(errp, local_err);
|
||||
}
|
||||
|
||||
static void ich9_pm_get_s4_val(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void ich9_pm_get_s4_val(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
ICH9LPCPMRegs *pm = opaque;
|
||||
uint8_t value = pm->s4_val;
|
||||
|
||||
visit_type_uint8(v, &value, name, errp);
|
||||
visit_type_uint8(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void ich9_pm_set_s4_val(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void ich9_pm_set_s4_val(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
ICH9LPCPMRegs *pm = opaque;
|
||||
Error *local_err = NULL;
|
||||
uint8_t value;
|
||||
|
||||
visit_type_uint8(v, &value, name, &local_err);
|
||||
visit_type_uint8(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -34,14 +34,14 @@ static void machine_set_accel(Object *obj, const char *value, Error **errp)
|
|||
}
|
||||
|
||||
static void machine_set_kernel_irqchip(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
MachineState *ms = MACHINE(obj);
|
||||
OnOffSplit mode;
|
||||
|
||||
visit_type_OnOffSplit(v, &mode, name, &err);
|
||||
visit_type_OnOffSplit(v, name, &mode, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
|
@ -69,24 +69,24 @@ static void machine_set_kernel_irqchip(Object *obj, Visitor *v,
|
|||
}
|
||||
|
||||
static void machine_get_kvm_shadow_mem(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
MachineState *ms = MACHINE(obj);
|
||||
int64_t value = ms->kvm_shadow_mem;
|
||||
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void machine_set_kvm_shadow_mem(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
MachineState *ms = MACHINE(obj);
|
||||
Error *error = NULL;
|
||||
int64_t value;
|
||||
|
||||
visit_type_int(v, &value, name, &error);
|
||||
visit_type_int(v, name, &value, &error);
|
||||
if (error) {
|
||||
error_propagate(errp, error);
|
||||
return;
|
||||
|
@ -171,24 +171,24 @@ static void machine_set_dumpdtb(Object *obj, const char *value, Error **errp)
|
|||
}
|
||||
|
||||
static void machine_get_phandle_start(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
MachineState *ms = MACHINE(obj);
|
||||
int64_t value = ms->phandle_start;
|
||||
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void machine_set_phandle_start(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
MachineState *ms = MACHINE(obj);
|
||||
Error *error = NULL;
|
||||
int64_t value;
|
||||
|
||||
visit_type_int(v, &value, name, &error);
|
||||
visit_type_int(v, name, &value, &error);
|
||||
if (error) {
|
||||
error_propagate(errp, error);
|
||||
return;
|
||||
|
|
|
@ -31,7 +31,7 @@ static void get_pointer(Object *obj, Visitor *v, Property *prop,
|
|||
char *p;
|
||||
|
||||
p = *ptr ? print(*ptr) : g_strdup("");
|
||||
visit_type_str(v, &p, name, errp);
|
||||
visit_type_str(v, name, &p, errp);
|
||||
g_free(p);
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ static void set_pointer(Object *obj, Visitor *v, Property *prop,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_str(v, &str, name, &local_err);
|
||||
visit_type_str(v, name, &str, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -112,14 +112,14 @@ static char *print_drive(void *ptr)
|
|||
return g_strdup(blk_name(ptr));
|
||||
}
|
||||
|
||||
static void get_drive(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_drive(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
get_pointer(obj, v, opaque, print_drive, name, errp);
|
||||
}
|
||||
|
||||
static void set_drive(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_drive(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
set_pointer(obj, v, opaque, parse_drive, name, errp);
|
||||
}
|
||||
|
@ -173,14 +173,14 @@ static char *print_chr(void *ptr)
|
|||
return g_strdup(val);
|
||||
}
|
||||
|
||||
static void get_chr(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_chr(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
get_pointer(obj, v, opaque, print_chr, name, errp);
|
||||
}
|
||||
|
||||
static void set_chr(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
set_pointer(obj, v, opaque, parse_chr, name, errp);
|
||||
}
|
||||
|
@ -194,20 +194,20 @@ PropertyInfo qdev_prop_chr = {
|
|||
};
|
||||
|
||||
/* --- netdev device --- */
|
||||
static void get_netdev(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_netdev(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
NICPeers *peers_ptr = qdev_get_prop_ptr(dev, prop);
|
||||
char *p = g_strdup(peers_ptr->ncs[0] ? peers_ptr->ncs[0]->name : "");
|
||||
|
||||
visit_type_str(v, &p, name, errp);
|
||||
visit_type_str(v, name, &p, errp);
|
||||
g_free(p);
|
||||
}
|
||||
|
||||
static void set_netdev(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_netdev(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -223,7 +223,7 @@ static void set_netdev(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_str(v, &str, name, &local_err);
|
||||
visit_type_str(v, name, &str, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -293,8 +293,8 @@ static int print_vlan(DeviceState *dev, Property *prop, char *dest, size_t len)
|
|||
return snprintf(dest, len, "<null>");
|
||||
}
|
||||
|
||||
static void get_vlan(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_vlan(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -308,11 +308,11 @@ static void get_vlan(Object *obj, Visitor *v, void *opaque,
|
|||
}
|
||||
}
|
||||
|
||||
visit_type_int32(v, &id, name, errp);
|
||||
visit_type_int32(v, name, &id, errp);
|
||||
}
|
||||
|
||||
static void set_vlan(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_vlan(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -327,7 +327,7 @@ static void set_vlan(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_int32(v, &id, name, &local_err);
|
||||
visit_type_int32(v, name, &id, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
|
|
@ -42,19 +42,18 @@ void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
|
|||
return ptr;
|
||||
}
|
||||
|
||||
static void get_enum(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_enum(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
int *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
|
||||
visit_type_enum(v, ptr, prop->info->enum_table,
|
||||
prop->info->name, prop->name, errp);
|
||||
visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
|
||||
}
|
||||
|
||||
static void set_enum(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_enum(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -65,8 +64,7 @@ static void set_enum(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_enum(v, ptr, prop->info->enum_table,
|
||||
prop->info->name, prop->name, errp);
|
||||
visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
|
||||
}
|
||||
|
||||
/* Bit */
|
||||
|
@ -88,19 +86,19 @@ static void bit_prop_set(DeviceState *dev, Property *props, bool val)
|
|||
}
|
||||
}
|
||||
|
||||
static void prop_get_bit(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void prop_get_bit(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint32_t *p = qdev_get_prop_ptr(dev, prop);
|
||||
bool value = (*p & qdev_get_prop_mask(prop)) != 0;
|
||||
|
||||
visit_type_bool(v, &value, name, errp);
|
||||
visit_type_bool(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void prop_set_bit(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void prop_set_bit(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -112,7 +110,7 @@ static void prop_set_bit(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_bool(v, &value, name, &local_err);
|
||||
visit_type_bool(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -146,19 +144,19 @@ static void bit64_prop_set(DeviceState *dev, Property *props, bool val)
|
|||
}
|
||||
}
|
||||
|
||||
static void prop_get_bit64(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void prop_get_bit64(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint64_t *p = qdev_get_prop_ptr(dev, prop);
|
||||
bool value = (*p & qdev_get_prop_mask64(prop)) != 0;
|
||||
|
||||
visit_type_bool(v, &value, name, errp);
|
||||
visit_type_bool(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void prop_set_bit64(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void prop_set_bit64(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -170,7 +168,7 @@ static void prop_set_bit64(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_bool(v, &value, name, &local_err);
|
||||
visit_type_bool(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -187,18 +185,18 @@ PropertyInfo qdev_prop_bit64 = {
|
|||
|
||||
/* --- bool --- */
|
||||
|
||||
static void get_bool(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
bool *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
|
||||
visit_type_bool(v, ptr, name, errp);
|
||||
visit_type_bool(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
static void set_bool(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -209,7 +207,7 @@ static void set_bool(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_bool(v, ptr, name, errp);
|
||||
visit_type_bool(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
PropertyInfo qdev_prop_bool = {
|
||||
|
@ -220,18 +218,18 @@ PropertyInfo qdev_prop_bool = {
|
|||
|
||||
/* --- 8bit integer --- */
|
||||
|
||||
static void get_uint8(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint8_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
|
||||
visit_type_uint8(v, ptr, name, errp);
|
||||
visit_type_uint8(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
static void set_uint8(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -242,7 +240,7 @@ static void set_uint8(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_uint8(v, ptr, name, errp);
|
||||
visit_type_uint8(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
PropertyInfo qdev_prop_uint8 = {
|
||||
|
@ -253,18 +251,18 @@ PropertyInfo qdev_prop_uint8 = {
|
|||
|
||||
/* --- 16bit integer --- */
|
||||
|
||||
static void get_uint16(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_uint16(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint16_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
|
||||
visit_type_uint16(v, ptr, name, errp);
|
||||
visit_type_uint16(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
static void set_uint16(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_uint16(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -275,7 +273,7 @@ static void set_uint16(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_uint16(v, ptr, name, errp);
|
||||
visit_type_uint16(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
PropertyInfo qdev_prop_uint16 = {
|
||||
|
@ -286,18 +284,18 @@ PropertyInfo qdev_prop_uint16 = {
|
|||
|
||||
/* --- 32bit integer --- */
|
||||
|
||||
static void get_uint32(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_uint32(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint32_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
|
||||
visit_type_uint32(v, ptr, name, errp);
|
||||
visit_type_uint32(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
static void set_uint32(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_uint32(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -308,21 +306,21 @@ static void set_uint32(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_uint32(v, ptr, name, errp);
|
||||
visit_type_uint32(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
static void get_int32(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_int32(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
int32_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
|
||||
visit_type_int32(v, ptr, name, errp);
|
||||
visit_type_int32(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
static void set_int32(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -333,7 +331,7 @@ static void set_int32(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_int32(v, ptr, name, errp);
|
||||
visit_type_int32(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
PropertyInfo qdev_prop_uint32 = {
|
||||
|
@ -350,18 +348,18 @@ PropertyInfo qdev_prop_int32 = {
|
|||
|
||||
/* --- 64bit integer --- */
|
||||
|
||||
static void get_uint64(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_uint64(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
|
||||
visit_type_uint64(v, ptr, name, errp);
|
||||
visit_type_uint64(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
static void set_uint64(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_uint64(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -372,7 +370,7 @@ static void set_uint64(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_uint64(v, ptr, name, errp);
|
||||
visit_type_uint64(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
PropertyInfo qdev_prop_uint64 = {
|
||||
|
@ -389,8 +387,8 @@ static void release_string(Object *obj, const char *name, void *opaque)
|
|||
g_free(*(char **)qdev_get_prop_ptr(DEVICE(obj), prop));
|
||||
}
|
||||
|
||||
static void get_string(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_string(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -398,14 +396,14 @@ static void get_string(Object *obj, Visitor *v, void *opaque,
|
|||
|
||||
if (!*ptr) {
|
||||
char *str = (char *)"";
|
||||
visit_type_str(v, &str, name, errp);
|
||||
visit_type_str(v, name, &str, errp);
|
||||
} else {
|
||||
visit_type_str(v, ptr, name, errp);
|
||||
visit_type_str(v, name, ptr, errp);
|
||||
}
|
||||
}
|
||||
|
||||
static void set_string(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_string(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -418,7 +416,7 @@ static void set_string(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_str(v, &str, name, &local_err);
|
||||
visit_type_str(v, name, &str, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -448,8 +446,8 @@ PropertyInfo qdev_prop_ptr = {
|
|||
* 01:02:03:04:05:06
|
||||
* 01-02-03-04-05-06
|
||||
*/
|
||||
static void get_mac(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -461,11 +459,11 @@ static void get_mac(Object *obj, Visitor *v, void *opaque,
|
|||
mac->a[0], mac->a[1], mac->a[2],
|
||||
mac->a[3], mac->a[4], mac->a[5]);
|
||||
|
||||
visit_type_str(v, &p, name, errp);
|
||||
visit_type_str(v, name, &p, errp);
|
||||
}
|
||||
|
||||
static void set_mac(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -479,7 +477,7 @@ static void set_mac(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_str(v, &str, name, &local_err);
|
||||
visit_type_str(v, name, &str, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -558,8 +556,8 @@ PropertyInfo qdev_prop_fdc_drive_type = {
|
|||
/*
|
||||
* bus-local address, i.e. "$slot" or "$slot.$fn"
|
||||
*/
|
||||
static void set_pci_devfn(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -573,11 +571,11 @@ static void set_pci_devfn(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_str(v, &str, name, &local_err);
|
||||
visit_type_str(v, name, &str, &local_err);
|
||||
if (local_err) {
|
||||
error_free(local_err);
|
||||
local_err = NULL;
|
||||
visit_type_int32(v, &value, name, &local_err);
|
||||
visit_type_int32(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
} else if (value < -1 || value > 255) {
|
||||
|
@ -629,8 +627,8 @@ PropertyInfo qdev_prop_pci_devfn = {
|
|||
|
||||
/* --- blocksize --- */
|
||||
|
||||
static void set_blocksize(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_blocksize(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -644,7 +642,7 @@ static void set_blocksize(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_uint16(v, &value, name, &local_err);
|
||||
visit_type_uint16(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -676,8 +674,8 @@ PropertyInfo qdev_prop_blocksize = {
|
|||
|
||||
/* --- pci host address --- */
|
||||
|
||||
static void get_pci_host_devaddr(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -690,15 +688,15 @@ static void get_pci_host_devaddr(Object *obj, Visitor *v, void *opaque,
|
|||
addr->domain, addr->bus, addr->slot, addr->function);
|
||||
assert(rc == sizeof(buffer) - 1);
|
||||
|
||||
visit_type_str(v, &p, name, errp);
|
||||
visit_type_str(v, name, &p, errp);
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse [<domain>:]<bus>:<slot>.<func>
|
||||
* if <domain> is not supplied, it's assumed to be 0.
|
||||
*/
|
||||
static void set_pci_host_devaddr(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -715,7 +713,7 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_str(v, &str, name, &local_err);
|
||||
visit_type_str(v, name, &str, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -811,8 +809,8 @@ static void array_element_release(Object *obj, const char *name, void *opaque)
|
|||
g_free(p);
|
||||
}
|
||||
|
||||
static void set_prop_arraylen(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
/* Setter for the property which defines the length of a
|
||||
* variable-sized property array. As well as actually setting the
|
||||
|
@ -837,7 +835,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, void *opaque,
|
|||
name);
|
||||
return;
|
||||
}
|
||||
visit_type_uint32(v, alenptr, name, &local_err);
|
||||
visit_type_uint32(v, name, alenptr, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -1094,24 +1092,24 @@ void qdev_prop_set_globals(DeviceState *dev)
|
|||
|
||||
/* --- 64bit unsigned int 'size' type --- */
|
||||
|
||||
static void get_size(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
|
||||
visit_type_size(v, ptr, name, errp);
|
||||
visit_type_size(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
static void set_size(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
|
||||
|
||||
visit_type_size(v, ptr, name, errp);
|
||||
visit_type_size(v, name, ptr, errp);
|
||||
}
|
||||
|
||||
PropertyInfo qdev_prop_size = {
|
||||
|
|
|
@ -893,8 +893,9 @@ char *qdev_get_dev_path(DeviceState *dev)
|
|||
* Legacy property handling
|
||||
*/
|
||||
|
||||
static void qdev_get_legacy_property(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void qdev_get_legacy_property(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
|
@ -903,7 +904,7 @@ static void qdev_get_legacy_property(Object *obj, Visitor *v, void *opaque,
|
|||
char *ptr = buffer;
|
||||
|
||||
prop->info->print(dev, prop, buffer, sizeof(buffer));
|
||||
visit_type_str(v, &ptr, name, errp);
|
||||
visit_type_str(v, name, &ptr, errp);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
43
hw/i386/pc.c
43
hw/i386/pc.c
|
@ -1741,34 +1741,35 @@ static HotplugHandler *pc_get_hotpug_handler(MachineState *machine,
|
|||
}
|
||||
|
||||
static void
|
||||
pc_machine_get_hotplug_memory_region_size(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
pc_machine_get_hotplug_memory_region_size(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
PCMachineState *pcms = PC_MACHINE(obj);
|
||||
int64_t value = memory_region_size(&pcms->hotplug_memory.mr);
|
||||
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void pc_machine_get_max_ram_below_4g(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
PCMachineState *pcms = PC_MACHINE(obj);
|
||||
uint64_t value = pcms->max_ram_below_4g;
|
||||
|
||||
visit_type_size(v, &value, name, errp);
|
||||
visit_type_size(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void pc_machine_set_max_ram_below_4g(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
PCMachineState *pcms = PC_MACHINE(obj);
|
||||
Error *error = NULL;
|
||||
uint64_t value;
|
||||
|
||||
visit_type_size(v, &value, name, &error);
|
||||
visit_type_size(v, name, &value, &error);
|
||||
if (error) {
|
||||
error_propagate(errp, error);
|
||||
return;
|
||||
|
@ -1790,21 +1791,21 @@ static void pc_machine_set_max_ram_below_4g(Object *obj, Visitor *v,
|
|||
pcms->max_ram_below_4g = value;
|
||||
}
|
||||
|
||||
static void pc_machine_get_vmport(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void pc_machine_get_vmport(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
PCMachineState *pcms = PC_MACHINE(obj);
|
||||
OnOffAuto vmport = pcms->vmport;
|
||||
|
||||
visit_type_OnOffAuto(v, &vmport, name, errp);
|
||||
visit_type_OnOffAuto(v, name, &vmport, errp);
|
||||
}
|
||||
|
||||
static void pc_machine_set_vmport(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void pc_machine_set_vmport(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
PCMachineState *pcms = PC_MACHINE(obj);
|
||||
|
||||
visit_type_OnOffAuto(v, &pcms->vmport, name, errp);
|
||||
visit_type_OnOffAuto(v, name, &pcms->vmport, errp);
|
||||
}
|
||||
|
||||
bool pc_machine_is_smm_enabled(PCMachineState *pcms)
|
||||
|
@ -1832,21 +1833,21 @@ bool pc_machine_is_smm_enabled(PCMachineState *pcms)
|
|||
return false;
|
||||
}
|
||||
|
||||
static void pc_machine_get_smm(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void pc_machine_get_smm(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
PCMachineState *pcms = PC_MACHINE(obj);
|
||||
OnOffAuto smm = pcms->smm;
|
||||
|
||||
visit_type_OnOffAuto(v, &smm, name, errp);
|
||||
visit_type_OnOffAuto(v, name, &smm, errp);
|
||||
}
|
||||
|
||||
static void pc_machine_set_smm(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void pc_machine_set_smm(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
PCMachineState *pcms = PC_MACHINE(obj);
|
||||
|
||||
visit_type_OnOffAuto(v, &pcms->smm, name, errp);
|
||||
visit_type_OnOffAuto(v, name, &pcms->smm, errp);
|
||||
}
|
||||
|
||||
static bool pc_machine_get_nvdimm(Object *obj, Error **errp)
|
||||
|
|
|
@ -200,22 +200,22 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void ide_dev_get_bootindex(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void ide_dev_get_bootindex(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
IDEDevice *d = IDE_DEVICE(obj);
|
||||
|
||||
visit_type_int32(v, &d->conf.bootindex, name, errp);
|
||||
visit_type_int32(v, name, &d->conf.bootindex, errp);
|
||||
}
|
||||
|
||||
static void ide_dev_set_bootindex(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void ide_dev_set_bootindex(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
IDEDevice *d = IDE_DEVICE(obj);
|
||||
int32_t boot_index;
|
||||
Error *local_err = NULL;
|
||||
|
||||
visit_type_int32(v, &boot_index, name, &local_err);
|
||||
visit_type_int32(v, name, &boot_index, &local_err);
|
||||
if (local_err) {
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -89,24 +89,24 @@ static void xics_common_reset(DeviceState *d)
|
|||
device_reset(DEVICE(icp->ics));
|
||||
}
|
||||
|
||||
static void xics_prop_get_nr_irqs(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name, Error **errp)
|
||||
static void xics_prop_get_nr_irqs(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
XICSState *icp = XICS_COMMON(obj);
|
||||
int64_t value = icp->nr_irqs;
|
||||
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void xics_prop_set_nr_irqs(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name, Error **errp)
|
||||
static void xics_prop_set_nr_irqs(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
XICSState *icp = XICS_COMMON(obj);
|
||||
XICSStateClass *info = XICS_COMMON_GET_CLASS(icp);
|
||||
Error *error = NULL;
|
||||
int64_t value;
|
||||
|
||||
visit_type_int(v, &value, name, &error);
|
||||
visit_type_int(v, name, &value, &error);
|
||||
if (error) {
|
||||
error_propagate(errp, error);
|
||||
return;
|
||||
|
@ -123,17 +123,17 @@ static void xics_prop_set_nr_irqs(Object *obj, Visitor *v,
|
|||
}
|
||||
|
||||
static void xics_prop_get_nr_servers(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
XICSState *icp = XICS_COMMON(obj);
|
||||
int64_t value = icp->nr_servers;
|
||||
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void xics_prop_set_nr_servers(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
XICSState *icp = XICS_COMMON(obj);
|
||||
|
@ -141,7 +141,7 @@ static void xics_prop_set_nr_servers(Object *obj, Visitor *v,
|
|||
Error *error = NULL;
|
||||
int64_t value;
|
||||
|
||||
visit_type_int(v, &value, name, &error);
|
||||
visit_type_int(v, name, &value, &error);
|
||||
if (error) {
|
||||
error_propagate(errp, error);
|
||||
return;
|
||||
|
|
|
@ -570,14 +570,13 @@ Object *ich9_lpc_find(void)
|
|||
return o;
|
||||
}
|
||||
|
||||
static void ich9_lpc_get_sci_int(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void ich9_lpc_get_sci_int(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
ICH9LPCState *lpc = ICH9_LPC_DEVICE(obj);
|
||||
uint32_t value = ich9_lpc_sci_irq(lpc);
|
||||
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void ich9_lpc_add_properties(ICH9LPCState *lpc)
|
||||
|
|
|
@ -373,8 +373,8 @@ static Property pc_dimm_properties[] = {
|
|||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
static void pc_dimm_get_size(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void pc_dimm_get_size(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
int64_t value;
|
||||
MemoryRegion *mr;
|
||||
|
@ -383,7 +383,7 @@ static void pc_dimm_get_size(Object *obj, Visitor *v, void *opaque,
|
|||
mr = host_memory_backend_get_memory(dimm->hostmem, errp);
|
||||
value = memory_region_size(mr);
|
||||
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void pc_dimm_check_memdev_is_busy(Object *obj, const char *name,
|
||||
|
|
|
@ -363,12 +363,12 @@ static void pci_edu_uninit(PCIDevice *pdev)
|
|||
timer_del(&edu->dma_timer);
|
||||
}
|
||||
|
||||
static void edu_obj_uint64(Object *obj, struct Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void edu_obj_uint64(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
uint64_t *val = opaque;
|
||||
|
||||
visit_type_uint64(v, val, name, errp);
|
||||
visit_type_uint64(v, name, val, errp);
|
||||
}
|
||||
|
||||
static void edu_instance_init(Object *obj)
|
||||
|
|
|
@ -53,26 +53,26 @@ static void tmp105_alarm_update(TMP105State *s)
|
|||
tmp105_interrupt_update(s);
|
||||
}
|
||||
|
||||
static void tmp105_get_temperature(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void tmp105_get_temperature(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
TMP105State *s = TMP105(obj);
|
||||
int64_t value = s->temperature * 1000 / 256;
|
||||
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
/* Units are 0.001 centigrades relative to 0 C. s->temperature is 8.8
|
||||
* fixed point, so units are 1/256 centigrades. A simple ratio will do.
|
||||
*/
|
||||
static void tmp105_set_temperature(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void tmp105_set_temperature(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
TMP105State *s = TMP105(obj);
|
||||
Error *local_err = NULL;
|
||||
int64_t temp;
|
||||
|
||||
visit_type_int(v, &temp, name, &local_err);
|
||||
visit_type_int(v, name, &temp, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
|
|
@ -94,24 +94,26 @@ static void isa_ne2000_class_initfn(ObjectClass *klass, void *data)
|
|||
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
|
||||
}
|
||||
|
||||
static void isa_ne2000_get_bootindex(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void isa_ne2000_get_bootindex(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
ISANE2000State *isa = ISA_NE2000(obj);
|
||||
NE2000State *s = &isa->ne2000;
|
||||
|
||||
visit_type_int32(v, &s->c.bootindex, name, errp);
|
||||
visit_type_int32(v, name, &s->c.bootindex, errp);
|
||||
}
|
||||
|
||||
static void isa_ne2000_set_bootindex(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void isa_ne2000_set_bootindex(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
ISANE2000State *isa = ISA_NE2000(obj);
|
||||
NE2000State *s = &isa->ne2000;
|
||||
int32_t boot_index;
|
||||
Error *local_err = NULL;
|
||||
|
||||
visit_type_int32(v, &boot_index, name, &local_err);
|
||||
visit_type_int32(v, name, &boot_index, &local_err);
|
||||
if (local_err) {
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -216,39 +216,39 @@ static const VMStateDescription vmstate_i440fx = {
|
|||
};
|
||||
|
||||
static void i440fx_pcihost_get_pci_hole_start(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
I440FXState *s = I440FX_PCI_HOST_BRIDGE(obj);
|
||||
uint32_t value = s->pci_info.w32.begin;
|
||||
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void i440fx_pcihost_get_pci_hole_end(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
I440FXState *s = I440FX_PCI_HOST_BRIDGE(obj);
|
||||
uint32_t value = s->pci_info.w32.end;
|
||||
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void i440fx_pcihost_get_pci_hole64_start(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
PCIHostState *h = PCI_HOST_BRIDGE(obj);
|
||||
Range w64;
|
||||
|
||||
pci_bus_get_w64_range(h->bus, &w64);
|
||||
|
||||
visit_type_uint64(v, &w64.begin, name, errp);
|
||||
visit_type_uint64(v, name, &w64.begin, errp);
|
||||
}
|
||||
|
||||
static void i440fx_pcihost_get_pci_hole64_end(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
PCIHostState *h = PCI_HOST_BRIDGE(obj);
|
||||
|
@ -256,7 +256,7 @@ static void i440fx_pcihost_get_pci_hole64_end(Object *obj, Visitor *v,
|
|||
|
||||
pci_bus_get_w64_range(h->bus, &w64);
|
||||
|
||||
visit_type_uint64(v, &w64.end, name, errp);
|
||||
visit_type_uint64(v, name, &w64.end, errp);
|
||||
}
|
||||
|
||||
static void i440fx_pcihost_initfn(Object *obj)
|
||||
|
|
|
@ -68,27 +68,27 @@ static const char *q35_host_root_bus_path(PCIHostState *host_bridge,
|
|||
}
|
||||
|
||||
static void q35_host_get_pci_hole_start(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
Q35PCIHost *s = Q35_HOST_DEVICE(obj);
|
||||
uint32_t value = s->mch.pci_info.w32.begin;
|
||||
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void q35_host_get_pci_hole_end(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
Q35PCIHost *s = Q35_HOST_DEVICE(obj);
|
||||
uint32_t value = s->mch.pci_info.w32.end;
|
||||
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void q35_host_get_pci_hole64_start(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
PCIHostState *h = PCI_HOST_BRIDGE(obj);
|
||||
|
@ -96,11 +96,11 @@ static void q35_host_get_pci_hole64_start(Object *obj, Visitor *v,
|
|||
|
||||
pci_bus_get_w64_range(h->bus, &w64);
|
||||
|
||||
visit_type_uint64(v, &w64.begin, name, errp);
|
||||
visit_type_uint64(v, name, &w64.begin, errp);
|
||||
}
|
||||
|
||||
static void q35_host_get_pci_hole64_end(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
PCIHostState *h = PCI_HOST_BRIDGE(obj);
|
||||
|
@ -108,17 +108,16 @@ static void q35_host_get_pci_hole64_end(Object *obj, Visitor *v,
|
|||
|
||||
pci_bus_get_w64_range(h->bus, &w64);
|
||||
|
||||
visit_type_uint64(v, &w64.end, name, errp);
|
||||
visit_type_uint64(v, name, &w64.end, errp);
|
||||
}
|
||||
|
||||
static void q35_host_get_mmcfg_size(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void q35_host_get_mmcfg_size(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
PCIExpressHost *e = PCIE_HOST_BRIDGE(obj);
|
||||
uint32_t value = e->size;
|
||||
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static Property mch_props[] = {
|
||||
|
|
|
@ -215,22 +215,22 @@ static uint32_t entity_sense(sPAPRDRConnector *drc, sPAPRDREntitySense *state)
|
|||
return RTAS_OUT_SUCCESS;
|
||||
}
|
||||
|
||||
static void prop_get_index(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void prop_get_index(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
sPAPRDRConnector *drc = SPAPR_DR_CONNECTOR(obj);
|
||||
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
|
||||
uint32_t value = (uint32_t)drck->get_index(drc);
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void prop_get_type(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void prop_get_type(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
sPAPRDRConnector *drc = SPAPR_DR_CONNECTOR(obj);
|
||||
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
|
||||
uint32_t value = (uint32_t)drck->get_type(drc);
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static char *prop_get_name(Object *obj, Error **errp)
|
||||
|
@ -240,19 +240,19 @@ static char *prop_get_name(Object *obj, Error **errp)
|
|||
return g_strdup(drck->get_name(drc));
|
||||
}
|
||||
|
||||
static void prop_get_entity_sense(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void prop_get_entity_sense(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
sPAPRDRConnector *drc = SPAPR_DR_CONNECTOR(obj);
|
||||
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
|
||||
uint32_t value;
|
||||
|
||||
drck->entity_sense(drc, &value);
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void prop_get_fdt(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void prop_get_fdt(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
sPAPRDRConnector *drc = SPAPR_DR_CONNECTOR(obj);
|
||||
Error *err = NULL;
|
||||
|
@ -260,7 +260,7 @@ static void prop_get_fdt(Object *obj, Visitor *v, void *opaque,
|
|||
void *fdt;
|
||||
|
||||
if (!drc->fdt) {
|
||||
visit_start_struct(v, NULL, NULL, name, 0, &err);
|
||||
visit_start_struct(v, name, NULL, 0, &err);
|
||||
if (!err) {
|
||||
visit_end_struct(v, &err);
|
||||
}
|
||||
|
@ -283,7 +283,7 @@ static void prop_get_fdt(Object *obj, Visitor *v, void *opaque,
|
|||
case FDT_BEGIN_NODE:
|
||||
fdt_depth++;
|
||||
name = fdt_get_name(fdt, fdt_offset, &name_len);
|
||||
visit_start_struct(v, NULL, NULL, name, 0, &err);
|
||||
visit_start_struct(v, name, NULL, 0, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
|
@ -309,17 +309,13 @@ static void prop_get_fdt(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
for (i = 0; i < prop_len; i++) {
|
||||
visit_type_uint8(v, (uint8_t *)&prop->data[i], NULL, &err);
|
||||
visit_type_uint8(v, NULL, (uint8_t *)&prop->data[i], &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
}
|
||||
visit_end_list(v, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
visit_end_list(v);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -781,24 +781,24 @@ static void usb_msd_class_initfn_storage(ObjectClass *klass, void *data)
|
|||
dc->props = msd_properties;
|
||||
}
|
||||
|
||||
static void usb_msd_get_bootindex(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void usb_msd_get_bootindex(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
USBDevice *dev = USB_DEVICE(obj);
|
||||
MSDState *s = USB_STORAGE_DEV(dev);
|
||||
|
||||
visit_type_int32(v, &s->conf.bootindex, name, errp);
|
||||
visit_type_int32(v, name, &s->conf.bootindex, errp);
|
||||
}
|
||||
|
||||
static void usb_msd_set_bootindex(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void usb_msd_set_bootindex(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
USBDevice *dev = USB_DEVICE(obj);
|
||||
MSDState *s = USB_STORAGE_DEV(dev);
|
||||
int32_t boot_index;
|
||||
Error *local_err = NULL;
|
||||
|
||||
visit_type_int32(v, &boot_index, name, &local_err);
|
||||
visit_type_int32(v, name, &boot_index, &local_err);
|
||||
if (local_err) {
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -113,29 +113,31 @@ static void balloon_stats_poll_cb(void *opaque)
|
|||
s->stats_vq_elem = NULL;
|
||||
}
|
||||
|
||||
static void balloon_stats_get_all(Object *obj, struct Visitor *v,
|
||||
void *opaque, const char *name, Error **errp)
|
||||
static void balloon_stats_get_all(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
VirtIOBalloon *s = opaque;
|
||||
int i;
|
||||
|
||||
visit_start_struct(v, NULL, "guest-stats", name, 0, &err);
|
||||
visit_start_struct(v, name, NULL, 0, &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
visit_type_int(v, &s->stats_last_update, "last-update", &err);
|
||||
visit_type_int(v, "last-update", &s->stats_last_update, &err);
|
||||
if (err) {
|
||||
goto out_end;
|
||||
}
|
||||
|
||||
visit_start_struct(v, NULL, NULL, "stats", 0, &err);
|
||||
visit_start_struct(v, "stats", NULL, 0, &err);
|
||||
if (err) {
|
||||
goto out_end;
|
||||
}
|
||||
for (i = 0; !err && i < VIRTIO_BALLOON_S_NR; i++) {
|
||||
visit_type_int64(v, (int64_t *) &s->stats[i], balloon_stat_names[i],
|
||||
&err);
|
||||
for (i = 0; i < VIRTIO_BALLOON_S_NR; i++) {
|
||||
visit_type_uint64(v, balloon_stat_names[i], &s->stats[i], &err);
|
||||
if (err) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
error_propagate(errp, err);
|
||||
err = NULL;
|
||||
|
@ -149,23 +151,23 @@ out:
|
|||
error_propagate(errp, err);
|
||||
}
|
||||
|
||||
static void balloon_stats_get_poll_interval(Object *obj, struct Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
static void balloon_stats_get_poll_interval(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
VirtIOBalloon *s = opaque;
|
||||
visit_type_int(v, &s->stats_poll_interval, name, errp);
|
||||
visit_type_int(v, name, &s->stats_poll_interval, errp);
|
||||
}
|
||||
|
||||
static void balloon_stats_set_poll_interval(Object *obj, struct Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
static void balloon_stats_set_poll_interval(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
VirtIOBalloon *s = opaque;
|
||||
Error *local_err = NULL;
|
||||
int64_t value;
|
||||
|
||||
visit_type_int(v, &value, name, &local_err);
|
||||
visit_type_int(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Core Definitions for QAPI Visitor implementations
|
||||
*
|
||||
* Copyright (C) 2012 Red Hat, Inc.
|
||||
* Copyright (C) 2012-2016 Red Hat, Inc.
|
||||
*
|
||||
* Author: Paolo Bonizni <pbonzini@redhat.com>
|
||||
*
|
||||
|
@ -18,52 +18,53 @@
|
|||
struct Visitor
|
||||
{
|
||||
/* Must be set */
|
||||
void (*start_struct)(Visitor *v, void **obj, const char *kind,
|
||||
const char *name, size_t size, Error **errp);
|
||||
void (*start_struct)(Visitor *v, const char *name, void **obj,
|
||||
size_t size, Error **errp);
|
||||
void (*end_struct)(Visitor *v, Error **errp);
|
||||
|
||||
void (*start_implicit_struct)(Visitor *v, void **obj, size_t size,
|
||||
Error **errp);
|
||||
void (*end_implicit_struct)(Visitor *v, Error **errp);
|
||||
/* May be NULL */
|
||||
void (*end_implicit_struct)(Visitor *v);
|
||||
|
||||
void (*start_list)(Visitor *v, const char *name, Error **errp);
|
||||
GenericList *(*next_list)(Visitor *v, GenericList **list, Error **errp);
|
||||
void (*end_list)(Visitor *v, Error **errp);
|
||||
/* Must be set */
|
||||
GenericList *(*next_list)(Visitor *v, GenericList **list);
|
||||
/* Must be set */
|
||||
void (*end_list)(Visitor *v);
|
||||
|
||||
void (*type_enum)(Visitor *v, int *obj, const char * const strings[],
|
||||
const char *kind, const char *name, Error **errp);
|
||||
void (*type_enum)(Visitor *v, const char *name, int *obj,
|
||||
const char *const strings[], Error **errp);
|
||||
/* May be NULL; only needed for input visitors. */
|
||||
void (*get_next_type)(Visitor *v, QType *type, bool promote_int,
|
||||
const char *name, Error **errp);
|
||||
void (*get_next_type)(Visitor *v, const char *name, QType *type,
|
||||
bool promote_int, Error **errp);
|
||||
|
||||
void (*type_int)(Visitor *v, int64_t *obj, const char *name, Error **errp);
|
||||
void (*type_bool)(Visitor *v, bool *obj, const char *name, Error **errp);
|
||||
void (*type_str)(Visitor *v, char **obj, const char *name, Error **errp);
|
||||
void (*type_number)(Visitor *v, double *obj, const char *name,
|
||||
/* Must be set. */
|
||||
void (*type_int64)(Visitor *v, const char *name, int64_t *obj,
|
||||
Error **errp);
|
||||
/* Must be set. */
|
||||
void (*type_uint64)(Visitor *v, const char *name, uint64_t *obj,
|
||||
Error **errp);
|
||||
void (*type_any)(Visitor *v, QObject **obj, const char *name,
|
||||
/* Optional; fallback is type_uint64(). */
|
||||
void (*type_size)(Visitor *v, const char *name, uint64_t *obj,
|
||||
Error **errp);
|
||||
/* Must be set. */
|
||||
void (*type_bool)(Visitor *v, const char *name, bool *obj, Error **errp);
|
||||
void (*type_str)(Visitor *v, const char *name, char **obj, Error **errp);
|
||||
void (*type_number)(Visitor *v, const char *name, double *obj,
|
||||
Error **errp);
|
||||
void (*type_any)(Visitor *v, const char *name, QObject **obj,
|
||||
Error **errp);
|
||||
|
||||
/* May be NULL; most useful for input visitors. */
|
||||
void (*optional)(Visitor *v, bool *present, const char *name);
|
||||
void (*optional)(Visitor *v, const char *name, bool *present);
|
||||
|
||||
void (*type_uint8)(Visitor *v, uint8_t *obj, const char *name, Error **errp);
|
||||
void (*type_uint16)(Visitor *v, uint16_t *obj, const char *name, Error **errp);
|
||||
void (*type_uint32)(Visitor *v, uint32_t *obj, const char *name, Error **errp);
|
||||
void (*type_uint64)(Visitor *v, uint64_t *obj, const char *name, Error **errp);
|
||||
void (*type_int8)(Visitor *v, int8_t *obj, const char *name, Error **errp);
|
||||
void (*type_int16)(Visitor *v, int16_t *obj, const char *name, Error **errp);
|
||||
void (*type_int32)(Visitor *v, int32_t *obj, const char *name, Error **errp);
|
||||
void (*type_int64)(Visitor *v, int64_t *obj, const char *name, Error **errp);
|
||||
/* visit_type_size() falls back to (*type_uint64)() if type_size is unset */
|
||||
void (*type_size)(Visitor *v, uint64_t *obj, const char *name, Error **errp);
|
||||
bool (*start_union)(Visitor *v, bool data_present, Error **errp);
|
||||
void (*end_union)(Visitor *v, bool data_present, Error **errp);
|
||||
};
|
||||
|
||||
void input_type_enum(Visitor *v, int *obj, const char * const strings[],
|
||||
const char *kind, const char *name, Error **errp);
|
||||
void output_type_enum(Visitor *v, int *obj, const char * const strings[],
|
||||
const char *kind, const char *name, Error **errp);
|
||||
void input_type_enum(Visitor *v, const char *name, int *obj,
|
||||
const char *const strings[], Error **errp);
|
||||
void output_type_enum(Visitor *v, const char *name, int *obj,
|
||||
const char *const strings[], Error **errp);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
* Core Definitions for QAPI Visitor Classes
|
||||
*
|
||||
* Copyright (C) 2012-2016 Red Hat, Inc.
|
||||
* Copyright IBM, Corp. 2011
|
||||
*
|
||||
* Authors:
|
||||
|
@ -27,15 +28,16 @@ typedef struct GenericList
|
|||
struct GenericList *next;
|
||||
} GenericList;
|
||||
|
||||
void visit_start_struct(Visitor *v, void **obj, const char *kind,
|
||||
const char *name, size_t size, Error **errp);
|
||||
void visit_start_struct(Visitor *v, const char *name, void **obj,
|
||||
size_t size, Error **errp);
|
||||
void visit_end_struct(Visitor *v, Error **errp);
|
||||
void visit_start_implicit_struct(Visitor *v, void **obj, size_t size,
|
||||
Error **errp);
|
||||
void visit_end_implicit_struct(Visitor *v, Error **errp);
|
||||
void visit_end_implicit_struct(Visitor *v);
|
||||
|
||||
void visit_start_list(Visitor *v, const char *name, Error **errp);
|
||||
GenericList *visit_next_list(Visitor *v, GenericList **list, Error **errp);
|
||||
void visit_end_list(Visitor *v, Error **errp);
|
||||
GenericList *visit_next_list(Visitor *v, GenericList **list);
|
||||
void visit_end_list(Visitor *v);
|
||||
|
||||
/**
|
||||
* Check if an optional member @name of an object needs visiting.
|
||||
|
@ -43,7 +45,7 @@ void visit_end_list(Visitor *v, Error **errp);
|
|||
* corresponding visit_type_*() needs calling; for other visitors,
|
||||
* leave *@present unchanged. Return *@present for convenience.
|
||||
*/
|
||||
bool visit_optional(Visitor *v, bool *present, const char *name);
|
||||
bool visit_optional(Visitor *v, const char *name, bool *present);
|
||||
|
||||
/**
|
||||
* Determine the qtype of the item @name in the current object visit.
|
||||
|
@ -51,25 +53,33 @@ bool visit_optional(Visitor *v, bool *present, const char *name);
|
|||
* alternate type; for other visitors, leave *@type unchanged.
|
||||
* If @promote_int, treat integers as QTYPE_FLOAT.
|
||||
*/
|
||||
void visit_get_next_type(Visitor *v, QType *type, bool promote_int,
|
||||
const char *name, Error **errp);
|
||||
void visit_type_enum(Visitor *v, int *obj, const char * const strings[],
|
||||
const char *kind, const char *name, Error **errp);
|
||||
void visit_type_int(Visitor *v, int64_t *obj, const char *name, Error **errp);
|
||||
void visit_type_uint8(Visitor *v, uint8_t *obj, const char *name, Error **errp);
|
||||
void visit_type_uint16(Visitor *v, uint16_t *obj, const char *name, Error **errp);
|
||||
void visit_type_uint32(Visitor *v, uint32_t *obj, const char *name, Error **errp);
|
||||
void visit_type_uint64(Visitor *v, uint64_t *obj, const char *name, Error **errp);
|
||||
void visit_type_int8(Visitor *v, int8_t *obj, const char *name, Error **errp);
|
||||
void visit_type_int16(Visitor *v, int16_t *obj, const char *name, Error **errp);
|
||||
void visit_type_int32(Visitor *v, int32_t *obj, const char *name, Error **errp);
|
||||
void visit_type_int64(Visitor *v, int64_t *obj, const char *name, Error **errp);
|
||||
void visit_type_size(Visitor *v, uint64_t *obj, const char *name, Error **errp);
|
||||
void visit_type_bool(Visitor *v, bool *obj, const char *name, Error **errp);
|
||||
void visit_type_str(Visitor *v, char **obj, const char *name, Error **errp);
|
||||
void visit_type_number(Visitor *v, double *obj, const char *name, Error **errp);
|
||||
void visit_type_any(Visitor *v, QObject **obj, const char *name, Error **errp);
|
||||
void visit_get_next_type(Visitor *v, const char *name, QType *type,
|
||||
bool promote_int, Error **errp);
|
||||
void visit_type_enum(Visitor *v, const char *name, int *obj,
|
||||
const char *const strings[], Error **errp);
|
||||
void visit_type_int(Visitor *v, const char *name, int64_t *obj, Error **errp);
|
||||
void visit_type_uint8(Visitor *v, const char *name, uint8_t *obj,
|
||||
Error **errp);
|
||||
void visit_type_uint16(Visitor *v, const char *name, uint16_t *obj,
|
||||
Error **errp);
|
||||
void visit_type_uint32(Visitor *v, const char *name, uint32_t *obj,
|
||||
Error **errp);
|
||||
void visit_type_uint64(Visitor *v, const char *name, uint64_t *obj,
|
||||
Error **errp);
|
||||
void visit_type_int8(Visitor *v, const char *name, int8_t *obj, Error **errp);
|
||||
void visit_type_int16(Visitor *v, const char *name, int16_t *obj,
|
||||
Error **errp);
|
||||
void visit_type_int32(Visitor *v, const char *name, int32_t *obj,
|
||||
Error **errp);
|
||||
void visit_type_int64(Visitor *v, const char *name, int64_t *obj,
|
||||
Error **errp);
|
||||
void visit_type_size(Visitor *v, const char *name, uint64_t *obj,
|
||||
Error **errp);
|
||||
void visit_type_bool(Visitor *v, const char *name, bool *obj, Error **errp);
|
||||
void visit_type_str(Visitor *v, const char *name, char **obj, Error **errp);
|
||||
void visit_type_number(Visitor *v, const char *name, double *obj,
|
||||
Error **errp);
|
||||
void visit_type_any(Visitor *v, const char *name, QObject **obj, Error **errp);
|
||||
bool visit_start_union(Visitor *v, bool data_present, Error **errp);
|
||||
void visit_end_union(Visitor *v, bool data_present, Error **errp);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -18,10 +18,9 @@
|
|||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "qemu/queue.h"
|
||||
#include "qemu/typedefs.h"
|
||||
#include "qapi/error.h"
|
||||
|
||||
struct Visitor;
|
||||
|
||||
struct TypeImpl;
|
||||
typedef struct TypeImpl *Type;
|
||||
|
||||
|
@ -291,16 +290,16 @@ typedef struct InterfaceInfo InterfaceInfo;
|
|||
* ObjectPropertyAccessor:
|
||||
* @obj: the object that owns the property
|
||||
* @v: the visitor that contains the property data
|
||||
* @opaque: the object property opaque
|
||||
* @name: the name of the property
|
||||
* @opaque: the object property opaque
|
||||
* @errp: a pointer to an Error that is filled if getting/setting fails.
|
||||
*
|
||||
* Called when trying to get/set a property.
|
||||
*/
|
||||
typedef void (ObjectPropertyAccessor)(Object *obj,
|
||||
struct Visitor *v,
|
||||
void *opaque,
|
||||
Visitor *v,
|
||||
const char *name,
|
||||
void *opaque,
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
|
@ -1025,7 +1024,7 @@ void object_unparent(Object *obj);
|
|||
*
|
||||
* Reads a property from a object.
|
||||
*/
|
||||
void object_property_get(Object *obj, struct Visitor *v, const char *name,
|
||||
void object_property_get(Object *obj, Visitor *v, const char *name,
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
|
@ -1161,7 +1160,7 @@ void object_property_get_uint16List(Object *obj, const char *name,
|
|||
*
|
||||
* Writes a property to a object.
|
||||
*/
|
||||
void object_property_set(Object *obj, struct Visitor *v, const char *name,
|
||||
void object_property_set(Object *obj, Visitor *v, const char *name,
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
|
|
26
memory.c
26
memory.c
|
@ -928,17 +928,18 @@ void memory_region_init(MemoryRegion *mr,
|
|||
}
|
||||
}
|
||||
|
||||
static void memory_region_get_addr(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void memory_region_get_addr(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
MemoryRegion *mr = MEMORY_REGION(obj);
|
||||
uint64_t value = mr->addr;
|
||||
|
||||
visit_type_uint64(v, &value, name, errp);
|
||||
visit_type_uint64(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void memory_region_get_container(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void memory_region_get_container(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
MemoryRegion *mr = MEMORY_REGION(obj);
|
||||
gchar *path = (gchar *)"";
|
||||
|
@ -946,7 +947,7 @@ static void memory_region_get_container(Object *obj, Visitor *v, void *opaque,
|
|||
if (mr->container) {
|
||||
path = object_get_canonical_path(OBJECT(mr->container));
|
||||
}
|
||||
visit_type_str(v, &path, name, errp);
|
||||
visit_type_str(v, name, &path, errp);
|
||||
if (mr->container) {
|
||||
g_free(path);
|
||||
}
|
||||
|
@ -960,13 +961,14 @@ static Object *memory_region_resolve_container(Object *obj, void *opaque,
|
|||
return OBJECT(mr->container);
|
||||
}
|
||||
|
||||
static void memory_region_get_priority(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void memory_region_get_priority(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
MemoryRegion *mr = MEMORY_REGION(obj);
|
||||
int32_t value = mr->priority;
|
||||
|
||||
visit_type_int32(v, &value, name, errp);
|
||||
visit_type_int32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static bool memory_region_get_may_overlap(Object *obj, Error **errp)
|
||||
|
@ -976,13 +978,13 @@ static bool memory_region_get_may_overlap(Object *obj, Error **errp)
|
|||
return mr->may_overlap;
|
||||
}
|
||||
|
||||
static void memory_region_get_size(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void memory_region_get_size(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
MemoryRegion *mr = MEMORY_REGION(obj);
|
||||
uint64_t value = memory_region_size(mr);
|
||||
|
||||
visit_type_uint64(v, &value, name, errp);
|
||||
visit_type_uint64(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void memory_region_initfn(Object *obj)
|
||||
|
|
12
net/dump.c
12
net/dump.c
|
@ -272,23 +272,23 @@ static void filter_dump_setup(NetFilterState *nf, Error **errp)
|
|||
net_dump_state_init(&nfds->ds, nfds->filename, nfds->maxlen, errp);
|
||||
}
|
||||
|
||||
static void filter_dump_get_maxlen(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void filter_dump_get_maxlen(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
NetFilterDumpState *nfds = FILTER_DUMP(obj);
|
||||
uint32_t value = nfds->maxlen;
|
||||
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void filter_dump_set_maxlen(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void filter_dump_set_maxlen(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
NetFilterDumpState *nfds = FILTER_DUMP(obj);
|
||||
Error *local_err = NULL;
|
||||
uint32_t value;
|
||||
|
||||
visit_type_uint32(v, &value, name, &local_err);
|
||||
visit_type_uint32(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -133,23 +133,25 @@ static void filter_buffer_class_init(ObjectClass *oc, void *data)
|
|||
nfc->receive_iov = filter_buffer_receive_iov;
|
||||
}
|
||||
|
||||
static void filter_buffer_get_interval(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void filter_buffer_get_interval(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
FilterBufferState *s = FILTER_BUFFER(obj);
|
||||
uint32_t value = s->interval;
|
||||
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void filter_buffer_set_interval(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void filter_buffer_set_interval(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
FilterBufferState *s = FILTER_BUFFER(obj);
|
||||
Error *local_err = NULL;
|
||||
uint32_t value;
|
||||
|
||||
visit_type_uint32(v, &value, name, &local_err);
|
||||
visit_type_uint32(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -1046,9 +1046,9 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp)
|
|||
static void net_visit(Visitor *v, int is_netdev, void **object, Error **errp)
|
||||
{
|
||||
if (is_netdev) {
|
||||
visit_type_Netdev(v, (Netdev **)object, NULL, errp);
|
||||
visit_type_Netdev(v, NULL, (Netdev **)object, errp);
|
||||
} else {
|
||||
visit_type_NetLegacy(v, (NetLegacy **)object, NULL, errp);
|
||||
visit_type_NetLegacy(v, NULL, (NetLegacy **)object, errp);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
6
numa.c
6
numa.c
|
@ -219,7 +219,7 @@ static int parse_numa(void *opaque, QemuOpts *opts, Error **errp)
|
|||
|
||||
{
|
||||
OptsVisitor *ov = opts_visitor_new(opts);
|
||||
visit_type_NumaOptions(opts_get_visitor(ov), &object, NULL, &err);
|
||||
visit_type_NumaOptions(opts_get_visitor(ov), NULL, &object, &err);
|
||||
opts_visitor_cleanup(ov);
|
||||
}
|
||||
|
||||
|
@ -246,8 +246,8 @@ error:
|
|||
|
||||
if (object) {
|
||||
QapiDeallocVisitor *dv = qapi_dealloc_visitor_new();
|
||||
visit_type_NumaOptions(qapi_dealloc_get_visitor(dv),
|
||||
&object, NULL, NULL);
|
||||
visit_type_NumaOptions(qapi_dealloc_get_visitor(dv), NULL, &object,
|
||||
NULL);
|
||||
qapi_dealloc_visitor_cleanup(dv);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Options Visitor
|
||||
*
|
||||
* Copyright Red Hat, Inc. 2012, 2013
|
||||
* Copyright Red Hat, Inc. 2012-2016
|
||||
*
|
||||
* Author: Laszlo Ersek <lersek@redhat.com>
|
||||
*
|
||||
|
@ -90,6 +90,12 @@ struct OptsVisitor
|
|||
};
|
||||
|
||||
|
||||
static OptsVisitor *to_ov(Visitor *v)
|
||||
{
|
||||
return container_of(v, OptsVisitor, visitor);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
destroy_list(gpointer list)
|
||||
{
|
||||
|
@ -119,10 +125,10 @@ opts_visitor_insert(GHashTable *unprocessed_opts, const QemuOpt *opt)
|
|||
|
||||
|
||||
static void
|
||||
opts_start_struct(Visitor *v, void **obj, const char *kind,
|
||||
const char *name, size_t size, Error **errp)
|
||||
opts_start_struct(Visitor *v, const char *name, void **obj,
|
||||
size_t size, Error **errp)
|
||||
{
|
||||
OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v);
|
||||
OptsVisitor *ov = to_ov(v);
|
||||
const QemuOpt *opt;
|
||||
|
||||
if (obj) {
|
||||
|
@ -161,7 +167,7 @@ ghr_true(gpointer ign_key, gpointer ign_value, gpointer ign_user_data)
|
|||
static void
|
||||
opts_end_struct(Visitor *v, Error **errp)
|
||||
{
|
||||
OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v);
|
||||
OptsVisitor *ov = to_ov(v);
|
||||
GQueue *any;
|
||||
|
||||
if (--ov->depth > 0) {
|
||||
|
@ -203,7 +209,7 @@ lookup_distinct(const OptsVisitor *ov, const char *name, Error **errp)
|
|||
static void
|
||||
opts_start_list(Visitor *v, const char *name, Error **errp)
|
||||
{
|
||||
OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v);
|
||||
OptsVisitor *ov = to_ov(v);
|
||||
|
||||
/* we can't traverse a list in a list */
|
||||
assert(ov->list_mode == LM_NONE);
|
||||
|
@ -215,9 +221,9 @@ opts_start_list(Visitor *v, const char *name, Error **errp)
|
|||
|
||||
|
||||
static GenericList *
|
||||
opts_next_list(Visitor *v, GenericList **list, Error **errp)
|
||||
opts_next_list(Visitor *v, GenericList **list)
|
||||
{
|
||||
OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v);
|
||||
OptsVisitor *ov = to_ov(v);
|
||||
GenericList **link;
|
||||
|
||||
switch (ov->list_mode) {
|
||||
|
@ -264,9 +270,9 @@ opts_next_list(Visitor *v, GenericList **list, Error **errp)
|
|||
|
||||
|
||||
static void
|
||||
opts_end_list(Visitor *v, Error **errp)
|
||||
opts_end_list(Visitor *v)
|
||||
{
|
||||
OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v);
|
||||
OptsVisitor *ov = to_ov(v);
|
||||
|
||||
assert(ov->list_mode == LM_STARTED ||
|
||||
ov->list_mode == LM_IN_PROGRESS ||
|
||||
|
@ -306,9 +312,9 @@ processed(OptsVisitor *ov, const char *name)
|
|||
|
||||
|
||||
static void
|
||||
opts_type_str(Visitor *v, char **obj, const char *name, Error **errp)
|
||||
opts_type_str(Visitor *v, const char *name, char **obj, Error **errp)
|
||||
{
|
||||
OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v);
|
||||
OptsVisitor *ov = to_ov(v);
|
||||
const QemuOpt *opt;
|
||||
|
||||
opt = lookup_scalar(ov, name, errp);
|
||||
|
@ -322,9 +328,9 @@ opts_type_str(Visitor *v, char **obj, const char *name, Error **errp)
|
|||
|
||||
/* mimics qemu-option.c::parse_option_bool() */
|
||||
static void
|
||||
opts_type_bool(Visitor *v, bool *obj, const char *name, Error **errp)
|
||||
opts_type_bool(Visitor *v, const char *name, bool *obj, Error **errp)
|
||||
{
|
||||
OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v);
|
||||
OptsVisitor *ov = to_ov(v);
|
||||
const QemuOpt *opt;
|
||||
|
||||
opt = lookup_scalar(ov, name, errp);
|
||||
|
@ -355,9 +361,9 @@ opts_type_bool(Visitor *v, bool *obj, const char *name, Error **errp)
|
|||
|
||||
|
||||
static void
|
||||
opts_type_int(Visitor *v, int64_t *obj, const char *name, Error **errp)
|
||||
opts_type_int64(Visitor *v, const char *name, int64_t *obj, Error **errp)
|
||||
{
|
||||
OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v);
|
||||
OptsVisitor *ov = to_ov(v);
|
||||
const QemuOpt *opt;
|
||||
const char *str;
|
||||
long long val;
|
||||
|
@ -411,9 +417,9 @@ opts_type_int(Visitor *v, int64_t *obj, const char *name, Error **errp)
|
|||
|
||||
|
||||
static void
|
||||
opts_type_uint64(Visitor *v, uint64_t *obj, const char *name, Error **errp)
|
||||
opts_type_uint64(Visitor *v, const char *name, uint64_t *obj, Error **errp)
|
||||
{
|
||||
OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v);
|
||||
OptsVisitor *ov = to_ov(v);
|
||||
const QemuOpt *opt;
|
||||
const char *str;
|
||||
unsigned long long val;
|
||||
|
@ -463,9 +469,9 @@ opts_type_uint64(Visitor *v, uint64_t *obj, const char *name, Error **errp)
|
|||
|
||||
|
||||
static void
|
||||
opts_type_size(Visitor *v, uint64_t *obj, const char *name, Error **errp)
|
||||
opts_type_size(Visitor *v, const char *name, uint64_t *obj, Error **errp)
|
||||
{
|
||||
OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v);
|
||||
OptsVisitor *ov = to_ov(v);
|
||||
const QemuOpt *opt;
|
||||
int64_t val;
|
||||
char *endptr;
|
||||
|
@ -489,9 +495,9 @@ opts_type_size(Visitor *v, uint64_t *obj, const char *name, Error **errp)
|
|||
|
||||
|
||||
static void
|
||||
opts_optional(Visitor *v, bool *present, const char *name)
|
||||
opts_optional(Visitor *v, const char *name, bool *present)
|
||||
{
|
||||
OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v);
|
||||
OptsVisitor *ov = to_ov(v);
|
||||
|
||||
/* we only support a single mandatory scalar field in a list node */
|
||||
assert(ov->list_mode == LM_NONE);
|
||||
|
@ -523,7 +529,7 @@ opts_visitor_new(const QemuOpts *opts)
|
|||
*/
|
||||
ov->visitor.type_enum = &input_type_enum;
|
||||
|
||||
ov->visitor.type_int = &opts_type_int;
|
||||
ov->visitor.type_int64 = &opts_type_int64;
|
||||
ov->visitor.type_uint64 = &opts_type_uint64;
|
||||
ov->visitor.type_size = &opts_type_size;
|
||||
ov->visitor.type_bool = &opts_type_bool;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
* Dealloc Visitor
|
||||
*
|
||||
* Copyright (C) 2012-2016 Red Hat, Inc.
|
||||
* Copyright IBM, Corp. 2011
|
||||
*
|
||||
* Authors:
|
||||
|
@ -29,7 +30,6 @@ struct QapiDeallocVisitor
|
|||
{
|
||||
Visitor visitor;
|
||||
QTAILQ_HEAD(, StackEntry) stack;
|
||||
bool is_list_head;
|
||||
};
|
||||
|
||||
static QapiDeallocVisitor *to_qov(Visitor *v)
|
||||
|
@ -60,9 +60,8 @@ static void *qapi_dealloc_pop(QapiDeallocVisitor *qov)
|
|||
return value;
|
||||
}
|
||||
|
||||
static void qapi_dealloc_start_struct(Visitor *v, void **obj, const char *kind,
|
||||
const char *name, size_t unused,
|
||||
Error **errp)
|
||||
static void qapi_dealloc_start_struct(Visitor *v, const char *name, void **obj,
|
||||
size_t unused, Error **errp)
|
||||
{
|
||||
QapiDeallocVisitor *qov = to_qov(v);
|
||||
qapi_dealloc_push(qov, obj);
|
||||
|
@ -86,7 +85,7 @@ static void qapi_dealloc_start_implicit_struct(Visitor *v,
|
|||
qapi_dealloc_push(qov, obj);
|
||||
}
|
||||
|
||||
static void qapi_dealloc_end_implicit_struct(Visitor *v, Error **errp)
|
||||
static void qapi_dealloc_end_implicit_struct(Visitor *v)
|
||||
{
|
||||
QapiDeallocVisitor *qov = to_qov(v);
|
||||
void **obj = qapi_dealloc_pop(qov);
|
||||
|
@ -101,8 +100,7 @@ static void qapi_dealloc_start_list(Visitor *v, const char *name, Error **errp)
|
|||
qapi_dealloc_push(qov, NULL);
|
||||
}
|
||||
|
||||
static GenericList *qapi_dealloc_next_list(Visitor *v, GenericList **listp,
|
||||
Error **errp)
|
||||
static GenericList *qapi_dealloc_next_list(Visitor *v, GenericList **listp)
|
||||
{
|
||||
GenericList *list = *listp;
|
||||
QapiDeallocVisitor *qov = to_qov(v);
|
||||
|
@ -122,14 +120,14 @@ static GenericList *qapi_dealloc_next_list(Visitor *v, GenericList **listp,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static void qapi_dealloc_end_list(Visitor *v, Error **errp)
|
||||
static void qapi_dealloc_end_list(Visitor *v)
|
||||
{
|
||||
QapiDeallocVisitor *qov = to_qov(v);
|
||||
void *obj = qapi_dealloc_pop(qov);
|
||||
assert(obj == NULL); /* should've been list head tracker with no payload */
|
||||
}
|
||||
|
||||
static void qapi_dealloc_type_str(Visitor *v, char **obj, const char *name,
|
||||
static void qapi_dealloc_type_str(Visitor *v, const char *name, char **obj,
|
||||
Error **errp)
|
||||
{
|
||||
if (obj) {
|
||||
|
@ -137,38 +135,36 @@ static void qapi_dealloc_type_str(Visitor *v, char **obj, const char *name,
|
|||
}
|
||||
}
|
||||
|
||||
static void qapi_dealloc_type_int(Visitor *v, int64_t *obj, const char *name,
|
||||
Error **errp)
|
||||
static void qapi_dealloc_type_int64(Visitor *v, const char *name, int64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
}
|
||||
|
||||
static void qapi_dealloc_type_bool(Visitor *v, bool *obj, const char *name,
|
||||
static void qapi_dealloc_type_uint64(Visitor *v, const char *name,
|
||||
uint64_t *obj, Error **errp)
|
||||
{
|
||||
}
|
||||
|
||||
static void qapi_dealloc_type_bool(Visitor *v, const char *name, bool *obj,
|
||||
Error **errp)
|
||||
{
|
||||
}
|
||||
|
||||
static void qapi_dealloc_type_number(Visitor *v, double *obj, const char *name,
|
||||
static void qapi_dealloc_type_number(Visitor *v, const char *name, double *obj,
|
||||
Error **errp)
|
||||
{
|
||||
}
|
||||
|
||||
static void qapi_dealloc_type_anything(Visitor *v, QObject **obj,
|
||||
const char *name, Error **errp)
|
||||
static void qapi_dealloc_type_anything(Visitor *v, const char *name,
|
||||
QObject **obj, Error **errp)
|
||||
{
|
||||
if (obj) {
|
||||
qobject_decref(*obj);
|
||||
}
|
||||
}
|
||||
|
||||
static void qapi_dealloc_type_size(Visitor *v, uint64_t *obj, const char *name,
|
||||
Error **errp)
|
||||
{
|
||||
}
|
||||
|
||||
static void qapi_dealloc_type_enum(Visitor *v, int *obj,
|
||||
const char * const strings[],
|
||||
const char *kind, const char *name,
|
||||
Error **errp)
|
||||
static void qapi_dealloc_type_enum(Visitor *v, const char *name, int *obj,
|
||||
const char * const strings[], Error **errp)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -221,12 +217,12 @@ QapiDeallocVisitor *qapi_dealloc_visitor_new(void)
|
|||
v->visitor.next_list = qapi_dealloc_next_list;
|
||||
v->visitor.end_list = qapi_dealloc_end_list;
|
||||
v->visitor.type_enum = qapi_dealloc_type_enum;
|
||||
v->visitor.type_int = qapi_dealloc_type_int;
|
||||
v->visitor.type_int64 = qapi_dealloc_type_int64;
|
||||
v->visitor.type_uint64 = qapi_dealloc_type_uint64;
|
||||
v->visitor.type_bool = qapi_dealloc_type_bool;
|
||||
v->visitor.type_str = qapi_dealloc_type_str;
|
||||
v->visitor.type_number = qapi_dealloc_type_number;
|
||||
v->visitor.type_any = qapi_dealloc_type_anything;
|
||||
v->visitor.type_size = qapi_dealloc_type_size;
|
||||
v->visitor.start_union = qapi_dealloc_start_union;
|
||||
|
||||
QTAILQ_INIT(&v->stack);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
* Core Definitions for QAPI Visitor Classes
|
||||
*
|
||||
* Copyright (C) 2012-2016 Red Hat, Inc.
|
||||
* Copyright IBM, Corp. 2011
|
||||
*
|
||||
* Authors:
|
||||
|
@ -18,10 +19,10 @@
|
|||
#include "qapi/visitor.h"
|
||||
#include "qapi/visitor-impl.h"
|
||||
|
||||
void visit_start_struct(Visitor *v, void **obj, const char *kind,
|
||||
const char *name, size_t size, Error **errp)
|
||||
void visit_start_struct(Visitor *v, const char *name, void **obj,
|
||||
size_t size, Error **errp)
|
||||
{
|
||||
v->start_struct(v, obj, kind, name, size, errp);
|
||||
v->start_struct(v, name, obj, size, errp);
|
||||
}
|
||||
|
||||
void visit_end_struct(Visitor *v, Error **errp)
|
||||
|
@ -37,10 +38,10 @@ void visit_start_implicit_struct(Visitor *v, void **obj, size_t size,
|
|||
}
|
||||
}
|
||||
|
||||
void visit_end_implicit_struct(Visitor *v, Error **errp)
|
||||
void visit_end_implicit_struct(Visitor *v)
|
||||
{
|
||||
if (v->end_implicit_struct) {
|
||||
v->end_implicit_struct(v, errp);
|
||||
v->end_implicit_struct(v);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -49,14 +50,14 @@ void visit_start_list(Visitor *v, const char *name, Error **errp)
|
|||
v->start_list(v, name, errp);
|
||||
}
|
||||
|
||||
GenericList *visit_next_list(Visitor *v, GenericList **list, Error **errp)
|
||||
GenericList *visit_next_list(Visitor *v, GenericList **list)
|
||||
{
|
||||
return v->next_list(v, list, errp);
|
||||
return v->next_list(v, list);
|
||||
}
|
||||
|
||||
void visit_end_list(Visitor *v, Error **errp)
|
||||
void visit_end_list(Visitor *v)
|
||||
{
|
||||
v->end_list(v, errp);
|
||||
v->end_list(v);
|
||||
}
|
||||
|
||||
bool visit_start_union(Visitor *v, bool data_present, Error **errp)
|
||||
|
@ -67,209 +68,160 @@ bool visit_start_union(Visitor *v, bool data_present, Error **errp)
|
|||
return true;
|
||||
}
|
||||
|
||||
void visit_end_union(Visitor *v, bool data_present, Error **errp)
|
||||
{
|
||||
if (v->end_union) {
|
||||
v->end_union(v, data_present, errp);
|
||||
}
|
||||
}
|
||||
|
||||
bool visit_optional(Visitor *v, bool *present, const char *name)
|
||||
bool visit_optional(Visitor *v, const char *name, bool *present)
|
||||
{
|
||||
if (v->optional) {
|
||||
v->optional(v, present, name);
|
||||
v->optional(v, name, present);
|
||||
}
|
||||
return *present;
|
||||
}
|
||||
|
||||
void visit_get_next_type(Visitor *v, QType *type, bool promote_int,
|
||||
const char *name, Error **errp)
|
||||
void visit_get_next_type(Visitor *v, const char *name, QType *type,
|
||||
bool promote_int, Error **errp)
|
||||
{
|
||||
if (v->get_next_type) {
|
||||
v->get_next_type(v, type, promote_int, name, errp);
|
||||
v->get_next_type(v, name, type, promote_int, errp);
|
||||
}
|
||||
}
|
||||
|
||||
void visit_type_enum(Visitor *v, int *obj, const char * const strings[],
|
||||
const char *kind, const char *name, Error **errp)
|
||||
void visit_type_enum(Visitor *v, const char *name, int *obj,
|
||||
const char *const strings[], Error **errp)
|
||||
{
|
||||
v->type_enum(v, obj, strings, kind, name, errp);
|
||||
v->type_enum(v, name, obj, strings, errp);
|
||||
}
|
||||
|
||||
void visit_type_int(Visitor *v, int64_t *obj, const char *name, Error **errp)
|
||||
void visit_type_int(Visitor *v, const char *name, int64_t *obj, Error **errp)
|
||||
{
|
||||
v->type_int(v, obj, name, errp);
|
||||
v->type_int64(v, name, obj, errp);
|
||||
}
|
||||
|
||||
void visit_type_uint8(Visitor *v, uint8_t *obj, const char *name, Error **errp)
|
||||
static void visit_type_uintN(Visitor *v, uint64_t *obj, const char *name,
|
||||
uint64_t max, const char *type, Error **errp)
|
||||
{
|
||||
int64_t value;
|
||||
Error *err = NULL;
|
||||
uint64_t value = *obj;
|
||||
|
||||
if (v->type_uint8) {
|
||||
v->type_uint8(v, obj, name, errp);
|
||||
v->type_uint64(v, name, &value, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
} else if (value > max) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
name ? name : "null", type);
|
||||
} else {
|
||||
value = *obj;
|
||||
v->type_int(v, &value, name, errp);
|
||||
if (value < 0 || value > UINT8_MAX) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
name ? name : "null", "uint8_t");
|
||||
return;
|
||||
}
|
||||
*obj = value;
|
||||
}
|
||||
}
|
||||
|
||||
void visit_type_uint16(Visitor *v, uint16_t *obj, const char *name, Error **errp)
|
||||
{
|
||||
int64_t value;
|
||||
|
||||
if (v->type_uint16) {
|
||||
v->type_uint16(v, obj, name, errp);
|
||||
} else {
|
||||
value = *obj;
|
||||
v->type_int(v, &value, name, errp);
|
||||
if (value < 0 || value > UINT16_MAX) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
name ? name : "null", "uint16_t");
|
||||
return;
|
||||
}
|
||||
*obj = value;
|
||||
}
|
||||
}
|
||||
|
||||
void visit_type_uint32(Visitor *v, uint32_t *obj, const char *name, Error **errp)
|
||||
{
|
||||
int64_t value;
|
||||
|
||||
if (v->type_uint32) {
|
||||
v->type_uint32(v, obj, name, errp);
|
||||
} else {
|
||||
value = *obj;
|
||||
v->type_int(v, &value, name, errp);
|
||||
if (value < 0 || value > UINT32_MAX) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
name ? name : "null", "uint32_t");
|
||||
return;
|
||||
}
|
||||
*obj = value;
|
||||
}
|
||||
}
|
||||
|
||||
void visit_type_uint64(Visitor *v, uint64_t *obj, const char *name, Error **errp)
|
||||
{
|
||||
int64_t value;
|
||||
|
||||
if (v->type_uint64) {
|
||||
v->type_uint64(v, obj, name, errp);
|
||||
} else {
|
||||
value = *obj;
|
||||
v->type_int(v, &value, name, errp);
|
||||
*obj = value;
|
||||
}
|
||||
}
|
||||
|
||||
void visit_type_int8(Visitor *v, int8_t *obj, const char *name, Error **errp)
|
||||
{
|
||||
int64_t value;
|
||||
|
||||
if (v->type_int8) {
|
||||
v->type_int8(v, obj, name, errp);
|
||||
} else {
|
||||
value = *obj;
|
||||
v->type_int(v, &value, name, errp);
|
||||
if (value < INT8_MIN || value > INT8_MAX) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
name ? name : "null", "int8_t");
|
||||
return;
|
||||
}
|
||||
*obj = value;
|
||||
}
|
||||
}
|
||||
|
||||
void visit_type_int16(Visitor *v, int16_t *obj, const char *name, Error **errp)
|
||||
{
|
||||
int64_t value;
|
||||
|
||||
if (v->type_int16) {
|
||||
v->type_int16(v, obj, name, errp);
|
||||
} else {
|
||||
value = *obj;
|
||||
v->type_int(v, &value, name, errp);
|
||||
if (value < INT16_MIN || value > INT16_MAX) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
name ? name : "null", "int16_t");
|
||||
return;
|
||||
}
|
||||
*obj = value;
|
||||
}
|
||||
}
|
||||
|
||||
void visit_type_int32(Visitor *v, int32_t *obj, const char *name, Error **errp)
|
||||
{
|
||||
int64_t value;
|
||||
|
||||
if (v->type_int32) {
|
||||
v->type_int32(v, obj, name, errp);
|
||||
} else {
|
||||
value = *obj;
|
||||
v->type_int(v, &value, name, errp);
|
||||
if (value < INT32_MIN || value > INT32_MAX) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
name ? name : "null", "int32_t");
|
||||
return;
|
||||
}
|
||||
*obj = value;
|
||||
}
|
||||
}
|
||||
|
||||
void visit_type_int64(Visitor *v, int64_t *obj, const char *name, Error **errp)
|
||||
{
|
||||
if (v->type_int64) {
|
||||
v->type_int64(v, obj, name, errp);
|
||||
} else {
|
||||
v->type_int(v, obj, name, errp);
|
||||
}
|
||||
}
|
||||
|
||||
void visit_type_size(Visitor *v, uint64_t *obj, const char *name, Error **errp)
|
||||
{
|
||||
int64_t value;
|
||||
|
||||
if (v->type_size) {
|
||||
v->type_size(v, obj, name, errp);
|
||||
} else if (v->type_uint64) {
|
||||
v->type_uint64(v, obj, name, errp);
|
||||
} else {
|
||||
value = *obj;
|
||||
v->type_int(v, &value, name, errp);
|
||||
*obj = value;
|
||||
}
|
||||
}
|
||||
|
||||
void visit_type_bool(Visitor *v, bool *obj, const char *name, Error **errp)
|
||||
{
|
||||
v->type_bool(v, obj, name, errp);
|
||||
}
|
||||
|
||||
void visit_type_str(Visitor *v, char **obj, const char *name, Error **errp)
|
||||
{
|
||||
v->type_str(v, obj, name, errp);
|
||||
}
|
||||
|
||||
void visit_type_number(Visitor *v, double *obj, const char *name, Error **errp)
|
||||
{
|
||||
v->type_number(v, obj, name, errp);
|
||||
}
|
||||
|
||||
void visit_type_any(Visitor *v, QObject **obj, const char *name,
|
||||
Error **errp)
|
||||
{
|
||||
v->type_any(v, obj, name, errp);
|
||||
}
|
||||
|
||||
void output_type_enum(Visitor *v, int *obj, const char * const strings[],
|
||||
const char *kind, const char *name,
|
||||
void visit_type_uint8(Visitor *v, const char *name, uint8_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
uint64_t value = *obj;
|
||||
visit_type_uintN(v, &value, name, UINT8_MAX, "uint8_t", errp);
|
||||
*obj = value;
|
||||
}
|
||||
|
||||
void visit_type_uint16(Visitor *v, const char *name, uint16_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
uint64_t value = *obj;
|
||||
visit_type_uintN(v, &value, name, UINT16_MAX, "uint16_t", errp);
|
||||
*obj = value;
|
||||
}
|
||||
|
||||
void visit_type_uint32(Visitor *v, const char *name, uint32_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
uint64_t value = *obj;
|
||||
visit_type_uintN(v, &value, name, UINT32_MAX, "uint32_t", errp);
|
||||
*obj = value;
|
||||
}
|
||||
|
||||
void visit_type_uint64(Visitor *v, const char *name, uint64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
v->type_uint64(v, name, obj, errp);
|
||||
}
|
||||
|
||||
static void visit_type_intN(Visitor *v, int64_t *obj, const char *name,
|
||||
int64_t min, int64_t max, const char *type,
|
||||
Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
int64_t value = *obj;
|
||||
|
||||
v->type_int64(v, name, &value, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
} else if (value < min || value > max) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
|
||||
name ? name : "null", type);
|
||||
} else {
|
||||
*obj = value;
|
||||
}
|
||||
}
|
||||
|
||||
void visit_type_int8(Visitor *v, const char *name, int8_t *obj, Error **errp)
|
||||
{
|
||||
int64_t value = *obj;
|
||||
visit_type_intN(v, &value, name, INT8_MIN, INT8_MAX, "int8_t", errp);
|
||||
*obj = value;
|
||||
}
|
||||
|
||||
void visit_type_int16(Visitor *v, const char *name, int16_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
int64_t value = *obj;
|
||||
visit_type_intN(v, &value, name, INT16_MIN, INT16_MAX, "int16_t", errp);
|
||||
*obj = value;
|
||||
}
|
||||
|
||||
void visit_type_int32(Visitor *v, const char *name, int32_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
int64_t value = *obj;
|
||||
visit_type_intN(v, &value, name, INT32_MIN, INT32_MAX, "int32_t", errp);
|
||||
*obj = value;
|
||||
}
|
||||
|
||||
void visit_type_int64(Visitor *v, const char *name, int64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
v->type_int64(v, name, obj, errp);
|
||||
}
|
||||
|
||||
void visit_type_size(Visitor *v, const char *name, uint64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
if (v->type_size) {
|
||||
v->type_size(v, name, obj, errp);
|
||||
} else {
|
||||
v->type_uint64(v, name, obj, errp);
|
||||
}
|
||||
}
|
||||
|
||||
void visit_type_bool(Visitor *v, const char *name, bool *obj, Error **errp)
|
||||
{
|
||||
v->type_bool(v, name, obj, errp);
|
||||
}
|
||||
|
||||
void visit_type_str(Visitor *v, const char *name, char **obj, Error **errp)
|
||||
{
|
||||
v->type_str(v, name, obj, errp);
|
||||
}
|
||||
|
||||
void visit_type_number(Visitor *v, const char *name, double *obj,
|
||||
Error **errp)
|
||||
{
|
||||
v->type_number(v, name, obj, errp);
|
||||
}
|
||||
|
||||
void visit_type_any(Visitor *v, const char *name, QObject **obj, Error **errp)
|
||||
{
|
||||
v->type_any(v, name, obj, errp);
|
||||
}
|
||||
|
||||
void output_type_enum(Visitor *v, const char *name, int *obj,
|
||||
const char *const strings[], Error **errp)
|
||||
{
|
||||
int i = 0;
|
||||
int value = *obj;
|
||||
|
@ -283,12 +235,11 @@ void output_type_enum(Visitor *v, int *obj, const char * const strings[],
|
|||
}
|
||||
|
||||
enum_str = (char *)strings[value];
|
||||
visit_type_str(v, &enum_str, name, errp);
|
||||
visit_type_str(v, name, &enum_str, errp);
|
||||
}
|
||||
|
||||
void input_type_enum(Visitor *v, int *obj, const char * const strings[],
|
||||
const char *kind, const char *name,
|
||||
Error **errp)
|
||||
void input_type_enum(Visitor *v, const char *name, int *obj,
|
||||
const char *const strings[], Error **errp)
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
int64_t value = 0;
|
||||
|
@ -296,7 +247,7 @@ void input_type_enum(Visitor *v, int *obj, const char * const strings[],
|
|||
|
||||
assert(strings);
|
||||
|
||||
visit_type_str(v, &enum_str, name, &local_err);
|
||||
visit_type_str(v, name, &enum_str, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
* Input Visitor
|
||||
*
|
||||
* Copyright (C) 2012-2016 Red Hat, Inc.
|
||||
* Copyright IBM, Corp. 2011
|
||||
*
|
||||
* Authors:
|
||||
|
@ -115,8 +116,8 @@ static void qmp_input_pop(QmpInputVisitor *qiv, Error **errp)
|
|||
qiv->nb_stack--;
|
||||
}
|
||||
|
||||
static void qmp_input_start_struct(Visitor *v, void **obj, const char *kind,
|
||||
const char *name, size_t size, Error **errp)
|
||||
static void qmp_input_start_struct(Visitor *v, const char *name, void **obj,
|
||||
size_t size, Error **errp)
|
||||
{
|
||||
QmpInputVisitor *qiv = to_qiv(v);
|
||||
QObject *qobj = qmp_input_get_object(qiv, name, true);
|
||||
|
@ -154,10 +155,6 @@ static void qmp_input_start_implicit_struct(Visitor *v, void **obj,
|
|||
}
|
||||
}
|
||||
|
||||
static void qmp_input_end_implicit_struct(Visitor *v, Error **errp)
|
||||
{
|
||||
}
|
||||
|
||||
static void qmp_input_start_list(Visitor *v, const char *name, Error **errp)
|
||||
{
|
||||
QmpInputVisitor *qiv = to_qiv(v);
|
||||
|
@ -172,8 +169,7 @@ static void qmp_input_start_list(Visitor *v, const char *name, Error **errp)
|
|||
qmp_input_push(qiv, qobj, errp);
|
||||
}
|
||||
|
||||
static GenericList *qmp_input_next_list(Visitor *v, GenericList **list,
|
||||
Error **errp)
|
||||
static GenericList *qmp_input_next_list(Visitor *v, GenericList **list)
|
||||
{
|
||||
QmpInputVisitor *qiv = to_qiv(v);
|
||||
GenericList *entry;
|
||||
|
@ -202,15 +198,15 @@ static GenericList *qmp_input_next_list(Visitor *v, GenericList **list,
|
|||
return entry;
|
||||
}
|
||||
|
||||
static void qmp_input_end_list(Visitor *v, Error **errp)
|
||||
static void qmp_input_end_list(Visitor *v)
|
||||
{
|
||||
QmpInputVisitor *qiv = to_qiv(v);
|
||||
|
||||
qmp_input_pop(qiv, errp);
|
||||
qmp_input_pop(qiv, &error_abort);
|
||||
}
|
||||
|
||||
static void qmp_input_get_next_type(Visitor *v, QType *type, bool promote_int,
|
||||
const char *name, Error **errp)
|
||||
static void qmp_input_get_next_type(Visitor *v, const char *name, QType *type,
|
||||
bool promote_int, Error **errp)
|
||||
{
|
||||
QmpInputVisitor *qiv = to_qiv(v);
|
||||
QObject *qobj = qmp_input_get_object(qiv, name, false);
|
||||
|
@ -225,8 +221,8 @@ static void qmp_input_get_next_type(Visitor *v, QType *type, bool promote_int,
|
|||
}
|
||||
}
|
||||
|
||||
static void qmp_input_type_int(Visitor *v, int64_t *obj, const char *name,
|
||||
Error **errp)
|
||||
static void qmp_input_type_int64(Visitor *v, const char *name, int64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
QmpInputVisitor *qiv = to_qiv(v);
|
||||
QInt *qint = qobject_to_qint(qmp_input_get_object(qiv, name, true));
|
||||
|
@ -240,7 +236,23 @@ static void qmp_input_type_int(Visitor *v, int64_t *obj, const char *name,
|
|||
*obj = qint_get_int(qint);
|
||||
}
|
||||
|
||||
static void qmp_input_type_bool(Visitor *v, bool *obj, const char *name,
|
||||
static void qmp_input_type_uint64(Visitor *v, const char *name, uint64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
/* FIXME: qobject_to_qint mishandles values over INT64_MAX */
|
||||
QmpInputVisitor *qiv = to_qiv(v);
|
||||
QInt *qint = qobject_to_qint(qmp_input_get_object(qiv, name, true));
|
||||
|
||||
if (!qint) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null",
|
||||
"integer");
|
||||
return;
|
||||
}
|
||||
|
||||
*obj = qint_get_int(qint);
|
||||
}
|
||||
|
||||
static void qmp_input_type_bool(Visitor *v, const char *name, bool *obj,
|
||||
Error **errp)
|
||||
{
|
||||
QmpInputVisitor *qiv = to_qiv(v);
|
||||
|
@ -255,7 +267,7 @@ static void qmp_input_type_bool(Visitor *v, bool *obj, const char *name,
|
|||
*obj = qbool_get_bool(qbool);
|
||||
}
|
||||
|
||||
static void qmp_input_type_str(Visitor *v, char **obj, const char *name,
|
||||
static void qmp_input_type_str(Visitor *v, const char *name, char **obj,
|
||||
Error **errp)
|
||||
{
|
||||
QmpInputVisitor *qiv = to_qiv(v);
|
||||
|
@ -270,7 +282,7 @@ static void qmp_input_type_str(Visitor *v, char **obj, const char *name,
|
|||
*obj = g_strdup(qstring_get_str(qstr));
|
||||
}
|
||||
|
||||
static void qmp_input_type_number(Visitor *v, double *obj, const char *name,
|
||||
static void qmp_input_type_number(Visitor *v, const char *name, double *obj,
|
||||
Error **errp)
|
||||
{
|
||||
QmpInputVisitor *qiv = to_qiv(v);
|
||||
|
@ -294,7 +306,7 @@ static void qmp_input_type_number(Visitor *v, double *obj, const char *name,
|
|||
"number");
|
||||
}
|
||||
|
||||
static void qmp_input_type_any(Visitor *v, QObject **obj, const char *name,
|
||||
static void qmp_input_type_any(Visitor *v, const char *name, QObject **obj,
|
||||
Error **errp)
|
||||
{
|
||||
QmpInputVisitor *qiv = to_qiv(v);
|
||||
|
@ -304,7 +316,7 @@ static void qmp_input_type_any(Visitor *v, QObject **obj, const char *name,
|
|||
*obj = qobj;
|
||||
}
|
||||
|
||||
static void qmp_input_optional(Visitor *v, bool *present, const char *name)
|
||||
static void qmp_input_optional(Visitor *v, const char *name, bool *present)
|
||||
{
|
||||
QmpInputVisitor *qiv = to_qiv(v);
|
||||
QObject *qobj = qmp_input_get_object(qiv, name, true);
|
||||
|
@ -337,12 +349,12 @@ QmpInputVisitor *qmp_input_visitor_new(QObject *obj)
|
|||
v->visitor.start_struct = qmp_input_start_struct;
|
||||
v->visitor.end_struct = qmp_input_end_struct;
|
||||
v->visitor.start_implicit_struct = qmp_input_start_implicit_struct;
|
||||
v->visitor.end_implicit_struct = qmp_input_end_implicit_struct;
|
||||
v->visitor.start_list = qmp_input_start_list;
|
||||
v->visitor.next_list = qmp_input_next_list;
|
||||
v->visitor.end_list = qmp_input_end_list;
|
||||
v->visitor.type_enum = input_type_enum;
|
||||
v->visitor.type_int = qmp_input_type_int;
|
||||
v->visitor.type_int64 = qmp_input_type_int64;
|
||||
v->visitor.type_uint64 = qmp_input_type_uint64;
|
||||
v->visitor.type_bool = qmp_input_type_bool;
|
||||
v->visitor.type_str = qmp_input_type_str;
|
||||
v->visitor.type_number = qmp_input_type_number;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
* Core Definitions for QAPI/QMP Command Registry
|
||||
*
|
||||
* Copyright (C) 2012-2016 Red Hat, Inc.
|
||||
* Copyright IBM, Corp. 2011
|
||||
*
|
||||
* Authors:
|
||||
|
@ -30,7 +31,8 @@ typedef QTAILQ_HEAD(QStack, QStackEntry) QStack;
|
|||
struct QmpOutputVisitor
|
||||
{
|
||||
Visitor visitor;
|
||||
QStack stack;
|
||||
QStack stack; /* Stack of containers that haven't yet been finished */
|
||||
QObject *root; /* Root of the output visit */
|
||||
};
|
||||
|
||||
#define qmp_output_add(qov, name, value) \
|
||||
|
@ -42,10 +44,13 @@ static QmpOutputVisitor *to_qov(Visitor *v)
|
|||
return container_of(v, QmpOutputVisitor, visitor);
|
||||
}
|
||||
|
||||
/* Push @value onto the stack of current QObjects being built */
|
||||
static void qmp_output_push_obj(QmpOutputVisitor *qov, QObject *value)
|
||||
{
|
||||
QStackEntry *e = g_malloc0(sizeof(*e));
|
||||
|
||||
assert(qov->root);
|
||||
assert(value);
|
||||
e->value = value;
|
||||
if (qobject_type(e->value) == QTYPE_QLIST) {
|
||||
e->is_list_head = true;
|
||||
|
@ -53,67 +58,51 @@ static void qmp_output_push_obj(QmpOutputVisitor *qov, QObject *value)
|
|||
QTAILQ_INSERT_HEAD(&qov->stack, e, node);
|
||||
}
|
||||
|
||||
/* Pop a value off the stack of QObjects being built, and return it. */
|
||||
static QObject *qmp_output_pop(QmpOutputVisitor *qov)
|
||||
{
|
||||
QStackEntry *e = QTAILQ_FIRST(&qov->stack);
|
||||
QObject *value;
|
||||
|
||||
assert(e);
|
||||
QTAILQ_REMOVE(&qov->stack, e, node);
|
||||
value = e->value;
|
||||
assert(value);
|
||||
g_free(e);
|
||||
return value;
|
||||
}
|
||||
|
||||
static QObject *qmp_output_first(QmpOutputVisitor *qov)
|
||||
{
|
||||
QStackEntry *e = QTAILQ_LAST(&qov->stack, QStack);
|
||||
|
||||
/*
|
||||
* FIXME Wrong, because qmp_output_get_qobject() will increment
|
||||
* the refcnt *again*. We need to think through how visitors
|
||||
* handle null.
|
||||
*/
|
||||
if (!e) {
|
||||
return qnull();
|
||||
}
|
||||
|
||||
return e->value;
|
||||
}
|
||||
|
||||
static QObject *qmp_output_last(QmpOutputVisitor *qov)
|
||||
{
|
||||
QStackEntry *e = QTAILQ_FIRST(&qov->stack);
|
||||
return e->value;
|
||||
}
|
||||
|
||||
/* Add @value to the current QObject being built.
|
||||
* If the stack is visiting a dictionary or list, @value is now owned
|
||||
* by that container. Otherwise, @value is now the root. */
|
||||
static void qmp_output_add_obj(QmpOutputVisitor *qov, const char *name,
|
||||
QObject *value)
|
||||
{
|
||||
QObject *cur;
|
||||
QStackEntry *e = QTAILQ_FIRST(&qov->stack);
|
||||
QObject *cur = e ? e->value : NULL;
|
||||
|
||||
if (QTAILQ_EMPTY(&qov->stack)) {
|
||||
qmp_output_push_obj(qov, value);
|
||||
return;
|
||||
}
|
||||
|
||||
cur = qmp_output_last(qov);
|
||||
|
||||
switch (qobject_type(cur)) {
|
||||
case QTYPE_QDICT:
|
||||
qdict_put_obj(qobject_to_qdict(cur), name, value);
|
||||
break;
|
||||
case QTYPE_QLIST:
|
||||
qlist_append_obj(qobject_to_qlist(cur), value);
|
||||
break;
|
||||
default:
|
||||
qobject_decref(qmp_output_pop(qov));
|
||||
qmp_output_push_obj(qov, value);
|
||||
break;
|
||||
if (!cur) {
|
||||
/* FIXME we should require the user to reset the visitor, rather
|
||||
* than throwing away the previous root */
|
||||
qobject_decref(qov->root);
|
||||
qov->root = value;
|
||||
} else {
|
||||
switch (qobject_type(cur)) {
|
||||
case QTYPE_QDICT:
|
||||
assert(name);
|
||||
qdict_put_obj(qobject_to_qdict(cur), name, value);
|
||||
break;
|
||||
case QTYPE_QLIST:
|
||||
qlist_append_obj(qobject_to_qlist(cur), value);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void qmp_output_start_struct(Visitor *v, void **obj, const char *kind,
|
||||
const char *name, size_t unused,
|
||||
Error **errp)
|
||||
static void qmp_output_start_struct(Visitor *v, const char *name, void **obj,
|
||||
size_t unused, Error **errp)
|
||||
{
|
||||
QmpOutputVisitor *qov = to_qov(v);
|
||||
QDict *dict = qdict_new();
|
||||
|
@ -137,8 +126,7 @@ static void qmp_output_start_list(Visitor *v, const char *name, Error **errp)
|
|||
qmp_output_push(qov, list);
|
||||
}
|
||||
|
||||
static GenericList *qmp_output_next_list(Visitor *v, GenericList **listp,
|
||||
Error **errp)
|
||||
static GenericList *qmp_output_next_list(Visitor *v, GenericList **listp)
|
||||
{
|
||||
GenericList *list = *listp;
|
||||
QmpOutputVisitor *qov = to_qov(v);
|
||||
|
@ -153,27 +141,35 @@ static GenericList *qmp_output_next_list(Visitor *v, GenericList **listp,
|
|||
return list ? list->next : NULL;
|
||||
}
|
||||
|
||||
static void qmp_output_end_list(Visitor *v, Error **errp)
|
||||
static void qmp_output_end_list(Visitor *v)
|
||||
{
|
||||
QmpOutputVisitor *qov = to_qov(v);
|
||||
qmp_output_pop(qov);
|
||||
}
|
||||
|
||||
static void qmp_output_type_int(Visitor *v, int64_t *obj, const char *name,
|
||||
Error **errp)
|
||||
static void qmp_output_type_int64(Visitor *v, const char *name, int64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
QmpOutputVisitor *qov = to_qov(v);
|
||||
qmp_output_add(qov, name, qint_from_int(*obj));
|
||||
}
|
||||
|
||||
static void qmp_output_type_bool(Visitor *v, bool *obj, const char *name,
|
||||
static void qmp_output_type_uint64(Visitor *v, const char *name, uint64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
/* FIXME: QMP outputs values larger than INT64_MAX as negative */
|
||||
QmpOutputVisitor *qov = to_qov(v);
|
||||
qmp_output_add(qov, name, qint_from_int(*obj));
|
||||
}
|
||||
|
||||
static void qmp_output_type_bool(Visitor *v, const char *name, bool *obj,
|
||||
Error **errp)
|
||||
{
|
||||
QmpOutputVisitor *qov = to_qov(v);
|
||||
qmp_output_add(qov, name, qbool_from_bool(*obj));
|
||||
}
|
||||
|
||||
static void qmp_output_type_str(Visitor *v, char **obj, const char *name,
|
||||
static void qmp_output_type_str(Visitor *v, const char *name, char **obj,
|
||||
Error **errp)
|
||||
{
|
||||
QmpOutputVisitor *qov = to_qov(v);
|
||||
|
@ -184,14 +180,14 @@ static void qmp_output_type_str(Visitor *v, char **obj, const char *name,
|
|||
}
|
||||
}
|
||||
|
||||
static void qmp_output_type_number(Visitor *v, double *obj, const char *name,
|
||||
static void qmp_output_type_number(Visitor *v, const char *name, double *obj,
|
||||
Error **errp)
|
||||
{
|
||||
QmpOutputVisitor *qov = to_qov(v);
|
||||
qmp_output_add(qov, name, qfloat_from_double(*obj));
|
||||
}
|
||||
|
||||
static void qmp_output_type_any(Visitor *v, QObject **obj, const char *name,
|
||||
static void qmp_output_type_any(Visitor *v, const char *name, QObject **obj,
|
||||
Error **errp)
|
||||
{
|
||||
QmpOutputVisitor *qov = to_qov(v);
|
||||
|
@ -199,11 +195,16 @@ static void qmp_output_type_any(Visitor *v, QObject **obj, const char *name,
|
|||
qmp_output_add_obj(qov, name, *obj);
|
||||
}
|
||||
|
||||
/* Finish building, and return the root object. Will not be NULL. */
|
||||
QObject *qmp_output_get_qobject(QmpOutputVisitor *qov)
|
||||
{
|
||||
QObject *obj = qmp_output_first(qov);
|
||||
/* FIXME: we should require that a visit occurred, and that it is
|
||||
* complete (no starts without a matching end) */
|
||||
QObject *obj = qov->root;
|
||||
if (obj) {
|
||||
qobject_incref(obj);
|
||||
} else {
|
||||
obj = qnull();
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
@ -217,16 +218,12 @@ void qmp_output_visitor_cleanup(QmpOutputVisitor *v)
|
|||
{
|
||||
QStackEntry *e, *tmp;
|
||||
|
||||
/* The bottom QStackEntry, if any, owns the root QObject. See the
|
||||
* qmp_output_push_obj() invocations in qmp_output_add_obj(). */
|
||||
QObject *root = QTAILQ_EMPTY(&v->stack) ? NULL : qmp_output_first(v);
|
||||
|
||||
QTAILQ_FOREACH_SAFE(e, &v->stack, node, tmp) {
|
||||
QTAILQ_REMOVE(&v->stack, e, node);
|
||||
g_free(e);
|
||||
}
|
||||
|
||||
qobject_decref(root);
|
||||
qobject_decref(v->root);
|
||||
g_free(v);
|
||||
}
|
||||
|
||||
|
@ -242,7 +239,8 @@ QmpOutputVisitor *qmp_output_visitor_new(void)
|
|||
v->visitor.next_list = qmp_output_next_list;
|
||||
v->visitor.end_list = qmp_output_end_list;
|
||||
v->visitor.type_enum = output_type_enum;
|
||||
v->visitor.type_int = qmp_output_type_int;
|
||||
v->visitor.type_int64 = qmp_output_type_int64;
|
||||
v->visitor.type_uint64 = qmp_output_type_uint64;
|
||||
v->visitor.type_bool = qmp_output_type_bool;
|
||||
v->visitor.type_str = qmp_output_type_str;
|
||||
v->visitor.type_number = qmp_output_type_number;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* String parsing visitor
|
||||
*
|
||||
* Copyright Red Hat, Inc. 2012
|
||||
* Copyright Red Hat, Inc. 2012-2016
|
||||
*
|
||||
* Author: Paolo Bonzini <pbonzini@redhat.com>
|
||||
*
|
||||
|
@ -33,6 +33,11 @@ struct StringInputVisitor
|
|||
const char *string;
|
||||
};
|
||||
|
||||
static StringInputVisitor *to_siv(Visitor *v)
|
||||
{
|
||||
return container_of(v, StringInputVisitor, visitor);
|
||||
}
|
||||
|
||||
static void free_range(void *range, void *dummy)
|
||||
{
|
||||
g_free(range);
|
||||
|
@ -121,7 +126,7 @@ error:
|
|||
static void
|
||||
start_list(Visitor *v, const char *name, Error **errp)
|
||||
{
|
||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
||||
StringInputVisitor *siv = to_siv(v);
|
||||
|
||||
parse_str(siv, errp);
|
||||
|
||||
|
@ -134,10 +139,9 @@ start_list(Visitor *v, const char *name, Error **errp)
|
|||
}
|
||||
}
|
||||
|
||||
static GenericList *
|
||||
next_list(Visitor *v, GenericList **list, Error **errp)
|
||||
static GenericList *next_list(Visitor *v, GenericList **list)
|
||||
{
|
||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
||||
StringInputVisitor *siv = to_siv(v);
|
||||
GenericList **link;
|
||||
Range *r;
|
||||
|
||||
|
@ -173,17 +177,16 @@ next_list(Visitor *v, GenericList **list, Error **errp)
|
|||
return *link;
|
||||
}
|
||||
|
||||
static void
|
||||
end_list(Visitor *v, Error **errp)
|
||||
static void end_list(Visitor *v)
|
||||
{
|
||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
||||
StringInputVisitor *siv = to_siv(v);
|
||||
siv->head = true;
|
||||
}
|
||||
|
||||
static void parse_type_int(Visitor *v, int64_t *obj, const char *name,
|
||||
Error **errp)
|
||||
static void parse_type_int64(Visitor *v, const char *name, int64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
||||
StringInputVisitor *siv = to_siv(v);
|
||||
|
||||
if (!siv->string) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null",
|
||||
|
@ -222,10 +225,24 @@ error:
|
|||
"an int64 value or range");
|
||||
}
|
||||
|
||||
static void parse_type_size(Visitor *v, uint64_t *obj, const char *name,
|
||||
static void parse_type_uint64(Visitor *v, const char *name, uint64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
/* FIXME: parse_type_int64 mishandles values over INT64_MAX */
|
||||
int64_t i;
|
||||
Error *err = NULL;
|
||||
parse_type_int64(v, name, &i, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
} else {
|
||||
*obj = i;
|
||||
}
|
||||
}
|
||||
|
||||
static void parse_type_size(Visitor *v, const char *name, uint64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
||||
StringInputVisitor *siv = to_siv(v);
|
||||
Error *err = NULL;
|
||||
uint64_t val;
|
||||
|
||||
|
@ -244,10 +261,10 @@ static void parse_type_size(Visitor *v, uint64_t *obj, const char *name,
|
|||
*obj = val;
|
||||
}
|
||||
|
||||
static void parse_type_bool(Visitor *v, bool *obj, const char *name,
|
||||
static void parse_type_bool(Visitor *v, const char *name, bool *obj,
|
||||
Error **errp)
|
||||
{
|
||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
||||
StringInputVisitor *siv = to_siv(v);
|
||||
|
||||
if (siv->string) {
|
||||
if (!strcasecmp(siv->string, "on") ||
|
||||
|
@ -268,10 +285,10 @@ static void parse_type_bool(Visitor *v, bool *obj, const char *name,
|
|||
"boolean");
|
||||
}
|
||||
|
||||
static void parse_type_str(Visitor *v, char **obj, const char *name,
|
||||
static void parse_type_str(Visitor *v, const char *name, char **obj,
|
||||
Error **errp)
|
||||
{
|
||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
||||
StringInputVisitor *siv = to_siv(v);
|
||||
if (siv->string) {
|
||||
*obj = g_strdup(siv->string);
|
||||
} else {
|
||||
|
@ -280,10 +297,10 @@ static void parse_type_str(Visitor *v, char **obj, const char *name,
|
|||
}
|
||||
}
|
||||
|
||||
static void parse_type_number(Visitor *v, double *obj, const char *name,
|
||||
static void parse_type_number(Visitor *v, const char *name, double *obj,
|
||||
Error **errp)
|
||||
{
|
||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
||||
StringInputVisitor *siv = to_siv(v);
|
||||
char *endp = (char *) siv->string;
|
||||
double val;
|
||||
|
||||
|
@ -300,9 +317,9 @@ static void parse_type_number(Visitor *v, double *obj, const char *name,
|
|||
*obj = val;
|
||||
}
|
||||
|
||||
static void parse_optional(Visitor *v, bool *present, const char *name)
|
||||
static void parse_optional(Visitor *v, const char *name, bool *present)
|
||||
{
|
||||
StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);
|
||||
StringInputVisitor *siv = to_siv(v);
|
||||
|
||||
if (!siv->string) {
|
||||
*present = false;
|
||||
|
@ -331,7 +348,8 @@ StringInputVisitor *string_input_visitor_new(const char *str)
|
|||
v = g_malloc0(sizeof(*v));
|
||||
|
||||
v->visitor.type_enum = input_type_enum;
|
||||
v->visitor.type_int = parse_type_int;
|
||||
v->visitor.type_int64 = parse_type_int64;
|
||||
v->visitor.type_uint64 = parse_type_uint64;
|
||||
v->visitor.type_size = parse_type_size;
|
||||
v->visitor.type_bool = parse_type_bool;
|
||||
v->visitor.type_str = parse_type_str;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* String printing Visitor
|
||||
*
|
||||
* Copyright Red Hat, Inc. 2012
|
||||
* Copyright Red Hat, Inc. 2012-2016
|
||||
*
|
||||
* Author: Paolo Bonzini <pbonzini@redhat.com>
|
||||
*
|
||||
|
@ -67,6 +67,11 @@ struct StringOutputVisitor
|
|||
GList *ranges;
|
||||
};
|
||||
|
||||
static StringOutputVisitor *to_sov(Visitor *v)
|
||||
{
|
||||
return container_of(v, StringOutputVisitor, visitor);
|
||||
}
|
||||
|
||||
static void string_output_set(StringOutputVisitor *sov, char *string)
|
||||
{
|
||||
if (sov->string) {
|
||||
|
@ -117,10 +122,10 @@ static void format_string(StringOutputVisitor *sov, Range *r, bool next,
|
|||
}
|
||||
}
|
||||
|
||||
static void print_type_int(Visitor *v, int64_t *obj, const char *name,
|
||||
Error **errp)
|
||||
static void print_type_int64(Visitor *v, const char *name, int64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
StringOutputVisitor *sov = DO_UPCAST(StringOutputVisitor, visitor, v);
|
||||
StringOutputVisitor *sov = to_sov(v);
|
||||
GList *l;
|
||||
|
||||
switch (sov->list_mode) {
|
||||
|
@ -193,10 +198,18 @@ static void print_type_int(Visitor *v, int64_t *obj, const char *name,
|
|||
}
|
||||
}
|
||||
|
||||
static void print_type_size(Visitor *v, uint64_t *obj, const char *name,
|
||||
Error **errp)
|
||||
static void print_type_uint64(Visitor *v, const char *name, uint64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
StringOutputVisitor *sov = DO_UPCAST(StringOutputVisitor, visitor, v);
|
||||
/* FIXME: print_type_int64 mishandles values over INT64_MAX */
|
||||
int64_t i = *obj;
|
||||
print_type_int64(v, name, &i, errp);
|
||||
}
|
||||
|
||||
static void print_type_size(Visitor *v, const char *name, uint64_t *obj,
|
||||
Error **errp)
|
||||
{
|
||||
StringOutputVisitor *sov = to_sov(v);
|
||||
static const char suffixes[] = { 'B', 'K', 'M', 'G', 'T', 'P', 'E' };
|
||||
uint64_t div, val;
|
||||
char *out;
|
||||
|
@ -224,17 +237,17 @@ static void print_type_size(Visitor *v, uint64_t *obj, const char *name,
|
|||
string_output_set(sov, out);
|
||||
}
|
||||
|
||||
static void print_type_bool(Visitor *v, bool *obj, const char *name,
|
||||
static void print_type_bool(Visitor *v, const char *name, bool *obj,
|
||||
Error **errp)
|
||||
{
|
||||
StringOutputVisitor *sov = DO_UPCAST(StringOutputVisitor, visitor, v);
|
||||
StringOutputVisitor *sov = to_sov(v);
|
||||
string_output_set(sov, g_strdup(*obj ? "true" : "false"));
|
||||
}
|
||||
|
||||
static void print_type_str(Visitor *v, char **obj, const char *name,
|
||||
static void print_type_str(Visitor *v, const char *name, char **obj,
|
||||
Error **errp)
|
||||
{
|
||||
StringOutputVisitor *sov = DO_UPCAST(StringOutputVisitor, visitor, v);
|
||||
StringOutputVisitor *sov = to_sov(v);
|
||||
char *out;
|
||||
|
||||
if (sov->human) {
|
||||
|
@ -245,17 +258,17 @@ static void print_type_str(Visitor *v, char **obj, const char *name,
|
|||
string_output_set(sov, out);
|
||||
}
|
||||
|
||||
static void print_type_number(Visitor *v, double *obj, const char *name,
|
||||
static void print_type_number(Visitor *v, const char *name, double *obj,
|
||||
Error **errp)
|
||||
{
|
||||
StringOutputVisitor *sov = DO_UPCAST(StringOutputVisitor, visitor, v);
|
||||
StringOutputVisitor *sov = to_sov(v);
|
||||
string_output_set(sov, g_strdup_printf("%f", *obj));
|
||||
}
|
||||
|
||||
static void
|
||||
start_list(Visitor *v, const char *name, Error **errp)
|
||||
{
|
||||
StringOutputVisitor *sov = DO_UPCAST(StringOutputVisitor, visitor, v);
|
||||
StringOutputVisitor *sov = to_sov(v);
|
||||
|
||||
/* we can't traverse a list in a list */
|
||||
assert(sov->list_mode == LM_NONE);
|
||||
|
@ -263,10 +276,9 @@ start_list(Visitor *v, const char *name, Error **errp)
|
|||
sov->head = true;
|
||||
}
|
||||
|
||||
static GenericList *
|
||||
next_list(Visitor *v, GenericList **list, Error **errp)
|
||||
static GenericList *next_list(Visitor *v, GenericList **list)
|
||||
{
|
||||
StringOutputVisitor *sov = DO_UPCAST(StringOutputVisitor, visitor, v);
|
||||
StringOutputVisitor *sov = to_sov(v);
|
||||
GenericList *ret = NULL;
|
||||
if (*list) {
|
||||
if (sov->head) {
|
||||
|
@ -290,10 +302,9 @@ next_list(Visitor *v, GenericList **list, Error **errp)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
end_list(Visitor *v, Error **errp)
|
||||
static void end_list(Visitor *v)
|
||||
{
|
||||
StringOutputVisitor *sov = DO_UPCAST(StringOutputVisitor, visitor, v);
|
||||
StringOutputVisitor *sov = to_sov(v);
|
||||
|
||||
assert(sov->list_mode == LM_STARTED ||
|
||||
sov->list_mode == LM_END ||
|
||||
|
@ -341,7 +352,8 @@ StringOutputVisitor *string_output_visitor_new(bool human)
|
|||
v->string = g_string_new(NULL);
|
||||
v->human = human;
|
||||
v->visitor.type_enum = output_type_enum;
|
||||
v->visitor.type_int = print_type_int;
|
||||
v->visitor.type_int64 = print_type_int64;
|
||||
v->visitor.type_uint64 = print_type_uint64;
|
||||
v->visitor.type_size = print_type_size;
|
||||
v->visitor.type_bool = print_type_bool;
|
||||
v->visitor.type_str = print_type_str;
|
||||
|
|
11
qemu-img.c
11
qemu-img.c
|
@ -376,8 +376,8 @@ static void dump_json_image_check(ImageCheck *check, bool quiet)
|
|||
QString *str;
|
||||
QmpOutputVisitor *ov = qmp_output_visitor_new();
|
||||
QObject *obj;
|
||||
visit_type_ImageCheck(qmp_output_get_visitor(ov),
|
||||
&check, NULL, &local_err);
|
||||
visit_type_ImageCheck(qmp_output_get_visitor(ov), NULL, &check,
|
||||
&local_err);
|
||||
obj = qmp_output_get_qobject(ov);
|
||||
str = qobject_to_json_pretty(obj);
|
||||
assert(str != NULL);
|
||||
|
@ -1942,8 +1942,8 @@ static void dump_json_image_info_list(ImageInfoList *list)
|
|||
QString *str;
|
||||
QmpOutputVisitor *ov = qmp_output_visitor_new();
|
||||
QObject *obj;
|
||||
visit_type_ImageInfoList(qmp_output_get_visitor(ov),
|
||||
&list, NULL, &local_err);
|
||||
visit_type_ImageInfoList(qmp_output_get_visitor(ov), NULL, &list,
|
||||
&local_err);
|
||||
obj = qmp_output_get_qobject(ov);
|
||||
str = qobject_to_json_pretty(obj);
|
||||
assert(str != NULL);
|
||||
|
@ -1959,8 +1959,7 @@ static void dump_json_image_info(ImageInfo *info)
|
|||
QString *str;
|
||||
QmpOutputVisitor *ov = qmp_output_visitor_new();
|
||||
QObject *obj;
|
||||
visit_type_ImageInfo(qmp_output_get_visitor(ov),
|
||||
&info, NULL, &local_err);
|
||||
visit_type_ImageInfo(qmp_output_get_visitor(ov), NULL, &info, &local_err);
|
||||
obj = qmp_output_get_qobject(ov);
|
||||
str = qobject_to_json_pretty(obj);
|
||||
assert(str != NULL);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* JSON Parser
|
||||
* JSON Parser
|
||||
*
|
||||
* Copyright IBM, Corp. 2009
|
||||
*
|
||||
|
@ -518,7 +518,9 @@ static QObject *parse_literal(JSONParserContext *ctxt)
|
|||
/* fall through to JSON_FLOAT */
|
||||
}
|
||||
case JSON_FLOAT:
|
||||
/* FIXME dependent on locale */
|
||||
/* FIXME dependent on locale; a pervasive issue in QEMU */
|
||||
/* FIXME our lexer matches RFC 7159 in forbidding Inf or NaN,
|
||||
* but those might be useful extensions beyond JSON */
|
||||
return QOBJECT(qfloat_from_double(strtod(token->str, NULL)));
|
||||
default:
|
||||
abort();
|
||||
|
|
|
@ -238,6 +238,15 @@ static void to_json(const QObject *obj, QString *str, int pretty, int indent)
|
|||
char buffer[1024];
|
||||
int len;
|
||||
|
||||
/* FIXME: snprintf() is locale dependent; but JSON requires
|
||||
* numbers to be formatted as if in the C locale. Dependence
|
||||
* on C locale is a pervasive issue in QEMU. */
|
||||
/* FIXME: This risks printing Inf or NaN, which are not valid
|
||||
* JSON values. */
|
||||
/* FIXME: the default precision of 6 for %f often causes
|
||||
* rounding errors; we should be using DBL_DECIMAL_DIG (17),
|
||||
* and only rounding to a shorter number if the result would
|
||||
* still produce the same floating point value. */
|
||||
len = snprintf(buffer, sizeof(buffer), "%f", qfloat_get_double(val));
|
||||
while (len > 0 && buffer[len - 1] == '0') {
|
||||
len--;
|
||||
|
@ -248,7 +257,7 @@ static void to_json(const QObject *obj, QString *str, int pretty, int indent)
|
|||
} else {
|
||||
buffer[len] = 0;
|
||||
}
|
||||
|
||||
|
||||
qstring_append(str, buffer);
|
||||
break;
|
||||
}
|
||||
|
|
124
qom/object.c
124
qom/object.c
|
@ -1062,7 +1062,7 @@ void object_property_get(Object *obj, Visitor *v, const char *name,
|
|||
if (!prop->get) {
|
||||
error_setg(errp, QERR_PERMISSION_DENIED);
|
||||
} else {
|
||||
prop->get(obj, v, prop->opaque, name, errp);
|
||||
prop->get(obj, v, name, prop->opaque, errp);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1077,7 +1077,7 @@ void object_property_set(Object *obj, Visitor *v, const char *name,
|
|||
if (!prop->set) {
|
||||
error_setg(errp, QERR_PERMISSION_DENIED);
|
||||
} else {
|
||||
prop->set(obj, v, prop->opaque, name, errp);
|
||||
prop->set(obj, v, name, prop->opaque, errp);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1244,8 +1244,8 @@ int object_property_get_enum(Object *obj, const char *name,
|
|||
str = string_output_get_string(sov);
|
||||
siv = string_input_visitor_new(str);
|
||||
string_output_visitor_cleanup(sov);
|
||||
visit_type_enum(string_input_get_visitor(siv),
|
||||
&ret, enumprop->strings, NULL, name, errp);
|
||||
visit_type_enum(string_input_get_visitor(siv), name, &ret,
|
||||
enumprop->strings, errp);
|
||||
|
||||
g_free(str);
|
||||
string_input_visitor_cleanup(siv);
|
||||
|
@ -1270,8 +1270,7 @@ void object_property_get_uint16List(Object *obj, const char *name,
|
|||
}
|
||||
str = string_output_get_string(ov);
|
||||
iv = string_input_visitor_new(str);
|
||||
visit_type_uint16List(string_input_get_visitor(iv),
|
||||
list, NULL, errp);
|
||||
visit_type_uint16List(string_input_get_visitor(iv), NULL, list, errp);
|
||||
|
||||
g_free(str);
|
||||
string_input_visitor_cleanup(iv);
|
||||
|
@ -1336,14 +1335,15 @@ Object *object_get_objects_root(void)
|
|||
return container_get(object_get_root(), "/objects");
|
||||
}
|
||||
|
||||
static void object_get_child_property(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void object_get_child_property(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
Object *child = opaque;
|
||||
gchar *path;
|
||||
|
||||
path = object_get_canonical_path(child);
|
||||
visit_type_str(v, &path, name, errp);
|
||||
visit_type_str(v, name, &path, errp);
|
||||
g_free(path);
|
||||
}
|
||||
|
||||
|
@ -1405,8 +1405,9 @@ typedef struct {
|
|||
ObjectPropertyLinkFlags flags;
|
||||
} LinkProperty;
|
||||
|
||||
static void object_get_link_property(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void object_get_link_property(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
LinkProperty *lprop = opaque;
|
||||
Object **child = lprop->child;
|
||||
|
@ -1414,11 +1415,11 @@ static void object_get_link_property(Object *obj, Visitor *v, void *opaque,
|
|||
|
||||
if (*child) {
|
||||
path = object_get_canonical_path(*child);
|
||||
visit_type_str(v, &path, name, errp);
|
||||
visit_type_str(v, name, &path, errp);
|
||||
g_free(path);
|
||||
} else {
|
||||
path = (gchar *)"";
|
||||
visit_type_str(v, &path, name, errp);
|
||||
visit_type_str(v, name, &path, errp);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1462,8 +1463,9 @@ static Object *object_resolve_link(Object *obj, const char *name,
|
|||
return target;
|
||||
}
|
||||
|
||||
static void object_set_link_property(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void object_set_link_property(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
LinkProperty *prop = opaque;
|
||||
|
@ -1472,7 +1474,7 @@ static void object_set_link_property(Object *obj, Visitor *v, void *opaque,
|
|||
Object *new_target = NULL;
|
||||
char *path = NULL;
|
||||
|
||||
visit_type_str(v, &path, name, &local_err);
|
||||
visit_type_str(v, name, &path, &local_err);
|
||||
|
||||
if (!local_err && strcmp(path, "") != 0) {
|
||||
new_target = object_resolve_link(obj, name, path, &local_err);
|
||||
|
@ -1726,8 +1728,8 @@ typedef struct StringProperty
|
|||
void (*set)(Object *, const char *, Error **);
|
||||
} StringProperty;
|
||||
|
||||
static void property_get_str(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void property_get_str(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
StringProperty *prop = opaque;
|
||||
char *value;
|
||||
|
@ -1739,18 +1741,18 @@ static void property_get_str(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_str(v, &value, name, errp);
|
||||
visit_type_str(v, name, &value, errp);
|
||||
g_free(value);
|
||||
}
|
||||
|
||||
static void property_set_str(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void property_set_str(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
StringProperty *prop = opaque;
|
||||
char *value;
|
||||
Error *local_err = NULL;
|
||||
|
||||
visit_type_str(v, &value, name, &local_err);
|
||||
visit_type_str(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -1818,8 +1820,8 @@ typedef struct BoolProperty
|
|||
void (*set)(Object *, bool, Error **);
|
||||
} BoolProperty;
|
||||
|
||||
static void property_get_bool(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void property_get_bool(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
BoolProperty *prop = opaque;
|
||||
bool value;
|
||||
|
@ -1831,17 +1833,17 @@ static void property_get_bool(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_bool(v, &value, name, errp);
|
||||
visit_type_bool(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void property_set_bool(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void property_set_bool(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
BoolProperty *prop = opaque;
|
||||
bool value;
|
||||
Error *local_err = NULL;
|
||||
|
||||
visit_type_bool(v, &value, name, &local_err);
|
||||
visit_type_bool(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -1901,8 +1903,8 @@ void object_class_property_add_bool(ObjectClass *klass, const char *name,
|
|||
}
|
||||
}
|
||||
|
||||
static void property_get_enum(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void property_get_enum(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
EnumProperty *prop = opaque;
|
||||
int value;
|
||||
|
@ -1914,17 +1916,17 @@ static void property_get_enum(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_enum(v, &value, prop->strings, NULL, name, errp);
|
||||
visit_type_enum(v, name, &value, prop->strings, errp);
|
||||
}
|
||||
|
||||
static void property_set_enum(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void property_set_enum(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
EnumProperty *prop = opaque;
|
||||
int value;
|
||||
Error *err = NULL;
|
||||
|
||||
visit_type_enum(v, &value, prop->strings, NULL, name, &err);
|
||||
visit_type_enum(v, name, &value, prop->strings, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
|
@ -1993,8 +1995,8 @@ typedef struct TMProperty {
|
|||
void (*get)(Object *, struct tm *, Error **);
|
||||
} TMProperty;
|
||||
|
||||
static void property_get_tm(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void property_get_tm(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
TMProperty *prop = opaque;
|
||||
Error *err = NULL;
|
||||
|
@ -2005,31 +2007,31 @@ static void property_get_tm(Object *obj, Visitor *v, void *opaque,
|
|||
goto out;
|
||||
}
|
||||
|
||||
visit_start_struct(v, NULL, "struct tm", name, 0, &err);
|
||||
visit_start_struct(v, name, NULL, 0, &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
visit_type_int32(v, &value.tm_year, "tm_year", &err);
|
||||
visit_type_int32(v, "tm_year", &value.tm_year, &err);
|
||||
if (err) {
|
||||
goto out_end;
|
||||
}
|
||||
visit_type_int32(v, &value.tm_mon, "tm_mon", &err);
|
||||
visit_type_int32(v, "tm_mon", &value.tm_mon, &err);
|
||||
if (err) {
|
||||
goto out_end;
|
||||
}
|
||||
visit_type_int32(v, &value.tm_mday, "tm_mday", &err);
|
||||
visit_type_int32(v, "tm_mday", &value.tm_mday, &err);
|
||||
if (err) {
|
||||
goto out_end;
|
||||
}
|
||||
visit_type_int32(v, &value.tm_hour, "tm_hour", &err);
|
||||
visit_type_int32(v, "tm_hour", &value.tm_hour, &err);
|
||||
if (err) {
|
||||
goto out_end;
|
||||
}
|
||||
visit_type_int32(v, &value.tm_min, "tm_min", &err);
|
||||
visit_type_int32(v, "tm_min", &value.tm_min, &err);
|
||||
if (err) {
|
||||
goto out_end;
|
||||
}
|
||||
visit_type_int32(v, &value.tm_sec, "tm_sec", &err);
|
||||
visit_type_int32(v, "tm_sec", &value.tm_sec, &err);
|
||||
if (err) {
|
||||
goto out_end;
|
||||
}
|
||||
|
@ -2092,36 +2094,32 @@ static char *qdev_get_type(Object *obj, Error **errp)
|
|||
return g_strdup(object_get_typename(obj));
|
||||
}
|
||||
|
||||
static void property_get_uint8_ptr(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void property_get_uint8_ptr(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
uint8_t value = *(uint8_t *)opaque;
|
||||
visit_type_uint8(v, &value, name, errp);
|
||||
visit_type_uint8(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void property_get_uint16_ptr(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void property_get_uint16_ptr(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
uint16_t value = *(uint16_t *)opaque;
|
||||
visit_type_uint16(v, &value, name, errp);
|
||||
visit_type_uint16(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void property_get_uint32_ptr(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void property_get_uint32_ptr(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
uint32_t value = *(uint32_t *)opaque;
|
||||
visit_type_uint32(v, &value, name, errp);
|
||||
visit_type_uint32(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void property_get_uint64_ptr(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
Error **errp)
|
||||
static void property_get_uint64_ptr(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
uint64_t value = *(uint64_t *)opaque;
|
||||
visit_type_uint64(v, &value, name, errp);
|
||||
visit_type_uint64(v, name, &value, errp);
|
||||
}
|
||||
|
||||
void object_property_add_uint8_ptr(Object *obj, const char *name,
|
||||
|
@ -2185,16 +2183,16 @@ typedef struct {
|
|||
char *target_name;
|
||||
} AliasProperty;
|
||||
|
||||
static void property_get_alias(Object *obj, struct Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void property_get_alias(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
AliasProperty *prop = opaque;
|
||||
|
||||
object_property_get(prop->target_obj, v, prop->target_name, errp);
|
||||
}
|
||||
|
||||
static void property_set_alias(Object *obj, struct Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void property_set_alias(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
AliasProperty *prop = opaque;
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ static InputEvent *qapi_clone_InputEvent(InputEvent *src)
|
|||
|
||||
qov = qmp_output_visitor_new();
|
||||
ov = qmp_output_get_visitor(qov);
|
||||
visit_type_InputEvent(ov, &src, NULL, &error_abort);
|
||||
visit_type_InputEvent(ov, NULL, &src, &error_abort);
|
||||
obj = qmp_output_get_qobject(qov);
|
||||
qmp_output_visitor_cleanup(qov);
|
||||
if (!obj) {
|
||||
|
@ -38,7 +38,7 @@ static InputEvent *qapi_clone_InputEvent(InputEvent *src)
|
|||
|
||||
qiv = qmp_input_visitor_new(obj);
|
||||
iv = qmp_input_get_visitor(qiv);
|
||||
visit_type_InputEvent(iv, &dst, NULL, &error_abort);
|
||||
visit_type_InputEvent(iv, NULL, &dst, &error_abort);
|
||||
qmp_input_visitor_cleanup(qiv);
|
||||
qobject_decref(obj);
|
||||
|
||||
|
|
|
@ -131,7 +131,7 @@ def gen_marshal_output(ret_type):
|
|||
Visitor *v;
|
||||
|
||||
v = qmp_output_get_visitor(qov);
|
||||
visit_type_%(c_name)s(v, &ret_in, "unused", &err);
|
||||
visit_type_%(c_name)s(v, "unused", &ret_in, &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
|
@ -142,7 +142,7 @@ def gen_marshal_output(ret_type):
|
|||
qmp_output_visitor_cleanup(qov);
|
||||
qdv = qapi_dealloc_visitor_new();
|
||||
v = qapi_dealloc_get_visitor(qdv);
|
||||
visit_type_%(c_name)s(v, &ret_in, "unused", NULL);
|
||||
visit_type_%(c_name)s(v, "unused", &ret_in, NULL);
|
||||
qapi_dealloc_visitor_cleanup(qdv);
|
||||
}
|
||||
''',
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# QAPI event generator
|
||||
#
|
||||
# Copyright (c) 2014 Wenchao Xia
|
||||
# Copyright (c) 2015 Red Hat Inc.
|
||||
# Copyright (c) 2015-2016 Red Hat Inc.
|
||||
#
|
||||
# Authors:
|
||||
# Wenchao Xia <wenchaoqemu@gmail.com>
|
||||
|
@ -61,25 +61,23 @@ def gen_event_send(name, arg_type):
|
|||
if arg_type and arg_type.members:
|
||||
ret += mcgen('''
|
||||
qov = qmp_output_visitor_new();
|
||||
g_assert(qov);
|
||||
|
||||
v = qmp_output_get_visitor(qov);
|
||||
g_assert(v);
|
||||
|
||||
/* Fake visit, as if all members are under a structure */
|
||||
visit_start_struct(v, NULL, "", "%(name)s", 0, &err);
|
||||
visit_start_struct(v, "%(name)s", NULL, 0, &err);
|
||||
''',
|
||||
name=name)
|
||||
ret += gen_err_check()
|
||||
ret += gen_visit_fields(arg_type.members, need_cast=True)
|
||||
ret += gen_visit_fields(arg_type.members, need_cast=True,
|
||||
label='out_obj')
|
||||
ret += mcgen('''
|
||||
visit_end_struct(v, &err);
|
||||
out_obj:
|
||||
visit_end_struct(v, err ? NULL : &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
obj = qmp_output_get_qobject(qov);
|
||||
g_assert(obj != NULL);
|
||||
g_assert(obj);
|
||||
|
||||
qdict_put_obj(qmp, "data", obj);
|
||||
''')
|
||||
|
|
|
@ -155,7 +155,7 @@ def gen_type_cleanup(name):
|
|||
|
||||
qdv = qapi_dealloc_visitor_new();
|
||||
v = qapi_dealloc_get_visitor(qdv);
|
||||
visit_type_%(c_name)s(v, &obj, NULL, NULL);
|
||||
visit_type_%(c_name)s(v, NULL, &obj, NULL);
|
||||
qapi_dealloc_visitor_cleanup(qdv);
|
||||
}
|
||||
''',
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# QAPI visitor generator
|
||||
#
|
||||
# Copyright IBM, Corp. 2011
|
||||
# Copyright (C) 2014-2015 Red Hat, Inc.
|
||||
# Copyright (C) 2014-2016 Red Hat, Inc.
|
||||
#
|
||||
# Authors:
|
||||
# Anthony Liguori <aliguori@us.ibm.com>
|
||||
|
@ -29,7 +29,7 @@ def gen_visit_decl(name, scalar=False):
|
|||
if not scalar:
|
||||
c_type += '*'
|
||||
return mcgen('''
|
||||
void visit_type_%(c_name)s(Visitor *v, %(c_type)sobj, const char *name, Error **errp);
|
||||
void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_type)sobj, Error **errp);
|
||||
''',
|
||||
c_name=c_name(name), c_type=c_type)
|
||||
|
||||
|
@ -62,7 +62,7 @@ def gen_visit_implicit_struct(typ):
|
|||
visit_start_implicit_struct(v, (void **)obj, sizeof(%(c_type)s), &err);
|
||||
if (!err) {
|
||||
visit_type_%(c_type)s_fields(v, obj, errp);
|
||||
visit_end_implicit_struct(v, &err);
|
||||
visit_end_implicit_struct(v);
|
||||
}
|
||||
error_propagate(errp, err);
|
||||
}
|
||||
|
@ -118,21 +118,27 @@ def gen_visit_struct(name, base, members):
|
|||
# call qapi_free_FOO() to avoid a memory leak of the partial FOO.
|
||||
ret += mcgen('''
|
||||
|
||||
void visit_type_%(c_name)s(Visitor *v, %(c_name)s **obj, const char *name, Error **errp)
|
||||
void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj, Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
|
||||
visit_start_struct(v, (void **)obj, "%(name)s", name, sizeof(%(c_name)s), &err);
|
||||
if (!err) {
|
||||
if (*obj) {
|
||||
visit_type_%(c_name)s_fields(v, obj, errp);
|
||||
}
|
||||
visit_end_struct(v, &err);
|
||||
visit_start_struct(v, name, (void **)obj, sizeof(%(c_name)s), &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
if (!*obj) {
|
||||
goto out_obj;
|
||||
}
|
||||
visit_type_%(c_name)s_fields(v, obj, &err);
|
||||
error_propagate(errp, err);
|
||||
err = NULL;
|
||||
out_obj:
|
||||
visit_end_struct(v, &err);
|
||||
out:
|
||||
error_propagate(errp, err);
|
||||
}
|
||||
''',
|
||||
name=name, c_name=c_name(name))
|
||||
c_name=c_name(name))
|
||||
|
||||
return ret
|
||||
|
||||
|
@ -144,7 +150,7 @@ def gen_visit_list(name, element_type):
|
|||
# call qapi_free_FOOList() to avoid a memory leak of the partial FOOList.
|
||||
return mcgen('''
|
||||
|
||||
void visit_type_%(c_name)s(Visitor *v, %(c_name)s **obj, const char *name, Error **errp)
|
||||
void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj, Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
GenericList *i, **prev;
|
||||
|
@ -155,15 +161,13 @@ def gen_visit_list(name, element_type):
|
|||
}
|
||||
|
||||
for (prev = (GenericList **)obj;
|
||||
!err && (i = visit_next_list(v, prev, &err)) != NULL;
|
||||
!err && (i = visit_next_list(v, prev)) != NULL;
|
||||
prev = &i) {
|
||||
%(c_name)s *native_i = (%(c_name)s *)i;
|
||||
visit_type_%(c_elt_type)s(v, &native_i->value, NULL, &err);
|
||||
visit_type_%(c_elt_type)s(v, NULL, &native_i->value, &err);
|
||||
}
|
||||
|
||||
error_propagate(errp, err);
|
||||
err = NULL;
|
||||
visit_end_list(v, &err);
|
||||
visit_end_list(v);
|
||||
out:
|
||||
error_propagate(errp, err);
|
||||
}
|
||||
|
@ -172,15 +176,16 @@ def gen_visit_list(name, element_type):
|
|||
|
||||
|
||||
def gen_visit_enum(name):
|
||||
# FIXME cast from enum *obj to int * invalidly assumes enum is int
|
||||
return mcgen('''
|
||||
|
||||
void visit_type_%(c_name)s(Visitor *v, %(c_name)s *obj, const char *name, Error **errp)
|
||||
void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s *obj, Error **errp)
|
||||
{
|
||||
visit_type_enum(v, (int *)obj, %(c_name)s_lookup, "%(name)s", name, errp);
|
||||
int value = *obj;
|
||||
visit_type_enum(v, name, &value, %(c_name)s_lookup, errp);
|
||||
*obj = value;
|
||||
}
|
||||
''',
|
||||
c_name=c_name(name), name=name)
|
||||
c_name=c_name(name))
|
||||
|
||||
|
||||
def gen_visit_alternate(name, variants):
|
||||
|
@ -191,7 +196,7 @@ def gen_visit_alternate(name, variants):
|
|||
|
||||
ret = mcgen('''
|
||||
|
||||
void visit_type_%(c_name)s(Visitor *v, %(c_name)s **obj, const char *name, Error **errp)
|
||||
void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj, Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
|
||||
|
@ -199,7 +204,7 @@ def gen_visit_alternate(name, variants):
|
|||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
visit_get_next_type(v, &(*obj)->type, %(promote_int)s, name, &err);
|
||||
visit_get_next_type(v, name, &(*obj)->type, %(promote_int)s, &err);
|
||||
if (err) {
|
||||
goto out_obj;
|
||||
}
|
||||
|
@ -210,7 +215,7 @@ def gen_visit_alternate(name, variants):
|
|||
for var in variants.variants:
|
||||
ret += mcgen('''
|
||||
case %(case)s:
|
||||
visit_type_%(c_type)s(v, &(*obj)->u.%(c_name)s, name, &err);
|
||||
visit_type_%(c_type)s(v, name, &(*obj)->u.%(c_name)s, &err);
|
||||
break;
|
||||
''',
|
||||
case=var.type.alternate_qtype(),
|
||||
|
@ -223,9 +228,7 @@ def gen_visit_alternate(name, variants):
|
|||
"%(name)s");
|
||||
}
|
||||
out_obj:
|
||||
error_propagate(errp, err);
|
||||
err = NULL;
|
||||
visit_end_implicit_struct(v, &err);
|
||||
visit_end_implicit_struct(v);
|
||||
out:
|
||||
error_propagate(errp, err);
|
||||
}
|
||||
|
@ -248,11 +251,11 @@ def gen_visit_union(name, base, variants):
|
|||
|
||||
ret += mcgen('''
|
||||
|
||||
void visit_type_%(c_name)s(Visitor *v, %(c_name)s **obj, const char *name, Error **errp)
|
||||
void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj, Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
|
||||
visit_start_struct(v, (void **)obj, "%(name)s", name, sizeof(%(c_name)s), &err);
|
||||
visit_start_struct(v, name, (void **)obj, sizeof(%(c_name)s), &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
|
@ -260,7 +263,7 @@ def gen_visit_union(name, base, variants):
|
|||
goto out_obj;
|
||||
}
|
||||
''',
|
||||
c_name=c_name(name), name=name)
|
||||
c_name=c_name(name))
|
||||
|
||||
if base:
|
||||
ret += mcgen('''
|
||||
|
@ -269,7 +272,7 @@ def gen_visit_union(name, base, variants):
|
|||
c_name=base.c_name())
|
||||
else:
|
||||
ret += mcgen('''
|
||||
visit_type_%(c_type)s(v, &(*obj)->%(c_name)s, "%(name)s", &err);
|
||||
visit_type_%(c_type)s(v, "%(name)s", &(*obj)->%(c_name)s, &err);
|
||||
''',
|
||||
c_type=variants.tag_member.type.c_name(),
|
||||
c_name=c_name(variants.tag_member.name),
|
||||
|
@ -293,7 +296,7 @@ def gen_visit_union(name, base, variants):
|
|||
var.name))
|
||||
if simple_union_type:
|
||||
ret += mcgen('''
|
||||
visit_type_%(c_type)s(v, &(*obj)->u.%(c_name)s, "data", &err);
|
||||
visit_type_%(c_type)s(v, "data", &(*obj)->u.%(c_name)s, &err);
|
||||
''',
|
||||
c_type=simple_union_type.c_name(),
|
||||
c_name=c_name(var.name))
|
||||
|
@ -312,11 +315,6 @@ def gen_visit_union(name, base, variants):
|
|||
abort();
|
||||
}
|
||||
out_obj:
|
||||
error_propagate(errp, err);
|
||||
err = NULL;
|
||||
if (*obj) {
|
||||
visit_end_union(v, !!(*obj)->u.data, &err);
|
||||
}
|
||||
error_propagate(errp, err);
|
||||
err = NULL;
|
||||
visit_end_struct(v, &err);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# QAPI helper library
|
||||
#
|
||||
# Copyright IBM, Corp. 2011
|
||||
# Copyright (c) 2013-2015 Red Hat Inc.
|
||||
# Copyright (c) 2013-2016 Red Hat Inc.
|
||||
#
|
||||
# Authors:
|
||||
# Anthony Liguori <aliguori@us.ibm.com>
|
||||
|
@ -167,7 +167,7 @@ def __init__(self, fp, previously_included=[], incl_info=None):
|
|||
continue
|
||||
try:
|
||||
fobj = open(incl_abs_fname, 'r')
|
||||
except IOError, e:
|
||||
except IOError as e:
|
||||
raise QAPIExprError(expr_info,
|
||||
'%s: %s' % (e.strerror, include))
|
||||
exprs_include = QAPISchemaParser(fobj, previously_included,
|
||||
|
@ -1189,7 +1189,7 @@ def __init__(self, fname):
|
|||
self._predefining = False
|
||||
self._def_exprs()
|
||||
self.check()
|
||||
except (QAPISchemaError, QAPIExprError), err:
|
||||
except (QAPISchemaError, QAPIExprError) as err:
|
||||
print >>sys.stderr, err
|
||||
exit(1)
|
||||
|
||||
|
@ -1482,7 +1482,7 @@ def c_name(name, protect=True):
|
|||
'and', 'and_eq', 'bitand', 'bitor', 'compl', 'not',
|
||||
'not_eq', 'or', 'or_eq', 'xor', 'xor_eq'])
|
||||
# namespace pollution:
|
||||
polluted_words = set(['unix', 'errno'])
|
||||
polluted_words = set(['unix', 'errno', 'mips', 'sparc'])
|
||||
name = name.translate(c_name_trans)
|
||||
if protect and (name in c89_words | c99_words | c11_words | gcc_words
|
||||
| cpp_words | polluted_words):
|
||||
|
@ -1636,7 +1636,8 @@ def gen_err_check(label='out', skiperr=False):
|
|||
label=label)
|
||||
|
||||
|
||||
def gen_visit_fields(members, prefix='', need_cast=False, skiperr=False):
|
||||
def gen_visit_fields(members, prefix='', need_cast=False, skiperr=False,
|
||||
label='out'):
|
||||
ret = ''
|
||||
if skiperr:
|
||||
errparg = 'NULL'
|
||||
|
@ -1646,10 +1647,10 @@ def gen_visit_fields(members, prefix='', need_cast=False, skiperr=False):
|
|||
for memb in members:
|
||||
if memb.optional:
|
||||
ret += mcgen('''
|
||||
if (visit_optional(v, &%(prefix)shas_%(c_name)s, "%(name)s")) {
|
||||
if (visit_optional(v, "%(name)s", &%(prefix)shas_%(c_name)s)) {
|
||||
''',
|
||||
prefix=prefix, c_name=c_name(memb.name),
|
||||
name=memb.name, errp=errparg)
|
||||
name=memb.name)
|
||||
push_indent()
|
||||
|
||||
# Ugly: sometimes we need to cast away const
|
||||
|
@ -1659,12 +1660,12 @@ def gen_visit_fields(members, prefix='', need_cast=False, skiperr=False):
|
|||
cast = ''
|
||||
|
||||
ret += mcgen('''
|
||||
visit_type_%(c_type)s(v, %(cast)s&%(prefix)s%(c_name)s, "%(name)s", %(errp)s);
|
||||
visit_type_%(c_type)s(v, "%(name)s", %(cast)s&%(prefix)s%(c_name)s, %(errp)s);
|
||||
''',
|
||||
c_type=memb.type.c_name(), prefix=prefix, cast=cast,
|
||||
c_name=c_name(memb.name), name=memb.name,
|
||||
errp=errparg)
|
||||
ret += gen_err_check(skiperr=skiperr)
|
||||
ret += gen_err_check(skiperr=skiperr, label=label)
|
||||
|
||||
if memb.optional:
|
||||
pop_indent()
|
||||
|
@ -1686,7 +1687,7 @@ def parse_command_line(extra_options="", extra_long_options=[]):
|
|||
"chp:o:" + extra_options,
|
||||
["source", "header", "prefix=",
|
||||
"output-dir="] + extra_long_options)
|
||||
except getopt.GetoptError, err:
|
||||
except getopt.GetoptError as err:
|
||||
print >>sys.stderr, "%s: %s" % (sys.argv[0], str(err))
|
||||
sys.exit(1)
|
||||
|
||||
|
@ -1740,7 +1741,7 @@ def open_output(output_dir, do_c, do_h, prefix, c_file, h_file,
|
|||
if output_dir:
|
||||
try:
|
||||
os.makedirs(output_dir)
|
||||
except os.error, e:
|
||||
except os.error as e:
|
||||
if e.errno != errno.EEXIST:
|
||||
raise
|
||||
|
||||
|
|
|
@ -259,7 +259,7 @@ def main(address, cmd, args):
|
|||
|
||||
try:
|
||||
client = QemuGuestAgentClient(address)
|
||||
except QemuGuestAgent.error, e:
|
||||
except QemuGuestAgent.error as e:
|
||||
import errno
|
||||
|
||||
print(e)
|
||||
|
|
|
@ -91,8 +91,8 @@ def main(args):
|
|||
try:
|
||||
os.environ['QMP_PATH'] = path
|
||||
os.execvp(fullcmd, [fullcmd] + args)
|
||||
except OSError, (errno, msg):
|
||||
if errno == 2:
|
||||
except OSError as exc:
|
||||
if exc.errno == 2:
|
||||
print 'Command "%s" not found.' % (fullcmd)
|
||||
return 1
|
||||
raise
|
||||
|
|
|
@ -240,7 +240,7 @@ class QMPShell(qmp.QEMUMonitorProtocol):
|
|||
def _execute_cmd(self, cmdline):
|
||||
try:
|
||||
qmpcmd = self.__build_cmd(cmdline)
|
||||
except Exception, e:
|
||||
except Exception as e:
|
||||
print 'Error while parsing command line: %s' % e
|
||||
print 'command format: <command-name> ',
|
||||
print '[arg-name1=arg1] ... [arg-nameN=argN]'
|
||||
|
|
|
@ -92,7 +92,7 @@ def __get_events(self, wait=False):
|
|||
self.__sock.setblocking(0)
|
||||
try:
|
||||
self.__json_read()
|
||||
except socket.error, err:
|
||||
except socket.error as err:
|
||||
if err[0] == errno.EAGAIN:
|
||||
# No data available
|
||||
pass
|
||||
|
@ -150,7 +150,7 @@ def cmd_obj(self, qmp_cmd):
|
|||
"""
|
||||
try:
|
||||
self.__sock.sendall(json.dumps(qmp_cmd))
|
||||
except socket.error, err:
|
||||
except socket.error as err:
|
||||
if err[0] == errno.EPIPE:
|
||||
return
|
||||
raise socket.error(err)
|
||||
|
|
|
@ -71,7 +71,7 @@ def main(args):
|
|||
|
||||
try:
|
||||
opts, args = getopt.getopt(args[1:], "", long_opts)
|
||||
except getopt.GetoptError, err:
|
||||
except getopt.GetoptError as err:
|
||||
error_opt(str(err))
|
||||
|
||||
check_backends = False
|
||||
|
@ -132,7 +132,7 @@ def main(args):
|
|||
try:
|
||||
tracetool.generate(sys.stdin, arg_format, arg_backends,
|
||||
binary=binary, probe_prefix=probe_prefix)
|
||||
except tracetool.TracetoolError, e:
|
||||
except tracetool.TracetoolError as e:
|
||||
error_opt(str(e))
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -1530,8 +1530,9 @@ static void report_unavailable_features(FeatureWord w, uint32_t mask)
|
|||
}
|
||||
}
|
||||
|
||||
static void x86_cpuid_version_get_family(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void x86_cpuid_version_get_family(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
CPUX86State *env = &cpu->env;
|
||||
|
@ -1541,11 +1542,12 @@ static void x86_cpuid_version_get_family(Object *obj, Visitor *v, void *opaque,
|
|||
if (value == 0xf) {
|
||||
value += (env->cpuid_version >> 20) & 0xff;
|
||||
}
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void x86_cpuid_version_set_family(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void x86_cpuid_version_set_family(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
CPUX86State *env = &cpu->env;
|
||||
|
@ -1554,7 +1556,7 @@ static void x86_cpuid_version_set_family(Object *obj, Visitor *v, void *opaque,
|
|||
Error *local_err = NULL;
|
||||
int64_t value;
|
||||
|
||||
visit_type_int(v, &value, name, &local_err);
|
||||
visit_type_int(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -1573,8 +1575,9 @@ static void x86_cpuid_version_set_family(Object *obj, Visitor *v, void *opaque,
|
|||
}
|
||||
}
|
||||
|
||||
static void x86_cpuid_version_get_model(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void x86_cpuid_version_get_model(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
CPUX86State *env = &cpu->env;
|
||||
|
@ -1582,11 +1585,12 @@ static void x86_cpuid_version_get_model(Object *obj, Visitor *v, void *opaque,
|
|||
|
||||
value = (env->cpuid_version >> 4) & 0xf;
|
||||
value |= ((env->cpuid_version >> 16) & 0xf) << 4;
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void x86_cpuid_version_set_model(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void x86_cpuid_version_set_model(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
CPUX86State *env = &cpu->env;
|
||||
|
@ -1595,7 +1599,7 @@ static void x86_cpuid_version_set_model(Object *obj, Visitor *v, void *opaque,
|
|||
Error *local_err = NULL;
|
||||
int64_t value;
|
||||
|
||||
visit_type_int(v, &value, name, &local_err);
|
||||
visit_type_int(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -1611,7 +1615,7 @@ static void x86_cpuid_version_set_model(Object *obj, Visitor *v, void *opaque,
|
|||
}
|
||||
|
||||
static void x86_cpuid_version_get_stepping(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
|
@ -1619,11 +1623,11 @@ static void x86_cpuid_version_get_stepping(Object *obj, Visitor *v,
|
|||
int64_t value;
|
||||
|
||||
value = env->cpuid_version & 0xf;
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void x86_cpuid_version_set_stepping(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
|
@ -1633,7 +1637,7 @@ static void x86_cpuid_version_set_stepping(Object *obj, Visitor *v,
|
|||
Error *local_err = NULL;
|
||||
int64_t value;
|
||||
|
||||
visit_type_int(v, &value, name, &local_err);
|
||||
visit_type_int(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -1719,18 +1723,18 @@ static void x86_cpuid_set_model_id(Object *obj, const char *model_id,
|
|||
}
|
||||
}
|
||||
|
||||
static void x86_cpuid_get_tsc_freq(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void x86_cpuid_get_tsc_freq(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
int64_t value;
|
||||
|
||||
value = cpu->env.tsc_khz * 1000;
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void x86_cpuid_set_tsc_freq(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void x86_cpuid_set_tsc_freq(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
const int64_t min = 0;
|
||||
|
@ -1738,7 +1742,7 @@ static void x86_cpuid_set_tsc_freq(Object *obj, Visitor *v, void *opaque,
|
|||
Error *local_err = NULL;
|
||||
int64_t value;
|
||||
|
||||
visit_type_int(v, &value, name, &local_err);
|
||||
visit_type_int(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -1752,17 +1756,17 @@ static void x86_cpuid_set_tsc_freq(Object *obj, Visitor *v, void *opaque,
|
|||
cpu->env.tsc_khz = cpu->env.user_tsc_khz = value / 1000;
|
||||
}
|
||||
|
||||
static void x86_cpuid_get_apic_id(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void x86_cpuid_get_apic_id(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
int64_t value = cpu->apic_id;
|
||||
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void x86_cpuid_set_apic_id(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void x86_cpuid_set_apic_id(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
|
@ -1777,7 +1781,7 @@ static void x86_cpuid_set_apic_id(Object *obj, Visitor *v, void *opaque,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_int(v, &value, name, &error);
|
||||
visit_type_int(v, name, &value, &error);
|
||||
if (error) {
|
||||
error_propagate(errp, error);
|
||||
return;
|
||||
|
@ -1797,8 +1801,9 @@ static void x86_cpuid_set_apic_id(Object *obj, Visitor *v, void *opaque,
|
|||
}
|
||||
|
||||
/* Generic getter for "feature-words" and "filtered-features" properties */
|
||||
static void x86_cpu_get_feature_words(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void x86_cpu_get_feature_words(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
uint32_t *array = (uint32_t *)opaque;
|
||||
FeatureWord w;
|
||||
|
@ -1822,21 +1827,21 @@ static void x86_cpu_get_feature_words(Object *obj, Visitor *v, void *opaque,
|
|||
list = &list_entries[w];
|
||||
}
|
||||
|
||||
visit_type_X86CPUFeatureWordInfoList(v, &list, "feature-words", &err);
|
||||
visit_type_X86CPUFeatureWordInfoList(v, "feature-words", &list, &err);
|
||||
error_propagate(errp, err);
|
||||
}
|
||||
|
||||
static void x86_get_hv_spinlocks(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void x86_get_hv_spinlocks(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
int64_t value = cpu->hyperv_spinlock_attempts;
|
||||
|
||||
visit_type_int(v, &value, name, errp);
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void x86_set_hv_spinlocks(Object *obj, Visitor *v, void *opaque,
|
||||
const char *name, Error **errp)
|
||||
static void x86_set_hv_spinlocks(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
const int64_t min = 0xFFF;
|
||||
const int64_t max = UINT_MAX;
|
||||
|
@ -1844,7 +1849,7 @@ static void x86_set_hv_spinlocks(Object *obj, Visitor *v, void *opaque,
|
|||
Error *err = NULL;
|
||||
int64_t value;
|
||||
|
||||
visit_type_int(v, &value, name, &err);
|
||||
visit_type_int(v, name, &value, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
|
@ -2944,22 +2949,16 @@ typedef struct BitProperty {
|
|||
uint32_t mask;
|
||||
} BitProperty;
|
||||
|
||||
static void x86_cpu_get_bit_prop(Object *obj,
|
||||
struct Visitor *v,
|
||||
void *opaque,
|
||||
const char *name,
|
||||
Error **errp)
|
||||
static void x86_cpu_get_bit_prop(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
BitProperty *fp = opaque;
|
||||
bool value = (*fp->ptr & fp->mask) == fp->mask;
|
||||
visit_type_bool(v, &value, name, errp);
|
||||
visit_type_bool(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void x86_cpu_set_bit_prop(Object *obj,
|
||||
struct Visitor *v,
|
||||
void *opaque,
|
||||
const char *name,
|
||||
Error **errp)
|
||||
static void x86_cpu_set_bit_prop(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
BitProperty *fp = opaque;
|
||||
|
@ -2971,7 +2970,7 @@ static void x86_cpu_set_bit_prop(Object *obj,
|
|||
return;
|
||||
}
|
||||
|
||||
visit_type_bool(v, &value, name, &local_err);
|
||||
visit_type_bool(v, name, &value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
|
|
@ -8035,8 +8035,8 @@ POWERPC_FAMILY(POWER5P)(ObjectClass *oc, void *data)
|
|||
pcc->l1_icache_size = 0x10000;
|
||||
}
|
||||
|
||||
static void powerpc_get_compat(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name, Error **errp)
|
||||
static void powerpc_get_compat(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
char *value = (char *)"";
|
||||
Property *prop = opaque;
|
||||
|
@ -8060,18 +8060,18 @@ static void powerpc_get_compat(Object *obj, Visitor *v,
|
|||
break;
|
||||
}
|
||||
|
||||
visit_type_str(v, &value, name, errp);
|
||||
visit_type_str(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void powerpc_set_compat(Object *obj, Visitor *v,
|
||||
void *opaque, const char *name, Error **errp)
|
||||
static void powerpc_set_compat(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
Error *error = NULL;
|
||||
char *value = NULL;
|
||||
Property *prop = opaque;
|
||||
uint32_t *max_compat = qdev_get_prop_ptr(DEVICE(obj), prop);
|
||||
|
||||
visit_type_str(v, &value, name, &error);
|
||||
visit_type_str(v, name, &value, &error);
|
||||
if (error) {
|
||||
error_propagate(errp, error);
|
||||
return;
|
||||
|
|
|
@ -157,7 +157,7 @@ def __init__(self, test_id, seed, work_dir, run_log,
|
|||
|
||||
try:
|
||||
os.makedirs(self.current_dir)
|
||||
except OSError, e:
|
||||
except OSError as e:
|
||||
print >>sys.stderr, \
|
||||
"Error: The working directory '%s' cannot be used. Reason: %s"\
|
||||
% (self.work_dir, e[1])
|
||||
|
@ -244,7 +244,7 @@ def execute(self, input_commands=None, fuzz_config=None):
|
|||
temp_log = StringIO.StringIO()
|
||||
try:
|
||||
retcode = run_app(temp_log, current_cmd)
|
||||
except OSError, e:
|
||||
except OSError as e:
|
||||
multilog("%sError: Start of '%s' failed. Reason: %s\n\n"
|
||||
% (test_summary, os.path.basename(current_cmd[0]),
|
||||
e[1]),
|
||||
|
@ -356,7 +356,7 @@ def should_continue(duration, start_time):
|
|||
opts, args = getopt.gnu_getopt(sys.argv[1:], 'c:hs:kvd:',
|
||||
['command=', 'help', 'seed=', 'config=',
|
||||
'keep_passed', 'verbose', 'duration='])
|
||||
except getopt.error, e:
|
||||
except getopt.error as e:
|
||||
print >>sys.stderr, \
|
||||
"Error: %s\n\nTry 'runner.py --help' for more information" % e
|
||||
sys.exit(1)
|
||||
|
@ -374,7 +374,7 @@ def should_continue(duration, start_time):
|
|||
elif opt in ('-c', '--command'):
|
||||
try:
|
||||
command = json.loads(arg)
|
||||
except (TypeError, ValueError, NameError), e:
|
||||
except (TypeError, ValueError, NameError) as e:
|
||||
print >>sys.stderr, \
|
||||
"Error: JSON array of test commands cannot be loaded.\n" \
|
||||
"Reason: %s" % e
|
||||
|
@ -390,7 +390,7 @@ def should_continue(duration, start_time):
|
|||
elif opt == '--config':
|
||||
try:
|
||||
config = json.loads(arg)
|
||||
except (TypeError, ValueError, NameError), e:
|
||||
except (TypeError, ValueError, NameError) as e:
|
||||
print >>sys.stderr, \
|
||||
"Error: JSON array with the fuzzer configuration cannot" \
|
||||
" be loaded\nReason: %s" % e
|
||||
|
@ -414,7 +414,7 @@ def should_continue(duration, start_time):
|
|||
|
||||
try:
|
||||
image_generator = __import__(generator_name)
|
||||
except ImportError, e:
|
||||
except ImportError as e:
|
||||
print >>sys.stderr, \
|
||||
"Error: The image generator '%s' cannot be imported.\n" \
|
||||
"Reason: %s" % (generator_name, e)
|
||||
|
|
|
@ -227,7 +227,7 @@ def main():
|
|||
qed = QED(open(filename, 'r+b'))
|
||||
try:
|
||||
globals()[cmd](qed, *sys.argv[3:])
|
||||
except TypeError, e:
|
||||
except TypeError as e:
|
||||
sys.stderr.write(globals()[cmd].__doc__ + '\n')
|
||||
sys.exit(1)
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ setup_fixture(OptsVisitorFixture *f, gconstpointer test_data)
|
|||
g_assert(opts != NULL);
|
||||
|
||||
ov = opts_visitor_new(opts);
|
||||
visit_type_UserDefOptions(opts_get_visitor(ov), &f->userdef, NULL,
|
||||
visit_type_UserDefOptions(opts_get_visitor(ov), NULL, &f->userdef,
|
||||
&f->err);
|
||||
opts_visitor_cleanup(ov);
|
||||
qemu_opts_del(opts);
|
||||
|
@ -58,8 +58,8 @@ teardown_fixture(OptsVisitorFixture *f, gconstpointer test_data)
|
|||
QapiDeallocVisitor *dv;
|
||||
|
||||
dv = qapi_dealloc_visitor_new();
|
||||
visit_type_UserDefOptions(qapi_dealloc_get_visitor(dv), &f->userdef,
|
||||
NULL, NULL);
|
||||
visit_type_UserDefOptions(qapi_dealloc_get_visitor(dv), NULL,
|
||||
&f->userdef, NULL);
|
||||
qapi_dealloc_visitor_cleanup(dv);
|
||||
}
|
||||
error_free(f->err);
|
||||
|
|
|
@ -116,26 +116,20 @@ static void test_static_globalprop(void)
|
|||
#define TYPE_UNUSED_HOTPLUG "hotplug-type"
|
||||
#define TYPE_UNUSED_NOHOTPLUG "nohotplug-type"
|
||||
|
||||
static void prop1_accessor(Object *obj,
|
||||
Visitor *v,
|
||||
void *opaque,
|
||||
const char *name,
|
||||
Error **errp)
|
||||
static void prop1_accessor(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
MyType *mt = DYNAMIC_TYPE(obj);
|
||||
|
||||
visit_type_uint32(v, &mt->prop1, name, errp);
|
||||
visit_type_uint32(v, name, &mt->prop1, errp);
|
||||
}
|
||||
|
||||
static void prop2_accessor(Object *obj,
|
||||
Visitor *v,
|
||||
void *opaque,
|
||||
const char *name,
|
||||
Error **errp)
|
||||
static void prop2_accessor(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
MyType *mt = DYNAMIC_TYPE(obj);
|
||||
|
||||
visit_type_uint32(v, &mt->prop2, name, errp);
|
||||
visit_type_uint32(v, name, &mt->prop2, errp);
|
||||
}
|
||||
|
||||
static void dynamic_instance_init(Object *obj)
|
||||
|
|
|
@ -217,7 +217,7 @@ static void test_dealloc_partial(void)
|
|||
qdict_put_obj(ud2_dict, "string0", QOBJECT(qstring_from_str(text)));
|
||||
|
||||
qiv = qmp_input_visitor_new(QOBJECT(ud2_dict));
|
||||
visit_type_UserDefTwo(qmp_input_get_visitor(qiv), &ud2, NULL, &err);
|
||||
visit_type_UserDefTwo(qmp_input_get_visitor(qiv), NULL, &ud2, &err);
|
||||
qmp_input_visitor_cleanup(qiv);
|
||||
QDECREF(ud2_dict);
|
||||
}
|
||||
|
|
|
@ -98,7 +98,7 @@ static void test_validate_struct(TestInputVisitorData *data,
|
|||
|
||||
v = validate_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo' }");
|
||||
|
||||
visit_type_TestStruct(v, &p, NULL, &error_abort);
|
||||
visit_type_TestStruct(v, NULL, &p, &error_abort);
|
||||
g_free(p->string);
|
||||
g_free(p);
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ static void test_validate_struct_nested(TestInputVisitorData *data,
|
|||
"'dict2': { 'userdef': { 'integer': 42, "
|
||||
"'string': 'string' }, 'string': 'string2'}}}");
|
||||
|
||||
visit_type_UserDefTwo(v, &udp, NULL, &error_abort);
|
||||
visit_type_UserDefTwo(v, NULL, &udp, &error_abort);
|
||||
qapi_free_UserDefTwo(udp);
|
||||
}
|
||||
|
||||
|
@ -126,7 +126,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 } ]");
|
||||
|
||||
visit_type_UserDefOneList(v, &head, NULL, &error_abort);
|
||||
visit_type_UserDefOneList(v, NULL, &head, &error_abort);
|
||||
qapi_free_UserDefOneList(head);
|
||||
}
|
||||
|
||||
|
@ -138,7 +138,7 @@ static void test_validate_union_native_list(TestInputVisitorData *data,
|
|||
|
||||
v = validate_test_init(data, "{ 'type': 'integer', 'data' : [ 1, 2 ] }");
|
||||
|
||||
visit_type_UserDefNativeListUnion(v, &tmp, NULL, &error_abort);
|
||||
visit_type_UserDefNativeListUnion(v, NULL, &tmp, &error_abort);
|
||||
qapi_free_UserDefNativeListUnion(tmp);
|
||||
}
|
||||
|
||||
|
@ -154,7 +154,7 @@ static void test_validate_union_flat(TestInputVisitorData *data,
|
|||
"'string': 'str', "
|
||||
"'boolean': true }");
|
||||
|
||||
visit_type_UserDefFlatUnion(v, &tmp, NULL, &error_abort);
|
||||
visit_type_UserDefFlatUnion(v, NULL, &tmp, &error_abort);
|
||||
qapi_free_UserDefFlatUnion(tmp);
|
||||
}
|
||||
|
||||
|
@ -166,7 +166,7 @@ static void test_validate_alternate(TestInputVisitorData *data,
|
|||
|
||||
v = validate_test_init(data, "42");
|
||||
|
||||
visit_type_UserDefAlternate(v, &tmp, NULL, &error_abort);
|
||||
visit_type_UserDefAlternate(v, NULL, &tmp, &error_abort);
|
||||
qapi_free_UserDefAlternate(tmp);
|
||||
}
|
||||
|
||||
|
@ -179,7 +179,7 @@ static void test_validate_fail_struct(TestInputVisitorData *data,
|
|||
|
||||
v = validate_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo', 'extra': 42 }");
|
||||
|
||||
visit_type_TestStruct(v, &p, NULL, &err);
|
||||
visit_type_TestStruct(v, NULL, &p, &err);
|
||||
error_free_or_abort(&err);
|
||||
if (p) {
|
||||
g_free(p->string);
|
||||
|
@ -196,7 +196,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'}}}");
|
||||
|
||||
visit_type_UserDefTwo(v, &udp, NULL, &err);
|
||||
visit_type_UserDefTwo(v, NULL, &udp, &err);
|
||||
error_free_or_abort(&err);
|
||||
qapi_free_UserDefTwo(udp);
|
||||
}
|
||||
|
@ -210,7 +210,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' } ]");
|
||||
|
||||
visit_type_UserDefOneList(v, &head, NULL, &err);
|
||||
visit_type_UserDefOneList(v, NULL, &head, &err);
|
||||
error_free_or_abort(&err);
|
||||
qapi_free_UserDefOneList(head);
|
||||
}
|
||||
|
@ -225,7 +225,7 @@ static void test_validate_fail_union_native_list(TestInputVisitorData *data,
|
|||
v = validate_test_init(data,
|
||||
"{ 'type': 'integer', 'data' : [ 'string' ] }");
|
||||
|
||||
visit_type_UserDefNativeListUnion(v, &tmp, NULL, &err);
|
||||
visit_type_UserDefNativeListUnion(v, NULL, &tmp, &err);
|
||||
error_free_or_abort(&err);
|
||||
qapi_free_UserDefNativeListUnion(tmp);
|
||||
}
|
||||
|
@ -239,7 +239,7 @@ static void test_validate_fail_union_flat(TestInputVisitorData *data,
|
|||
|
||||
v = validate_test_init(data, "{ 'string': 'c', 'integer': 41, 'boolean': true }");
|
||||
|
||||
visit_type_UserDefFlatUnion(v, &tmp, NULL, &err);
|
||||
visit_type_UserDefFlatUnion(v, NULL, &tmp, &err);
|
||||
error_free_or_abort(&err);
|
||||
qapi_free_UserDefFlatUnion(tmp);
|
||||
}
|
||||
|
@ -254,7 +254,7 @@ static void test_validate_fail_union_flat_no_discrim(TestInputVisitorData *data,
|
|||
/* test situation where discriminator field ('enum1' here) is missing */
|
||||
v = validate_test_init(data, "{ 'integer': 42, 'string': 'c', 'string1': 'd', 'string2': 'e' }");
|
||||
|
||||
visit_type_UserDefFlatUnion2(v, &tmp, NULL, &err);
|
||||
visit_type_UserDefFlatUnion2(v, NULL, &tmp, &err);
|
||||
error_free_or_abort(&err);
|
||||
qapi_free_UserDefFlatUnion2(tmp);
|
||||
}
|
||||
|
@ -268,7 +268,7 @@ static void test_validate_fail_alternate(TestInputVisitorData *data,
|
|||
|
||||
v = validate_test_init(data, "3.14");
|
||||
|
||||
visit_type_UserDefAlternate(v, &tmp, NULL, &err);
|
||||
visit_type_UserDefAlternate(v, NULL, &tmp, &err);
|
||||
error_free_or_abort(&err);
|
||||
qapi_free_UserDefAlternate(tmp);
|
||||
}
|
||||
|
@ -281,7 +281,7 @@ static void do_test_validate_qmp_introspect(TestInputVisitorData *data,
|
|||
|
||||
v = validate_test_init_raw(data, schema_json);
|
||||
|
||||
visit_type_SchemaInfoList(v, &schema, NULL, &error_abort);
|
||||
visit_type_SchemaInfoList(v, NULL, &schema, &error_abort);
|
||||
g_assert(schema);
|
||||
|
||||
qapi_free_SchemaInfoList(schema);
|
||||
|
|
|
@ -93,7 +93,7 @@ static void test_visitor_in_int(TestInputVisitorData *data,
|
|||
|
||||
v = visitor_input_test_init(data, "%" PRId64, value);
|
||||
|
||||
visit_type_int(v, &res, NULL, &error_abort);
|
||||
visit_type_int(v, NULL, &res, &error_abort);
|
||||
g_assert_cmpint(res, ==, value);
|
||||
}
|
||||
|
||||
|
@ -110,7 +110,7 @@ static void test_visitor_in_int_overflow(TestInputVisitorData *data,
|
|||
*/
|
||||
v = visitor_input_test_init(data, "%f", DBL_MAX);
|
||||
|
||||
visit_type_int(v, &res, NULL, &err);
|
||||
visit_type_int(v, NULL, &res, &err);
|
||||
error_free_or_abort(&err);
|
||||
}
|
||||
|
||||
|
@ -122,7 +122,7 @@ static void test_visitor_in_bool(TestInputVisitorData *data,
|
|||
|
||||
v = visitor_input_test_init(data, "true");
|
||||
|
||||
visit_type_bool(v, &res, NULL, &error_abort);
|
||||
visit_type_bool(v, NULL, &res, &error_abort);
|
||||
g_assert_cmpint(res, ==, true);
|
||||
}
|
||||
|
||||
|
@ -134,7 +134,7 @@ static void test_visitor_in_number(TestInputVisitorData *data,
|
|||
|
||||
v = visitor_input_test_init(data, "%f", value);
|
||||
|
||||
visit_type_number(v, &res, NULL, &error_abort);
|
||||
visit_type_number(v, NULL, &res, &error_abort);
|
||||
g_assert_cmpfloat(res, ==, value);
|
||||
}
|
||||
|
||||
|
@ -146,7 +146,7 @@ static void test_visitor_in_string(TestInputVisitorData *data,
|
|||
|
||||
v = visitor_input_test_init(data, "%s", value);
|
||||
|
||||
visit_type_str(v, &res, NULL, &error_abort);
|
||||
visit_type_str(v, NULL, &res, &error_abort);
|
||||
g_assert_cmpstr(res, ==, value);
|
||||
|
||||
g_free(res);
|
||||
|
@ -163,7 +163,7 @@ static void test_visitor_in_enum(TestInputVisitorData *data,
|
|||
|
||||
v = visitor_input_test_init(data, "%s", EnumOne_lookup[i]);
|
||||
|
||||
visit_type_EnumOne(v, &res, NULL, &error_abort);
|
||||
visit_type_EnumOne(v, NULL, &res, &error_abort);
|
||||
g_assert_cmpint(i, ==, res);
|
||||
}
|
||||
}
|
||||
|
@ -177,7 +177,7 @@ static void test_visitor_in_struct(TestInputVisitorData *data,
|
|||
|
||||
v = visitor_input_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo' }");
|
||||
|
||||
visit_type_TestStruct(v, &p, NULL, &error_abort);
|
||||
visit_type_TestStruct(v, NULL, &p, &error_abort);
|
||||
g_assert_cmpint(p->integer, ==, -42);
|
||||
g_assert(p->boolean == true);
|
||||
g_assert_cmpstr(p->string, ==, "foo");
|
||||
|
@ -197,7 +197,7 @@ static void test_visitor_in_struct_nested(TestInputVisitorData *data,
|
|||
"'dict2': { 'userdef': { 'integer': 42, "
|
||||
"'string': 'string' }, 'string': 'string2'}}}");
|
||||
|
||||
visit_type_UserDefTwo(v, &udp, NULL, &error_abort);
|
||||
visit_type_UserDefTwo(v, NULL, &udp, &error_abort);
|
||||
|
||||
g_assert_cmpstr(udp->string0, ==, "string0");
|
||||
g_assert_cmpstr(udp->dict1->string1, ==, "string1");
|
||||
|
@ -218,7 +218,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 } ]");
|
||||
|
||||
visit_type_UserDefOneList(v, &head, NULL, &error_abort);
|
||||
visit_type_UserDefOneList(v, NULL, &head, &error_abort);
|
||||
g_assert(head != NULL);
|
||||
|
||||
for (i = 0, item = head; item; item = item->next, i++) {
|
||||
|
@ -234,7 +234,7 @@ static void test_visitor_in_list(TestInputVisitorData *data,
|
|||
|
||||
/* An empty list is valid */
|
||||
v = visitor_input_test_init(data, "[]");
|
||||
visit_type_UserDefOneList(v, &head, NULL, &error_abort);
|
||||
visit_type_UserDefOneList(v, NULL, &head, &error_abort);
|
||||
g_assert(!head);
|
||||
}
|
||||
|
||||
|
@ -250,14 +250,14 @@ static void test_visitor_in_any(TestInputVisitorData *data,
|
|||
QObject *qobj;
|
||||
|
||||
v = visitor_input_test_init(data, "-42");
|
||||
visit_type_any(v, &res, NULL, &error_abort);
|
||||
visit_type_any(v, NULL, &res, &error_abort);
|
||||
qint = qobject_to_qint(res);
|
||||
g_assert(qint);
|
||||
g_assert_cmpint(qint_get_int(qint), ==, -42);
|
||||
qobject_decref(res);
|
||||
|
||||
v = visitor_input_test_init(data, "{ 'integer': -42, 'boolean': true, 'string': 'foo' }");
|
||||
visit_type_any(v, &res, NULL, &error_abort);
|
||||
visit_type_any(v, NULL, &res, &error_abort);
|
||||
qdict = qobject_to_qdict(res);
|
||||
g_assert(qdict && qdict_size(qdict) == 3);
|
||||
qobj = qdict_get(qdict, "integer");
|
||||
|
@ -291,7 +291,7 @@ static void test_visitor_in_union_flat(TestInputVisitorData *data,
|
|||
"'string': 'str', "
|
||||
"'boolean': true }");
|
||||
|
||||
visit_type_UserDefFlatUnion(v, &tmp, NULL, &error_abort);
|
||||
visit_type_UserDefFlatUnion(v, NULL, &tmp, &error_abort);
|
||||
g_assert_cmpint(tmp->enum1, ==, ENUM_ONE_VALUE1);
|
||||
g_assert_cmpstr(tmp->string, ==, "str");
|
||||
g_assert_cmpint(tmp->integer, ==, 41);
|
||||
|
@ -311,19 +311,19 @@ static void test_visitor_in_alternate(TestInputVisitorData *data,
|
|||
UserDefAlternate *tmp;
|
||||
|
||||
v = visitor_input_test_init(data, "42");
|
||||
visit_type_UserDefAlternate(v, &tmp, NULL, &error_abort);
|
||||
visit_type_UserDefAlternate(v, NULL, &tmp, &error_abort);
|
||||
g_assert_cmpint(tmp->type, ==, QTYPE_QINT);
|
||||
g_assert_cmpint(tmp->u.i, ==, 42);
|
||||
qapi_free_UserDefAlternate(tmp);
|
||||
|
||||
v = visitor_input_test_init(data, "'string'");
|
||||
visit_type_UserDefAlternate(v, &tmp, NULL, &error_abort);
|
||||
visit_type_UserDefAlternate(v, NULL, &tmp, &error_abort);
|
||||
g_assert_cmpint(tmp->type, ==, QTYPE_QSTRING);
|
||||
g_assert_cmpstr(tmp->u.s, ==, "string");
|
||||
qapi_free_UserDefAlternate(tmp);
|
||||
|
||||
v = visitor_input_test_init(data, "false");
|
||||
visit_type_UserDefAlternate(v, &tmp, NULL, &err);
|
||||
visit_type_UserDefAlternate(v, NULL, &tmp, &err);
|
||||
error_free_or_abort(&err);
|
||||
qapi_free_UserDefAlternate(tmp);
|
||||
}
|
||||
|
@ -343,36 +343,36 @@ static void test_visitor_in_alternate_number(TestInputVisitorData *data,
|
|||
/* Parsing an int */
|
||||
|
||||
v = visitor_input_test_init(data, "42");
|
||||
visit_type_AltStrBool(v, &asb, NULL, &err);
|
||||
visit_type_AltStrBool(v, NULL, &asb, &err);
|
||||
error_free_or_abort(&err);
|
||||
qapi_free_AltStrBool(asb);
|
||||
|
||||
v = visitor_input_test_init(data, "42");
|
||||
visit_type_AltStrNum(v, &asn, NULL, &error_abort);
|
||||
visit_type_AltStrNum(v, NULL, &asn, &error_abort);
|
||||
g_assert_cmpint(asn->type, ==, QTYPE_QFLOAT);
|
||||
g_assert_cmpfloat(asn->u.n, ==, 42);
|
||||
qapi_free_AltStrNum(asn);
|
||||
|
||||
v = visitor_input_test_init(data, "42");
|
||||
visit_type_AltNumStr(v, &ans, NULL, &error_abort);
|
||||
visit_type_AltNumStr(v, NULL, &ans, &error_abort);
|
||||
g_assert_cmpint(ans->type, ==, QTYPE_QFLOAT);
|
||||
g_assert_cmpfloat(ans->u.n, ==, 42);
|
||||
qapi_free_AltNumStr(ans);
|
||||
|
||||
v = visitor_input_test_init(data, "42");
|
||||
visit_type_AltStrInt(v, &asi, NULL, &error_abort);
|
||||
visit_type_AltStrInt(v, NULL, &asi, &error_abort);
|
||||
g_assert_cmpint(asi->type, ==, QTYPE_QINT);
|
||||
g_assert_cmpint(asi->u.i, ==, 42);
|
||||
qapi_free_AltStrInt(asi);
|
||||
|
||||
v = visitor_input_test_init(data, "42");
|
||||
visit_type_AltIntNum(v, &ain, NULL, &error_abort);
|
||||
visit_type_AltIntNum(v, NULL, &ain, &error_abort);
|
||||
g_assert_cmpint(ain->type, ==, QTYPE_QINT);
|
||||
g_assert_cmpint(ain->u.i, ==, 42);
|
||||
qapi_free_AltIntNum(ain);
|
||||
|
||||
v = visitor_input_test_init(data, "42");
|
||||
visit_type_AltNumInt(v, &ani, NULL, &error_abort);
|
||||
visit_type_AltNumInt(v, NULL, &ani, &error_abort);
|
||||
g_assert_cmpint(ani->type, ==, QTYPE_QINT);
|
||||
g_assert_cmpint(ani->u.i, ==, 42);
|
||||
qapi_free_AltNumInt(ani);
|
||||
|
@ -380,35 +380,35 @@ static void test_visitor_in_alternate_number(TestInputVisitorData *data,
|
|||
/* Parsing a double */
|
||||
|
||||
v = visitor_input_test_init(data, "42.5");
|
||||
visit_type_AltStrBool(v, &asb, NULL, &err);
|
||||
visit_type_AltStrBool(v, NULL, &asb, &err);
|
||||
error_free_or_abort(&err);
|
||||
qapi_free_AltStrBool(asb);
|
||||
|
||||
v = visitor_input_test_init(data, "42.5");
|
||||
visit_type_AltStrNum(v, &asn, NULL, &error_abort);
|
||||
visit_type_AltStrNum(v, NULL, &asn, &error_abort);
|
||||
g_assert_cmpint(asn->type, ==, QTYPE_QFLOAT);
|
||||
g_assert_cmpfloat(asn->u.n, ==, 42.5);
|
||||
qapi_free_AltStrNum(asn);
|
||||
|
||||
v = visitor_input_test_init(data, "42.5");
|
||||
visit_type_AltNumStr(v, &ans, NULL, &error_abort);
|
||||
visit_type_AltNumStr(v, NULL, &ans, &error_abort);
|
||||
g_assert_cmpint(ans->type, ==, QTYPE_QFLOAT);
|
||||
g_assert_cmpfloat(ans->u.n, ==, 42.5);
|
||||
qapi_free_AltNumStr(ans);
|
||||
|
||||
v = visitor_input_test_init(data, "42.5");
|
||||
visit_type_AltStrInt(v, &asi, NULL, &err);
|
||||
visit_type_AltStrInt(v, NULL, &asi, &err);
|
||||
error_free_or_abort(&err);
|
||||
qapi_free_AltStrInt(asi);
|
||||
|
||||
v = visitor_input_test_init(data, "42.5");
|
||||
visit_type_AltIntNum(v, &ain, NULL, &error_abort);
|
||||
visit_type_AltIntNum(v, NULL, &ain, &error_abort);
|
||||
g_assert_cmpint(ain->type, ==, QTYPE_QFLOAT);
|
||||
g_assert_cmpfloat(ain->u.n, ==, 42.5);
|
||||
qapi_free_AltIntNum(ain);
|
||||
|
||||
v = visitor_input_test_init(data, "42.5");
|
||||
visit_type_AltNumInt(v, &ani, NULL, &error_abort);
|
||||
visit_type_AltNumInt(v, NULL, &ani, &error_abort);
|
||||
g_assert_cmpint(ani->type, ==, QTYPE_QFLOAT);
|
||||
g_assert_cmpfloat(ani->u.n, ==, 42.5);
|
||||
qapi_free_AltNumInt(ani);
|
||||
|
@ -435,7 +435,7 @@ static void test_native_list_integer_helper(TestInputVisitorData *data,
|
|||
gstr_list->str);
|
||||
v = visitor_input_test_init_raw(data, gstr_union->str);
|
||||
|
||||
visit_type_UserDefNativeListUnion(v, &cvalue, NULL, &error_abort);
|
||||
visit_type_UserDefNativeListUnion(v, NULL, &cvalue, &error_abort);
|
||||
g_assert(cvalue != NULL);
|
||||
g_assert_cmpint(cvalue->type, ==, kind);
|
||||
|
||||
|
@ -596,7 +596,7 @@ static void test_visitor_in_native_list_bool(TestInputVisitorData *data,
|
|||
gstr_list->str);
|
||||
v = visitor_input_test_init_raw(data, gstr_union->str);
|
||||
|
||||
visit_type_UserDefNativeListUnion(v, &cvalue, NULL, &error_abort);
|
||||
visit_type_UserDefNativeListUnion(v, NULL, &cvalue, &error_abort);
|
||||
g_assert(cvalue != NULL);
|
||||
g_assert_cmpint(cvalue->type, ==, USER_DEF_NATIVE_LIST_UNION_KIND_BOOLEAN);
|
||||
|
||||
|
@ -629,7 +629,7 @@ static void test_visitor_in_native_list_string(TestInputVisitorData *data,
|
|||
gstr_list->str);
|
||||
v = visitor_input_test_init_raw(data, gstr_union->str);
|
||||
|
||||
visit_type_UserDefNativeListUnion(v, &cvalue, NULL, &error_abort);
|
||||
visit_type_UserDefNativeListUnion(v, NULL, &cvalue, &error_abort);
|
||||
g_assert(cvalue != NULL);
|
||||
g_assert_cmpint(cvalue->type, ==, USER_DEF_NATIVE_LIST_UNION_KIND_STRING);
|
||||
|
||||
|
@ -666,7 +666,7 @@ static void test_visitor_in_native_list_number(TestInputVisitorData *data,
|
|||
gstr_list->str);
|
||||
v = visitor_input_test_init_raw(data, gstr_union->str);
|
||||
|
||||
visit_type_UserDefNativeListUnion(v, &cvalue, NULL, &error_abort);
|
||||
visit_type_UserDefNativeListUnion(v, NULL, &cvalue, &error_abort);
|
||||
g_assert(cvalue != NULL);
|
||||
g_assert_cmpint(cvalue->type, ==, USER_DEF_NATIVE_LIST_UNION_KIND_NUMBER);
|
||||
|
||||
|
@ -706,7 +706,7 @@ static void test_visitor_in_errors(TestInputVisitorData *data,
|
|||
v = visitor_input_test_init(data, "{ 'integer': false, 'boolean': 'foo', "
|
||||
"'string': -42 }");
|
||||
|
||||
visit_type_TestStruct(v, &p, NULL, &err);
|
||||
visit_type_TestStruct(v, NULL, &p, &err);
|
||||
error_free_or_abort(&err);
|
||||
/* FIXME - a failed parse should not leave a partially-allocated p
|
||||
* for us to clean up; this could cause callers to leak memory. */
|
||||
|
@ -716,7 +716,7 @@ static void test_visitor_in_errors(TestInputVisitorData *data,
|
|||
g_free(p);
|
||||
|
||||
v = visitor_input_test_init(data, "[ '1', '2', false, '3' ]");
|
||||
visit_type_strList(v, &q, NULL, &err);
|
||||
visit_type_strList(v, NULL, &q, &err);
|
||||
error_free_or_abort(&err);
|
||||
assert(q);
|
||||
qapi_free_strList(q);
|
||||
|
@ -734,35 +734,35 @@ static void test_visitor_in_wrong_type(TestInputVisitorData *data,
|
|||
/* Make sure arrays and structs cannot be confused */
|
||||
|
||||
v = visitor_input_test_init(data, "[]");
|
||||
visit_type_TestStruct(v, &p, NULL, &err);
|
||||
visit_type_TestStruct(v, NULL, &p, &err);
|
||||
error_free_or_abort(&err);
|
||||
g_assert(!p);
|
||||
|
||||
v = visitor_input_test_init(data, "{}");
|
||||
visit_type_strList(v, &q, NULL, &err);
|
||||
visit_type_strList(v, NULL, &q, &err);
|
||||
error_free_or_abort(&err);
|
||||
assert(!q);
|
||||
|
||||
/* Make sure primitives and struct cannot be confused */
|
||||
|
||||
v = visitor_input_test_init(data, "1");
|
||||
visit_type_TestStruct(v, &p, NULL, &err);
|
||||
visit_type_TestStruct(v, NULL, &p, &err);
|
||||
error_free_or_abort(&err);
|
||||
g_assert(!p);
|
||||
|
||||
v = visitor_input_test_init(data, "{}");
|
||||
visit_type_int(v, &i, NULL, &err);
|
||||
visit_type_int(v, NULL, &i, &err);
|
||||
error_free_or_abort(&err);
|
||||
|
||||
/* Make sure primitives and arrays cannot be confused */
|
||||
|
||||
v = visitor_input_test_init(data, "1");
|
||||
visit_type_strList(v, &q, NULL, &err);
|
||||
visit_type_strList(v, NULL, &q, &err);
|
||||
error_free_or_abort(&err);
|
||||
assert(!q);
|
||||
|
||||
v = visitor_input_test_init(data, "[]");
|
||||
visit_type_int(v, &i, NULL, &err);
|
||||
visit_type_int(v, NULL, &i, &err);
|
||||
error_free_or_abort(&err);
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ static void test_visitor_out_int(TestOutputVisitorData *data,
|
|||
int64_t value = -42;
|
||||
QObject *obj;
|
||||
|
||||
visit_type_int(data->ov, &value, NULL, &error_abort);
|
||||
visit_type_int(data->ov, NULL, &value, &error_abort);
|
||||
|
||||
obj = qmp_output_get_qobject(data->qov);
|
||||
g_assert(obj != NULL);
|
||||
|
@ -63,7 +63,7 @@ static void test_visitor_out_bool(TestOutputVisitorData *data,
|
|||
bool value = true;
|
||||
QObject *obj;
|
||||
|
||||
visit_type_bool(data->ov, &value, NULL, &error_abort);
|
||||
visit_type_bool(data->ov, NULL, &value, &error_abort);
|
||||
|
||||
obj = qmp_output_get_qobject(data->qov);
|
||||
g_assert(obj != NULL);
|
||||
|
@ -79,7 +79,7 @@ static void test_visitor_out_number(TestOutputVisitorData *data,
|
|||
double value = 3.14;
|
||||
QObject *obj;
|
||||
|
||||
visit_type_number(data->ov, &value, NULL, &error_abort);
|
||||
visit_type_number(data->ov, NULL, &value, &error_abort);
|
||||
|
||||
obj = qmp_output_get_qobject(data->qov);
|
||||
g_assert(obj != NULL);
|
||||
|
@ -95,7 +95,7 @@ static void test_visitor_out_string(TestOutputVisitorData *data,
|
|||
char *string = (char *) "Q E M U";
|
||||
QObject *obj;
|
||||
|
||||
visit_type_str(data->ov, &string, NULL, &error_abort);
|
||||
visit_type_str(data->ov, NULL, &string, &error_abort);
|
||||
|
||||
obj = qmp_output_get_qobject(data->qov);
|
||||
g_assert(obj != NULL);
|
||||
|
@ -112,7 +112,7 @@ static void test_visitor_out_no_string(TestOutputVisitorData *data,
|
|||
QObject *obj;
|
||||
|
||||
/* A null string should return "" */
|
||||
visit_type_str(data->ov, &string, NULL, &error_abort);
|
||||
visit_type_str(data->ov, NULL, &string, &error_abort);
|
||||
|
||||
obj = qmp_output_get_qobject(data->qov);
|
||||
g_assert(obj != NULL);
|
||||
|
@ -129,7 +129,7 @@ static void test_visitor_out_enum(TestOutputVisitorData *data,
|
|||
EnumOne i;
|
||||
|
||||
for (i = 0; i < ENUM_ONE__MAX; i++) {
|
||||
visit_type_EnumOne(data->ov, &i, "unused", &error_abort);
|
||||
visit_type_EnumOne(data->ov, "unused", &i, &error_abort);
|
||||
|
||||
obj = qmp_output_get_qobject(data->qov);
|
||||
g_assert(obj != NULL);
|
||||
|
@ -148,7 +148,7 @@ static void test_visitor_out_enum_errors(TestOutputVisitorData *data,
|
|||
|
||||
for (i = 0; i < ARRAY_SIZE(bad_values) ; i++) {
|
||||
err = NULL;
|
||||
visit_type_EnumOne(data->ov, &bad_values[i], "unused", &err);
|
||||
visit_type_EnumOne(data->ov, "unused", &bad_values[i], &err);
|
||||
g_assert(err);
|
||||
error_free(err);
|
||||
}
|
||||
|
@ -165,7 +165,7 @@ static void test_visitor_out_struct(TestOutputVisitorData *data,
|
|||
QObject *obj;
|
||||
QDict *qdict;
|
||||
|
||||
visit_type_TestStruct(data->ov, &p, NULL, &error_abort);
|
||||
visit_type_TestStruct(data->ov, NULL, &p, &error_abort);
|
||||
|
||||
obj = qmp_output_get_qobject(data->qov);
|
||||
g_assert(obj != NULL);
|
||||
|
@ -210,7 +210,7 @@ static void test_visitor_out_struct_nested(TestOutputVisitorData *data,
|
|||
ud2->dict1->dict3->userdef->integer = value;
|
||||
ud2->dict1->dict3->string = g_strdup(strings[3]);
|
||||
|
||||
visit_type_UserDefTwo(data->ov, &ud2, "unused", &error_abort);
|
||||
visit_type_UserDefTwo(data->ov, "unused", &ud2, &error_abort);
|
||||
|
||||
obj = qmp_output_get_qobject(data->qov);
|
||||
g_assert(obj != NULL);
|
||||
|
@ -257,7 +257,7 @@ static void test_visitor_out_struct_errors(TestOutputVisitorData *data,
|
|||
err = NULL;
|
||||
u.has_enum1 = true;
|
||||
u.enum1 = bad_values[i];
|
||||
visit_type_UserDefOne(data->ov, &pu, "unused", &err);
|
||||
visit_type_UserDefOne(data->ov, "unused", &pu, &err);
|
||||
g_assert(err);
|
||||
error_free(err);
|
||||
}
|
||||
|
@ -289,7 +289,7 @@ static void test_visitor_out_list(TestOutputVisitorData *data,
|
|||
head = p;
|
||||
}
|
||||
|
||||
visit_type_TestStructList(data->ov, &head, NULL, &error_abort);
|
||||
visit_type_TestStructList(data->ov, NULL, &head, &error_abort);
|
||||
|
||||
obj = qmp_output_get_qobject(data->qov);
|
||||
g_assert(obj != NULL);
|
||||
|
@ -356,7 +356,7 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
|
|||
QObject *obj;
|
||||
|
||||
qobj = QOBJECT(qint_from_int(-42));
|
||||
visit_type_any(data->ov, &qobj, NULL, &error_abort);
|
||||
visit_type_any(data->ov, NULL, &qobj, &error_abort);
|
||||
obj = qmp_output_get_qobject(data->qov);
|
||||
g_assert(obj != NULL);
|
||||
g_assert(qobject_type(obj) == QTYPE_QINT);
|
||||
|
@ -369,7 +369,7 @@ static void test_visitor_out_any(TestOutputVisitorData *data,
|
|||
qdict_put(qdict, "boolean", qbool_from_bool(true));
|
||||
qdict_put(qdict, "string", qstring_from_str("foo"));
|
||||
qobj = QOBJECT(qdict);
|
||||
visit_type_any(data->ov, &qobj, NULL, &error_abort);
|
||||
visit_type_any(data->ov, NULL, &qobj, &error_abort);
|
||||
qobject_decref(qobj);
|
||||
obj = qmp_output_get_qobject(data->qov);
|
||||
g_assert(obj != NULL);
|
||||
|
@ -406,7 +406,7 @@ static void test_visitor_out_union_flat(TestOutputVisitorData *data,
|
|||
tmp->integer = 41;
|
||||
tmp->u.value1->boolean = true;
|
||||
|
||||
visit_type_UserDefFlatUnion(data->ov, &tmp, NULL, &error_abort);
|
||||
visit_type_UserDefFlatUnion(data->ov, NULL, &tmp, &error_abort);
|
||||
arg = qmp_output_get_qobject(data->qov);
|
||||
|
||||
g_assert(qobject_type(arg) == QTYPE_QDICT);
|
||||
|
@ -431,7 +431,7 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
|
|||
tmp->type = QTYPE_QINT;
|
||||
tmp->u.i = 42;
|
||||
|
||||
visit_type_UserDefAlternate(data->ov, &tmp, NULL, &error_abort);
|
||||
visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort);
|
||||
arg = qmp_output_get_qobject(data->qov);
|
||||
|
||||
g_assert(qobject_type(arg) == QTYPE_QINT);
|
||||
|
@ -444,7 +444,7 @@ static void test_visitor_out_alternate(TestOutputVisitorData *data,
|
|||
tmp->type = QTYPE_QSTRING;
|
||||
tmp->u.s = g_strdup("hello");
|
||||
|
||||
visit_type_UserDefAlternate(data->ov, &tmp, NULL, &error_abort);
|
||||
visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort);
|
||||
arg = qmp_output_get_qobject(data->qov);
|
||||
|
||||
g_assert(qobject_type(arg) == QTYPE_QSTRING);
|
||||
|
@ -461,6 +461,8 @@ static void test_visitor_out_empty(TestOutputVisitorData *data,
|
|||
|
||||
arg = qmp_output_get_qobject(data->qov);
|
||||
g_assert(qobject_type(arg) == QTYPE_QNULL);
|
||||
/* Check that qnull reference counting is sane */
|
||||
g_assert(arg->refcnt == 2);
|
||||
qobject_decref(arg);
|
||||
}
|
||||
|
||||
|
@ -690,7 +692,7 @@ static void test_native_list(TestOutputVisitorData *data,
|
|||
cvalue->type = kind;
|
||||
init_native_list(cvalue);
|
||||
|
||||
visit_type_UserDefNativeListUnion(data->ov, &cvalue, NULL, &error_abort);
|
||||
visit_type_UserDefNativeListUnion(data->ov, NULL, &cvalue, &error_abort);
|
||||
|
||||
obj = qmp_output_get_qobject(data->qov);
|
||||
check_native_list(obj, cvalue->type);
|
||||
|
|
|
@ -59,7 +59,7 @@ static void test_visitor_in_int(TestInputVisitorData *data,
|
|||
|
||||
v = visitor_input_test_init(data, "-42");
|
||||
|
||||
visit_type_int(v, &res, NULL, &err);
|
||||
visit_type_int(v, NULL, &res, &err);
|
||||
g_assert(!err);
|
||||
g_assert_cmpint(res, ==, value);
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ static void test_visitor_in_intList(TestInputVisitorData *data,
|
|||
|
||||
v = visitor_input_test_init(data, "1,2,0,2-4,20,5-9,1-8");
|
||||
|
||||
visit_type_int16List(v, &res, NULL, &error_abort);
|
||||
visit_type_int16List(v, NULL, &res, &error_abort);
|
||||
tmp = res;
|
||||
while (i < sizeof(value) / sizeof(value[0])) {
|
||||
g_assert(tmp);
|
||||
|
@ -100,42 +100,42 @@ static void test_visitor_in_bool(TestInputVisitorData *data,
|
|||
|
||||
v = visitor_input_test_init(data, "true");
|
||||
|
||||
visit_type_bool(v, &res, NULL, &err);
|
||||
visit_type_bool(v, NULL, &res, &err);
|
||||
g_assert(!err);
|
||||
g_assert_cmpint(res, ==, true);
|
||||
visitor_input_teardown(data, unused);
|
||||
|
||||
v = visitor_input_test_init(data, "yes");
|
||||
|
||||
visit_type_bool(v, &res, NULL, &err);
|
||||
visit_type_bool(v, NULL, &res, &err);
|
||||
g_assert(!err);
|
||||
g_assert_cmpint(res, ==, true);
|
||||
visitor_input_teardown(data, unused);
|
||||
|
||||
v = visitor_input_test_init(data, "on");
|
||||
|
||||
visit_type_bool(v, &res, NULL, &err);
|
||||
visit_type_bool(v, NULL, &res, &err);
|
||||
g_assert(!err);
|
||||
g_assert_cmpint(res, ==, true);
|
||||
visitor_input_teardown(data, unused);
|
||||
|
||||
v = visitor_input_test_init(data, "false");
|
||||
|
||||
visit_type_bool(v, &res, NULL, &err);
|
||||
visit_type_bool(v, NULL, &res, &err);
|
||||
g_assert(!err);
|
||||
g_assert_cmpint(res, ==, false);
|
||||
visitor_input_teardown(data, unused);
|
||||
|
||||
v = visitor_input_test_init(data, "no");
|
||||
|
||||
visit_type_bool(v, &res, NULL, &err);
|
||||
visit_type_bool(v, NULL, &res, &err);
|
||||
g_assert(!err);
|
||||
g_assert_cmpint(res, ==, false);
|
||||
visitor_input_teardown(data, unused);
|
||||
|
||||
v = visitor_input_test_init(data, "off");
|
||||
|
||||
visit_type_bool(v, &res, NULL, &err);
|
||||
visit_type_bool(v, NULL, &res, &err);
|
||||
g_assert(!err);
|
||||
g_assert_cmpint(res, ==, false);
|
||||
}
|
||||
|
@ -149,7 +149,7 @@ static void test_visitor_in_number(TestInputVisitorData *data,
|
|||
|
||||
v = visitor_input_test_init(data, "3.14");
|
||||
|
||||
visit_type_number(v, &res, NULL, &err);
|
||||
visit_type_number(v, NULL, &res, &err);
|
||||
g_assert(!err);
|
||||
g_assert_cmpfloat(res, ==, value);
|
||||
}
|
||||
|
@ -163,7 +163,7 @@ static void test_visitor_in_string(TestInputVisitorData *data,
|
|||
|
||||
v = visitor_input_test_init(data, value);
|
||||
|
||||
visit_type_str(v, &res, NULL, &err);
|
||||
visit_type_str(v, NULL, &res, &err);
|
||||
g_assert(!err);
|
||||
g_assert_cmpstr(res, ==, value);
|
||||
|
||||
|
@ -182,7 +182,7 @@ static void test_visitor_in_enum(TestInputVisitorData *data,
|
|||
|
||||
v = visitor_input_test_init(data, EnumOne_lookup[i]);
|
||||
|
||||
visit_type_EnumOne(v, &res, NULL, &err);
|
||||
visit_type_EnumOne(v, NULL, &res, &err);
|
||||
g_assert(!err);
|
||||
g_assert_cmpint(i, ==, res);
|
||||
|
||||
|
@ -220,29 +220,29 @@ static void test_visitor_in_fuzz(TestInputVisitorData *data,
|
|||
}
|
||||
|
||||
v = visitor_input_test_init(data, buf);
|
||||
visit_type_int(v, &ires, NULL, NULL);
|
||||
visit_type_int(v, NULL, &ires, NULL);
|
||||
visitor_input_teardown(data, NULL);
|
||||
|
||||
v = visitor_input_test_init(data, buf);
|
||||
visit_type_intList(v, &ilres, NULL, NULL);
|
||||
visit_type_intList(v, NULL, &ilres, NULL);
|
||||
visitor_input_teardown(data, NULL);
|
||||
|
||||
v = visitor_input_test_init(data, buf);
|
||||
visit_type_bool(v, &bres, NULL, NULL);
|
||||
visit_type_bool(v, NULL, &bres, NULL);
|
||||
visitor_input_teardown(data, NULL);
|
||||
|
||||
v = visitor_input_test_init(data, buf);
|
||||
visit_type_number(v, &nres, NULL, NULL);
|
||||
visit_type_number(v, NULL, &nres, NULL);
|
||||
visitor_input_teardown(data, NULL);
|
||||
|
||||
v = visitor_input_test_init(data, buf);
|
||||
sres = NULL;
|
||||
visit_type_str(v, &sres, NULL, NULL);
|
||||
visit_type_str(v, NULL, &sres, NULL);
|
||||
g_free(sres);
|
||||
visitor_input_teardown(data, NULL);
|
||||
|
||||
v = visitor_input_test_init(data, buf);
|
||||
visit_type_EnumOne(v, &eres, NULL, NULL);
|
||||
visit_type_EnumOne(v, NULL, &eres, NULL);
|
||||
visitor_input_teardown(data, NULL);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ static void test_visitor_out_int(TestOutputVisitorData *data,
|
|||
Error *err = NULL;
|
||||
char *str;
|
||||
|
||||
visit_type_int(data->ov, &value, NULL, &err);
|
||||
visit_type_int(data->ov, NULL, &value, &err);
|
||||
g_assert(!err);
|
||||
|
||||
str = string_output_get_string(data->sov);
|
||||
|
@ -90,7 +90,7 @@ static void test_visitor_out_intList(TestOutputVisitorData *data,
|
|||
tmp = &(*tmp)->next;
|
||||
}
|
||||
|
||||
visit_type_intList(data->ov, &list, NULL, &err);
|
||||
visit_type_intList(data->ov, NULL, &list, &err);
|
||||
g_assert(err == NULL);
|
||||
|
||||
str = string_output_get_string(data->sov);
|
||||
|
@ -120,7 +120,7 @@ static void test_visitor_out_bool(TestOutputVisitorData *data,
|
|||
bool value = true;
|
||||
char *str;
|
||||
|
||||
visit_type_bool(data->ov, &value, NULL, &err);
|
||||
visit_type_bool(data->ov, NULL, &value, &err);
|
||||
g_assert(!err);
|
||||
|
||||
str = string_output_get_string(data->sov);
|
||||
|
@ -136,7 +136,7 @@ static void test_visitor_out_number(TestOutputVisitorData *data,
|
|||
Error *err = NULL;
|
||||
char *str;
|
||||
|
||||
visit_type_number(data->ov, &value, NULL, &err);
|
||||
visit_type_number(data->ov, NULL, &value, &err);
|
||||
g_assert(!err);
|
||||
|
||||
str = string_output_get_string(data->sov);
|
||||
|
@ -153,7 +153,7 @@ static void test_visitor_out_string(TestOutputVisitorData *data,
|
|||
Error *err = NULL;
|
||||
char *str;
|
||||
|
||||
visit_type_str(data->ov, &string, NULL, &err);
|
||||
visit_type_str(data->ov, NULL, &string, &err);
|
||||
g_assert(!err);
|
||||
|
||||
str = string_output_get_string(data->sov);
|
||||
|
@ -174,7 +174,7 @@ static void test_visitor_out_no_string(TestOutputVisitorData *data,
|
|||
char *str;
|
||||
|
||||
/* A null string should return "" */
|
||||
visit_type_str(data->ov, &string, NULL, &err);
|
||||
visit_type_str(data->ov, NULL, &string, &err);
|
||||
g_assert(!err);
|
||||
|
||||
str = string_output_get_string(data->sov);
|
||||
|
@ -197,7 +197,7 @@ static void test_visitor_out_enum(TestOutputVisitorData *data,
|
|||
for (i = 0; i < ENUM_ONE__MAX; i++) {
|
||||
char *str_human;
|
||||
|
||||
visit_type_EnumOne(data->ov, &i, "unused", &err);
|
||||
visit_type_EnumOne(data->ov, "unused", &i, &err);
|
||||
g_assert(!err);
|
||||
|
||||
str_human = g_strdup_printf("\"%s\"", EnumOne_lookup[i]);
|
||||
|
@ -222,7 +222,7 @@ static void test_visitor_out_enum_errors(TestOutputVisitorData *data,
|
|||
|
||||
for (i = 0; i < ARRAY_SIZE(bad_values) ; i++) {
|
||||
err = NULL;
|
||||
visit_type_EnumOne(data->ov, &bad_values[i], "unused", &err);
|
||||
visit_type_EnumOne(data->ov, "unused", &bad_values[i], &err);
|
||||
g_assert(err);
|
||||
error_free(err);
|
||||
}
|
||||
|
|
|
@ -101,40 +101,40 @@ static void visit_primitive_type(Visitor *v, void **native, Error **errp)
|
|||
PrimitiveType *pt = *native;
|
||||
switch(pt->type) {
|
||||
case PTYPE_STRING:
|
||||
visit_type_str(v, (char **)&pt->value.string, NULL, errp);
|
||||
visit_type_str(v, NULL, (char **)&pt->value.string, errp);
|
||||
break;
|
||||
case PTYPE_BOOLEAN:
|
||||
visit_type_bool(v, &pt->value.boolean, NULL, errp);
|
||||
visit_type_bool(v, NULL, &pt->value.boolean, errp);
|
||||
break;
|
||||
case PTYPE_NUMBER:
|
||||
visit_type_number(v, &pt->value.number, NULL, errp);
|
||||
visit_type_number(v, NULL, &pt->value.number, errp);
|
||||
break;
|
||||
case PTYPE_INTEGER:
|
||||
visit_type_int(v, &pt->value.integer, NULL, errp);
|
||||
visit_type_int(v, NULL, &pt->value.integer, errp);
|
||||
break;
|
||||
case PTYPE_U8:
|
||||
visit_type_uint8(v, &pt->value.u8, NULL, errp);
|
||||
visit_type_uint8(v, NULL, &pt->value.u8, errp);
|
||||
break;
|
||||
case PTYPE_U16:
|
||||
visit_type_uint16(v, &pt->value.u16, NULL, errp);
|
||||
visit_type_uint16(v, NULL, &pt->value.u16, errp);
|
||||
break;
|
||||
case PTYPE_U32:
|
||||
visit_type_uint32(v, &pt->value.u32, NULL, errp);
|
||||
visit_type_uint32(v, NULL, &pt->value.u32, errp);
|
||||
break;
|
||||
case PTYPE_U64:
|
||||
visit_type_uint64(v, &pt->value.u64, NULL, errp);
|
||||
visit_type_uint64(v, NULL, &pt->value.u64, errp);
|
||||
break;
|
||||
case PTYPE_S8:
|
||||
visit_type_int8(v, &pt->value.s8, NULL, errp);
|
||||
visit_type_int8(v, NULL, &pt->value.s8, errp);
|
||||
break;
|
||||
case PTYPE_S16:
|
||||
visit_type_int16(v, &pt->value.s16, NULL, errp);
|
||||
visit_type_int16(v, NULL, &pt->value.s16, errp);
|
||||
break;
|
||||
case PTYPE_S32:
|
||||
visit_type_int32(v, &pt->value.s32, NULL, errp);
|
||||
visit_type_int32(v, NULL, &pt->value.s32, errp);
|
||||
break;
|
||||
case PTYPE_S64:
|
||||
visit_type_int64(v, &pt->value.s64, NULL, errp);
|
||||
visit_type_int64(v, NULL, &pt->value.s64, errp);
|
||||
break;
|
||||
case PTYPE_EOL:
|
||||
g_assert_not_reached();
|
||||
|
@ -146,40 +146,40 @@ static void visit_primitive_list(Visitor *v, void **native, Error **errp)
|
|||
PrimitiveList *pl = *native;
|
||||
switch (pl->type) {
|
||||
case PTYPE_STRING:
|
||||
visit_type_strList(v, &pl->value.strings, NULL, errp);
|
||||
visit_type_strList(v, NULL, &pl->value.strings, errp);
|
||||
break;
|
||||
case PTYPE_BOOLEAN:
|
||||
visit_type_boolList(v, &pl->value.booleans, NULL, errp);
|
||||
visit_type_boolList(v, NULL, &pl->value.booleans, errp);
|
||||
break;
|
||||
case PTYPE_NUMBER:
|
||||
visit_type_numberList(v, &pl->value.numbers, NULL, errp);
|
||||
visit_type_numberList(v, NULL, &pl->value.numbers, errp);
|
||||
break;
|
||||
case PTYPE_INTEGER:
|
||||
visit_type_intList(v, &pl->value.integers, NULL, errp);
|
||||
visit_type_intList(v, NULL, &pl->value.integers, errp);
|
||||
break;
|
||||
case PTYPE_S8:
|
||||
visit_type_int8List(v, &pl->value.s8_integers, NULL, errp);
|
||||
visit_type_int8List(v, NULL, &pl->value.s8_integers, errp);
|
||||
break;
|
||||
case PTYPE_S16:
|
||||
visit_type_int16List(v, &pl->value.s16_integers, NULL, errp);
|
||||
visit_type_int16List(v, NULL, &pl->value.s16_integers, errp);
|
||||
break;
|
||||
case PTYPE_S32:
|
||||
visit_type_int32List(v, &pl->value.s32_integers, NULL, errp);
|
||||
visit_type_int32List(v, NULL, &pl->value.s32_integers, errp);
|
||||
break;
|
||||
case PTYPE_S64:
|
||||
visit_type_int64List(v, &pl->value.s64_integers, NULL, errp);
|
||||
visit_type_int64List(v, NULL, &pl->value.s64_integers, errp);
|
||||
break;
|
||||
case PTYPE_U8:
|
||||
visit_type_uint8List(v, &pl->value.u8_integers, NULL, errp);
|
||||
visit_type_uint8List(v, NULL, &pl->value.u8_integers, errp);
|
||||
break;
|
||||
case PTYPE_U16:
|
||||
visit_type_uint16List(v, &pl->value.u16_integers, NULL, errp);
|
||||
visit_type_uint16List(v, NULL, &pl->value.u16_integers, errp);
|
||||
break;
|
||||
case PTYPE_U32:
|
||||
visit_type_uint32List(v, &pl->value.u32_integers, NULL, errp);
|
||||
visit_type_uint32List(v, NULL, &pl->value.u32_integers, errp);
|
||||
break;
|
||||
case PTYPE_U64:
|
||||
visit_type_uint64List(v, &pl->value.u64_integers, NULL, errp);
|
||||
visit_type_uint64List(v, NULL, &pl->value.u64_integers, errp);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
|
@ -213,7 +213,7 @@ static void struct_cleanup(TestStruct *ts)
|
|||
|
||||
static void visit_struct(Visitor *v, void **native, Error **errp)
|
||||
{
|
||||
visit_type_TestStruct(v, (TestStruct **)native, NULL, errp);
|
||||
visit_type_TestStruct(v, NULL, (TestStruct **)native, errp);
|
||||
}
|
||||
|
||||
static UserDefTwo *nested_struct_create(void)
|
||||
|
@ -264,12 +264,12 @@ static void nested_struct_cleanup(UserDefTwo *udnp)
|
|||
|
||||
static void visit_nested_struct(Visitor *v, void **native, Error **errp)
|
||||
{
|
||||
visit_type_UserDefTwo(v, (UserDefTwo **)native, NULL, errp);
|
||||
visit_type_UserDefTwo(v, NULL, (UserDefTwo **)native, errp);
|
||||
}
|
||||
|
||||
static void visit_nested_struct_list(Visitor *v, void **native, Error **errp)
|
||||
{
|
||||
visit_type_UserDefTwoList(v, (UserDefTwoList **)native, NULL, errp);
|
||||
visit_type_UserDefTwoList(v, NULL, (UserDefTwoList **)native, errp);
|
||||
}
|
||||
|
||||
/* test cases */
|
||||
|
|
|
@ -1117,7 +1117,7 @@ void qapi_copy_SocketAddress(SocketAddress **p_dest,
|
|||
|
||||
qov = qmp_output_visitor_new();
|
||||
ov = qmp_output_get_visitor(qov);
|
||||
visit_type_SocketAddress(ov, &src, NULL, &error_abort);
|
||||
visit_type_SocketAddress(ov, NULL, &src, &error_abort);
|
||||
obj = qmp_output_get_qobject(qov);
|
||||
qmp_output_visitor_cleanup(qov);
|
||||
if (!obj) {
|
||||
|
@ -1126,7 +1126,7 @@ void qapi_copy_SocketAddress(SocketAddress **p_dest,
|
|||
|
||||
qiv = qmp_input_visitor_new(obj);
|
||||
iv = qmp_input_get_visitor(qiv);
|
||||
visit_type_SocketAddress(iv, p_dest, NULL, &error_abort);
|
||||
visit_type_SocketAddress(iv, NULL, p_dest, &error_abort);
|
||||
qmp_input_visitor_cleanup(qiv);
|
||||
qobject_decref(obj);
|
||||
}
|
||||
|
|
26
vl.c
26
vl.c
|
@ -2819,44 +2819,47 @@ static bool object_create_delayed(const char *type)
|
|||
static int object_create(void *opaque, QemuOpts *opts, Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
Error *err_end = NULL;
|
||||
char *type = NULL;
|
||||
char *id = NULL;
|
||||
void *dummy = NULL;
|
||||
OptsVisitor *ov;
|
||||
QDict *pdict;
|
||||
bool (*type_predicate)(const char *) = opaque;
|
||||
Visitor *v;
|
||||
|
||||
ov = opts_visitor_new(opts);
|
||||
pdict = qemu_opts_to_qdict(opts, NULL);
|
||||
v = opts_get_visitor(ov);
|
||||
|
||||
visit_start_struct(opts_get_visitor(ov), &dummy, NULL, NULL, 0, &err);
|
||||
visit_start_struct(v, NULL, NULL, 0, &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
qdict_del(pdict, "qom-type");
|
||||
visit_type_str(opts_get_visitor(ov), &type, "qom-type", &err);
|
||||
visit_type_str(v, "qom-type", &type, &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
if (!type_predicate(type)) {
|
||||
visit_end_struct(v, NULL);
|
||||
goto out;
|
||||
}
|
||||
|
||||
qdict_del(pdict, "id");
|
||||
visit_type_str(opts_get_visitor(ov), &id, "id", &err);
|
||||
visit_type_str(v, "id", &id, &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
goto out_end;
|
||||
}
|
||||
|
||||
object_add(type, id, pdict, opts_get_visitor(ov), &err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
visit_end_struct(opts_get_visitor(ov), &err);
|
||||
if (err) {
|
||||
object_add(type, id, pdict, v, &err);
|
||||
|
||||
out_end:
|
||||
visit_end_struct(v, &err_end);
|
||||
if (!err && err_end) {
|
||||
qmp_object_del(id, NULL);
|
||||
}
|
||||
error_propagate(&err, err_end);
|
||||
|
||||
out:
|
||||
opts_visitor_cleanup(ov);
|
||||
|
@ -2864,7 +2867,6 @@ out:
|
|||
QDECREF(pdict);
|
||||
g_free(id);
|
||||
g_free(type);
|
||||
g_free(dummy);
|
||||
if (err) {
|
||||
error_report_err(err);
|
||||
return -1;
|
||||
|
|
Loading…
Reference in New Issue