static void visit_type_GuestIpAddress_fields(Visitor *m, GuestIpAddress ** obj, Error **errp) { Error *err = NULL; visit_type_str(m, obj ? &(*obj)->ip_address : NULL, "ip-address", &err); visit_type_GuestIpAddressType(m, obj ? &(*obj)->ip_address_type : NULL, "ip-address-type", &err); visit_type_int(m, obj ? &(*obj)->prefix : NULL, "prefix", &err); error_propagate(errp, err); }
static void xics_prop_get_nr_servers(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) { XICSState *icp = XICS_COMMON(obj); int64_t value = icp->nr_servers; visit_type_int(v, name, &value, errp); }
static void machine_get_kvm_shadow_mem(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { MachineState *ms = MACHINE(obj); int64_t value = ms->kvm_shadow_mem; visit_type_int(v, &value, name, errp); }
static void machine_get_phandle_start(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { MachineState *ms = MACHINE(obj); int64_t value = ms->phandle_start; visit_type_int(v, &value, name, errp); }
static void visit_type_GuestFileRead_fields(Visitor *m, GuestFileRead ** obj, Error **errp) { Error *err = NULL; visit_type_int(m, obj ? &(*obj)->count : NULL, "count", &err); visit_type_str(m, obj ? &(*obj)->buf_b64 : NULL, "buf-b64", &err); visit_type_bool(m, obj ? &(*obj)->eof : NULL, "eof", &err); error_propagate(errp, err); }
static void apic_common_get_id(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) { APICCommonState *s = APIC_COMMON(obj); int64_t value; value = s->apicbase & MSR_IA32_APICBASE_EXTD ? s->initial_apic_id : s->id; visit_type_int(v, name, &value, errp); }
static void get_int32(DeviceState *dev, Visitor *v, void *opaque, const char *name, Error **errp) { Property *prop = opaque; int32_t *ptr = qdev_get_prop_ptr(dev, prop); int64_t value; value = *ptr; visit_type_int(v, &value, name, errp); }
void visit_type_PciMemoryRegion(Visitor *m, PciMemoryRegion ** obj, const char *name, Error **errp) { visit_start_struct(m, (void **)obj, "PciMemoryRegion", name, sizeof(PciMemoryRegion), errp); visit_type_int(m, (obj && *obj) ? &(*obj)->bar : NULL, "bar", errp); visit_type_str(m, (obj && *obj) ? &(*obj)->type : NULL, "type", errp); visit_type_int(m, (obj && *obj) ? &(*obj)->address : NULL, "address", errp); visit_type_int(m, (obj && *obj) ? &(*obj)->size : NULL, "size", errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_prefetch : NULL, "prefetch", errp); if ((*obj)->has_prefetch) { visit_type_bool(m, (obj && *obj) ? &(*obj)->prefetch : NULL, "prefetch", errp); } visit_end_optional(m, errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_mem_type_64 : NULL, "mem_type_64", errp); if ((*obj)->has_mem_type_64) { visit_type_bool(m, (obj && *obj) ? &(*obj)->mem_type_64 : NULL, "mem_type_64", errp); } visit_end_optional(m, errp); visit_end_struct(m, errp); }
static void get_vlan(DeviceState *dev, Visitor *v, void *opaque, const char *name, Error **errp) { Property *prop = opaque; VLANState **ptr = qdev_get_prop_ptr(dev, prop); int64_t id; id = *ptr ? (*ptr)->id : -1; visit_type_int(v, &id, name, errp); }
static void test_visitor_in_wrong_type(TestInputVisitorData *data, const void *unused) { TestStruct *p = NULL; Visitor *v; strList *q = NULL; int64_t i; Error *err = NULL; /* Make sure arrays and structs cannot be confused */ v = visitor_input_test_init(data, "[]"); visit_type_TestStruct(v, &p, NULL, &err); error_free_or_abort(&err); g_assert(!p); v = visitor_input_test_init(data, "{}"); visit_type_strList(v, &q, NULL, &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); error_free_or_abort(&err); g_assert(!p); v = visitor_input_test_init(data, "{}"); visit_type_int(v, &i, NULL, &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); error_free_or_abort(&err); assert(!q); v = visitor_input_test_init(data, "[]"); visit_type_int(v, &i, NULL, &err); error_free_or_abort(&err); }
static void get_int8(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { DeviceState *dev = DEVICE(obj); Property *prop = opaque; int8_t *ptr = qdev_get_prop_ptr(dev, prop); int64_t value; value = *ptr; visit_type_int(v, &value, name, errp); }
static void test_visitor_in_int(TestInputVisitorData *data, const void *unused) { int64_t res = 0, value = -42; Error *err = NULL; Visitor *v; v = visitor_input_test_init(data, "-42"); visit_type_int(v, NULL, &res, &err); g_assert(!err); g_assert_cmpint(res, ==, value); visitor_input_teardown(data, unused); v = visitor_input_test_init(data, "not an int"); visit_type_int(v, NULL, &res, &err); error_free_or_abort(&err); }
static void visit_type_TestStruct(Visitor *v, TestStruct **obj, const char *name, Error **errp) { visit_start_struct(v, (void **)obj, NULL, name, sizeof(TestStruct), errp); visit_type_int(v, &(*obj)->integer, "integer", errp); visit_type_bool(v, &(*obj)->boolean, "boolean", errp); visit_type_str(v, &(*obj)->string, "string", errp); visit_end_struct(v, errp); }
static void test_visitor_in_int(TestInputVisitorData *data, const void *unused) { int64_t res = 0, value = -42; Visitor *v; v = visitor_input_test_init(data, "%" PRId64, value); visit_type_int(v, &res, NULL, &error_abort); g_assert_cmpint(res, ==, value); }
static void pc_dimm_get_size(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { int64_t value; MemoryRegion *mr; PCDIMMDevice *dimm = PC_DIMM(obj); mr = host_memory_backend_get_memory(dimm->hostmem, errp); value = memory_region_size(mr); visit_type_int(v, &value, name, errp); }
/* Try to crash the visitors */ static void test_visitor_in_fuzz(TestInputVisitorData *data, const void *unused) { int64_t ires; intList *ilres; bool bres; double nres; char *sres; EnumOne eres; Visitor *v; unsigned int i; char buf[10000]; for (i = 0; i < 100; i++) { unsigned int j; j = g_test_rand_int_range(0, sizeof(buf) - 1); buf[j] = '\0'; if (j != 0) { for (j--; j != 0; j--) { buf[j - 1] = (char)g_test_rand_int_range(0, 256); } } v = visitor_input_test_init(data, buf); visit_type_int(v, NULL, &ires, NULL); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); visit_type_intList(v, NULL, &ilres, NULL); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); visit_type_bool(v, NULL, &bres, NULL); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); 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, NULL, &sres, NULL); g_free(sres); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); visit_type_EnumOne(v, NULL, &eres, NULL); visitor_input_teardown(data, NULL); } }
static void test_visitor_out_int(TestOutputVisitorData *data, const void *unused) { int64_t value = -42; QObject *obj; visit_type_int(data->ov, NULL, &value, &error_abort); obj = visitor_get(data); g_assert(qobject_type(obj) == QTYPE_QINT); g_assert_cmpint(qint_get_int(qobject_to_qint(obj)), ==, value); }
void visit_type_PciDeviceInfo(Visitor *m, PciDeviceInfo ** obj, const char *name, Error **errp) { visit_start_struct(m, (void **)obj, "PciDeviceInfo", name, sizeof(PciDeviceInfo), errp); visit_type_int(m, (obj && *obj) ? &(*obj)->bus : NULL, "bus", errp); visit_type_int(m, (obj && *obj) ? &(*obj)->slot : NULL, "slot", errp); visit_type_int(m, (obj && *obj) ? &(*obj)->function : NULL, "function", errp); visit_start_struct(m, NULL, "", "class_info", 0, errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->class_info.has_desc : NULL, "desc", errp); if ((*obj)->class_info.has_desc) { visit_type_str(m, (obj && *obj) ? &(*obj)->class_info.desc : NULL, "desc", errp); } visit_end_optional(m, errp); visit_type_int(m, (obj && *obj) ? &(*obj)->class_info.class : NULL, "class", errp); visit_end_struct(m, errp); visit_start_struct(m, NULL, "", "id", 0, errp); visit_type_int(m, (obj && *obj) ? &(*obj)->id.device : NULL, "device", errp); visit_type_int(m, (obj && *obj) ? &(*obj)->id.vendor : NULL, "vendor", errp); visit_end_struct(m, errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_irq : NULL, "irq", errp); if ((*obj)->has_irq) { visit_type_int(m, (obj && *obj) ? &(*obj)->irq : NULL, "irq", errp); } visit_end_optional(m, errp); visit_type_str(m, (obj && *obj) ? &(*obj)->qdev_id : NULL, "qdev_id", errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_pci_bridge : NULL, "pci_bridge", errp); if ((*obj)->has_pci_bridge) { visit_type_PciBridgeInfo(m, (obj && *obj) ? &(*obj)->pci_bridge : NULL, "pci_bridge", errp); } visit_end_optional(m, errp); visit_type_PciMemoryRegionList(m, (obj && *obj) ? &(*obj)->regions : NULL, "regions", errp); visit_end_struct(m, errp); }
void visit_type_CpuInfo(Visitor *m, CpuInfo ** obj, const char *name, Error **errp) { visit_start_struct(m, (void **)obj, "CpuInfo", name, sizeof(CpuInfo), errp); visit_type_int(m, (obj && *obj) ? &(*obj)->CPU : NULL, "CPU", errp); visit_type_bool(m, (obj && *obj) ? &(*obj)->current : NULL, "current", errp); visit_type_bool(m, (obj && *obj) ? &(*obj)->halted : NULL, "halted", errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_pc : NULL, "pc", errp); if ((*obj)->has_pc) { visit_type_int(m, (obj && *obj) ? &(*obj)->pc : NULL, "pc", errp); } visit_end_optional(m, errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_nip : NULL, "nip", errp); if ((*obj)->has_nip) { visit_type_int(m, (obj && *obj) ? &(*obj)->nip : NULL, "nip", errp); } visit_end_optional(m, errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_npc : NULL, "npc", errp); if ((*obj)->has_npc) { visit_type_int(m, (obj && *obj) ? &(*obj)->npc : NULL, "npc", errp); } visit_end_optional(m, errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_PC : NULL, "PC", errp); if ((*obj)->has_PC) { visit_type_int(m, (obj && *obj) ? &(*obj)->PC : NULL, "PC", errp); } visit_end_optional(m, errp); visit_type_int(m, (obj && *obj) ? &(*obj)->thread_id : NULL, "thread_id", errp); visit_end_struct(m, errp); }
static void set_int64(DeviceState *dev, Visitor *v, void *opaque, const char *name, Error **errp) { Property *prop = opaque; int64_t *ptr = qdev_get_prop_ptr(dev, prop); if (dev->state != DEV_STATE_CREATED) { error_set(errp, QERR_PERMISSION_DENIED); return; } visit_type_int(v, ptr, name, errp); }
static void test_visitor_in_int(TestInputVisitorData *data, const void *unused) { int64_t res = 0, value = -42; Error *errp = NULL; Visitor *v; v = visitor_input_test_init(data, "%d", value); visit_type_int(v, &res, NULL, &errp); g_assert(!error_is_set(&errp)); g_assert_cmpint(res, ==, value); }
static void visit_type_GuestLogicalProcessor_fields(Visitor *m, GuestLogicalProcessor ** obj, Error **errp) { Error *err = NULL; visit_type_int(m, obj ? &(*obj)->logical_id : NULL, "logical-id", &err); visit_type_bool(m, obj ? &(*obj)->online : NULL, "online", &err); visit_start_optional(m, obj ? &(*obj)->has_can_offline : NULL, "can-offline", &err); if (obj && (*obj)->has_can_offline) { visit_type_bool(m, obj ? &(*obj)->can_offline : NULL, "can-offline", &err); } visit_end_optional(m, &err); error_propagate(errp, err); }
static void pc_dimm_get_size(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) { int64_t value; MemoryRegion *mr; PCDIMMDevice *dimm = PC_DIMM(obj); PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(obj); mr = ddc->get_memory_region(dimm); value = memory_region_size(mr); visit_type_int(v, name, &value, errp); }
static void test_visitor_out_int(TestOutputVisitorData *data, const void *unused) { int64_t value = -42; int64_t val; QNum *qnum; visit_type_int(data->ov, NULL, &value, &error_abort); qnum = qobject_to_qnum(visitor_get(data)); g_assert(qnum); g_assert(qnum_get_try_int(qnum, &val)); g_assert_cmpint(val, ==, value); }
static void test_visitor_out_int(TestOutputVisitorData *data, const void *unused) { int64_t value = 42; Error *err = NULL; char *str; visit_type_int(data->ov, &value, NULL, &err); g_assert(!err); str = string_output_get_string(data->sov); g_assert(str != NULL); if (data->human) { g_assert_cmpstr(str, ==, "42 (0x2a)"); } else {
void visit_type_SpiceInfo(Visitor *m, SpiceInfo ** obj, const char *name, Error **errp) { visit_start_struct(m, (void **)obj, "SpiceInfo", name, sizeof(SpiceInfo), errp); visit_type_bool(m, (obj && *obj) ? &(*obj)->enabled : NULL, "enabled", errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_host : NULL, "host", errp); if ((*obj)->has_host) { visit_type_str(m, (obj && *obj) ? &(*obj)->host : NULL, "host", errp); } visit_end_optional(m, errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_port : NULL, "port", errp); if ((*obj)->has_port) { visit_type_int(m, (obj && *obj) ? &(*obj)->port : NULL, "port", errp); } visit_end_optional(m, errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_tls_port : NULL, "tls-port", errp); if ((*obj)->has_tls_port) { visit_type_int(m, (obj && *obj) ? &(*obj)->tls_port : NULL, "tls-port", errp); } visit_end_optional(m, errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_auth : NULL, "auth", errp); if ((*obj)->has_auth) { visit_type_str(m, (obj && *obj) ? &(*obj)->auth : NULL, "auth", errp); } visit_end_optional(m, errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_compiled_version : NULL, "compiled-version", errp); if ((*obj)->has_compiled_version) { visit_type_str(m, (obj && *obj) ? &(*obj)->compiled_version : NULL, "compiled-version", errp); } visit_end_optional(m, errp); visit_start_optional(m, (obj && *obj) ? &(*obj)->has_channels : NULL, "channels", errp); if ((*obj)->has_channels) { visit_type_SpiceChannelList(m, (obj && *obj) ? &(*obj)->channels : NULL, "channels", errp); } visit_end_optional(m, errp); visit_end_struct(m, errp); }
static void machine_set_kvm_shadow_mem(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { MachineState *ms = MACHINE(obj); Error *error = NULL; int64_t value; visit_type_int(v, &value, name, &error); if (error) { error_propagate(errp, error); return; } ms->kvm_shadow_mem = value; }
static void test_visitor_in_int_overflow(TestInputVisitorData *data, const void *unused) { int64_t res = 0; Error *err = NULL; Visitor *v; /* this will overflow a Qint/int64, so should be deserialized into * a QFloat/double field instead, leading to an error if we pass it * to visit_type_int. confirm this. */ v = visitor_input_test_init(data, "%f", DBL_MAX); visit_type_int(v, &res, NULL, &err); error_free_or_abort(&err); }
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, name, &value, &local_err); if (local_err) { error_propagate(errp, local_err); return; } if (value < 0) { error_setg(errp, "timer value must be greater than zero"); return; } if (value > UINT32_MAX) { error_setg(errp, "timer value is too big"); return; } if (value == s->stats_poll_interval) { return; } if (value == 0) { /* timer=0 disables the timer */ balloon_stats_destroy_timer(s); return; } if (balloon_stats_enabled(s)) { /* timer interval change */ s->stats_poll_interval = value; balloon_stats_change_timer(s, value); return; } /* create a new timer */ g_assert(s->stats_timer == NULL); s->stats_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL, balloon_stats_poll_cb, s); s->stats_poll_interval = value; balloon_stats_change_timer(s, 0); }
static void test_visitor_out_int(TestOutputVisitorData *data, const void *unused) { int64_t value = -42; Error *errp = NULL; QObject *obj; visit_type_int(data->ov, &value, NULL, &errp); g_assert(error_is_set(&errp) == 0); obj = qmp_output_get_qobject(data->qov); g_assert(obj != NULL); g_assert(qobject_type(obj) == QTYPE_QINT); g_assert_cmpint(qint_get_int(qobject_to_qint(obj)), ==, value); qobject_decref(obj); }