diff options
| -rw-r--r-- | hw/core/qdev-properties.c | 33 | ||||
| -rw-r--r-- | pc-bios/bios-256k.bin | bin | 262144 -> 262144 bytes | |||
| -rw-r--r-- | pc-bios/bios-microvm.bin | bin | 131072 -> 131072 bytes | |||
| -rw-r--r-- | pc-bios/bios.bin | bin | 131072 -> 131072 bytes | |||
| -rw-r--r-- | pc-bios/vgabios-ati.bin | bin | 39424 -> 39424 bytes | |||
| -rw-r--r-- | pc-bios/vgabios-bochs-display.bin | bin | 28672 -> 28672 bytes | |||
| -rw-r--r-- | pc-bios/vgabios-cirrus.bin | bin | 38912 -> 38912 bytes | |||
| -rw-r--r-- | pc-bios/vgabios-qxl.bin | bin | 39424 -> 39424 bytes | |||
| -rw-r--r-- | pc-bios/vgabios-ramfb.bin | bin | 28672 -> 28672 bytes | |||
| -rw-r--r-- | pc-bios/vgabios-stdvga.bin | bin | 39424 -> 39424 bytes | |||
| -rw-r--r-- | pc-bios/vgabios-virtio.bin | bin | 39424 -> 39424 bytes | |||
| -rw-r--r-- | pc-bios/vgabios-vmware.bin | bin | 39424 -> 39424 bytes | |||
| -rw-r--r-- | pc-bios/vgabios.bin | bin | 38912 -> 38912 bytes | |||
| -rw-r--r-- | qapi/string-output-visitor.c | 24 | ||||
| m--------- | roms/seabios | 0 |
15 files changed, 46 insertions, 11 deletions
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index 91632f7be9..840006e953 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -689,23 +689,36 @@ static void get_prop_array(Object *obj, Visitor *v, const char *name, Property *prop = opaque; uint32_t *alenptr = object_field_prop_ptr(obj, prop); void **arrayptr = (void *)obj + prop->arrayoffset; - char *elem = *arrayptr; - GenericList *list; - const size_t list_elem_size = sizeof(*list) + prop->arrayfieldsize; + char *elemptr = *arrayptr; + ArrayElementList *list = NULL, *elem; + ArrayElementList **tail = &list; + const size_t size = sizeof(*list); int i; bool ok; - if (!visit_start_list(v, name, &list, list_elem_size, errp)) { + /* At least the string output visitor needs a real list */ + for (i = 0; i < *alenptr; i++) { + elem = g_new0(ArrayElementList, 1); + elem->value = elemptr; + elemptr += prop->arrayfieldsize; + + *tail = elem; + tail = &elem->next; + } + + if (!visit_start_list(v, name, (GenericList **) &list, size, errp)) { return; } - for (i = 0; i < *alenptr; i++) { - Property elem_prop = array_elem_prop(obj, prop, name, elem); + elem = list; + while (elem) { + Property elem_prop = array_elem_prop(obj, prop, name, elem->value); prop->arrayinfo->get(obj, v, NULL, &elem_prop, errp); if (*errp) { goto out_obj; } - elem += prop->arrayfieldsize; + elem = (ArrayElementList *) visit_next_list(v, (GenericList*) elem, + size); } /* visit_check_list() can only fail for input visitors */ @@ -714,6 +727,12 @@ static void get_prop_array(Object *obj, Visitor *v, const char *name, out_obj: visit_end_list(v, (void**) &list); + + while (list) { + elem = list; + list = elem->next; + g_free(elem); + } } static void default_prop_array(ObjectProperty *op, const Property *prop) diff --git a/pc-bios/bios-256k.bin b/pc-bios/bios-256k.bin index 8d1dc0dff3..48c3707d55 100644 --- a/pc-bios/bios-256k.bin +++ b/pc-bios/bios-256k.bin Binary files differdiff --git a/pc-bios/bios-microvm.bin b/pc-bios/bios-microvm.bin index 1a96d55862..c98351e734 100644 --- a/pc-bios/bios-microvm.bin +++ b/pc-bios/bios-microvm.bin Binary files differdiff --git a/pc-bios/bios.bin b/pc-bios/bios.bin index a4e7fef336..7e2d062af6 100644 --- a/pc-bios/bios.bin +++ b/pc-bios/bios.bin Binary files differdiff --git a/pc-bios/vgabios-ati.bin b/pc-bios/vgabios-ati.bin index 27b785e3f8..e10cd263b8 100644 --- a/pc-bios/vgabios-ati.bin +++ b/pc-bios/vgabios-ati.bin Binary files differdiff --git a/pc-bios/vgabios-bochs-display.bin b/pc-bios/vgabios-bochs-display.bin index 598a3db4f2..416036d986 100644 --- a/pc-bios/vgabios-bochs-display.bin +++ b/pc-bios/vgabios-bochs-display.bin Binary files differdiff --git a/pc-bios/vgabios-cirrus.bin b/pc-bios/vgabios-cirrus.bin index 2b0202928f..4ffaa43d6f 100644 --- a/pc-bios/vgabios-cirrus.bin +++ b/pc-bios/vgabios-cirrus.bin Binary files differdiff --git a/pc-bios/vgabios-qxl.bin b/pc-bios/vgabios-qxl.bin index ebd6abe498..1b7a3831ef 100644 --- a/pc-bios/vgabios-qxl.bin +++ b/pc-bios/vgabios-qxl.bin Binary files differdiff --git a/pc-bios/vgabios-ramfb.bin b/pc-bios/vgabios-ramfb.bin index ab2f20d87b..dba6cb8e32 100644 --- a/pc-bios/vgabios-ramfb.bin +++ b/pc-bios/vgabios-ramfb.bin Binary files differdiff --git a/pc-bios/vgabios-stdvga.bin b/pc-bios/vgabios-stdvga.bin index 84588dd25d..0d541c5530 100644 --- a/pc-bios/vgabios-stdvga.bin +++ b/pc-bios/vgabios-stdvga.bin Binary files differdiff --git a/pc-bios/vgabios-virtio.bin b/pc-bios/vgabios-virtio.bin index 41308e0caf..2ce3557624 100644 --- a/pc-bios/vgabios-virtio.bin +++ b/pc-bios/vgabios-virtio.bin Binary files differdiff --git a/pc-bios/vgabios-vmware.bin b/pc-bios/vgabios-vmware.bin index d382d0af94..b7cab15593 100644 --- a/pc-bios/vgabios-vmware.bin +++ b/pc-bios/vgabios-vmware.bin Binary files differdiff --git a/pc-bios/vgabios.bin b/pc-bios/vgabios.bin index 62799d0113..ee748f6599 100644 --- a/pc-bios/vgabios.bin +++ b/pc-bios/vgabios.bin Binary files differdiff --git a/qapi/string-output-visitor.c b/qapi/string-output-visitor.c index 71ddc92b7b..c0cb72dbe4 100644 --- a/qapi/string-output-visitor.c +++ b/qapi/string-output-visitor.c @@ -74,11 +74,27 @@ static StringOutputVisitor *to_sov(Visitor *v) static void string_output_set(StringOutputVisitor *sov, char *string) { - if (sov->string) { - g_string_free(sov->string, true); + switch (sov->list_mode) { + case LM_STARTED: + sov->list_mode = LM_IN_PROGRESS; + /* fall through */ + case LM_NONE: + if (sov->string) { + g_string_free(sov->string, true); + } + sov->string = g_string_new(string); + g_free(string); + break; + + case LM_IN_PROGRESS: + case LM_END: + g_string_append(sov->string, ", "); + g_string_append(sov->string, string); + break; + + default: + abort(); } - sov->string = g_string_new(string); - g_free(string); } static void string_output_append(StringOutputVisitor *sov, int64_t a) diff --git a/roms/seabios b/roms/seabios -Subproject 1e1da7a963007d03a4e0e9a9e0ff17990bb1608 +Subproject a6ed6b701f0a57db0569ab98b0661c12a6ec3ff |