diff --git a/msvc/unicorn/qapi-types.c b/msvc/unicorn/qapi-types.c index d81da36a..bdbb2ab3 100644 --- a/msvc/unicorn/qapi-types.c +++ b/msvc/unicorn/qapi-types.c @@ -135,6 +135,21 @@ void qapi_free_int8List(int8List *obj) qapi_dealloc_visitor_cleanup(md); } +void qapi_free_sizeList(sizeList *obj) +{ + QapiDeallocVisitor *md; + Visitor *v; + + if (!obj) { + return; + } + + md = qapi_dealloc_visitor_new(); + v = qapi_dealloc_get_visitor(md); + visit_type_sizeList(v, &obj, NULL, NULL); + qapi_dealloc_visitor_cleanup(md); +} + void qapi_free_uint64List(uint64List *obj) { QapiDeallocVisitor *md; diff --git a/msvc/unicorn/qapi-types.h b/msvc/unicorn/qapi-types.h index ca8a2533..74c23106 100644 --- a/msvc/unicorn/qapi-types.h +++ b/msvc/unicorn/qapi-types.h @@ -77,6 +77,15 @@ typedef struct int8List struct int8List *next; } int8List; +typedef struct sizeList +{ + union { + uint64_t value; + uint64_t padding; + }; + struct sizeList *next; +} sizeList; + typedef struct uint64List { union { @@ -199,6 +208,7 @@ void qapi_free_intList(intList *obj); void qapi_free_uint8List(uint8List *obj); void qapi_free_numberList(numberList *obj); void qapi_free_int8List(int8List *obj); +void qapi_free_sizeList(sizeList *obj); void qapi_free_uint64List(uint64List *obj); void qapi_free_uint16List(uint16List *obj); void qapi_free_boolList(boolList *obj); diff --git a/msvc/unicorn/qapi-visit.c b/msvc/unicorn/qapi-visit.c index 472098f7..dd19f20d 100644 --- a/msvc/unicorn/qapi-visit.c +++ b/msvc/unicorn/qapi-visit.c @@ -160,6 +160,30 @@ out: error_propagate(errp, err); } +void visit_type_sizeList(Visitor *m, sizeList **obj, const char *name, Error **errp) +{ + Error *err = NULL; + GenericList *i, **prev; + + visit_start_list(m, name, &err); + if (err) { + goto out; + } + + for (prev = (GenericList **)obj; + !err && (i = visit_next_list(m, prev)) != NULL; + prev = &i) { + sizeList *native_i = (sizeList *)i; + visit_type_size(m, &native_i->value, NULL, &err); + } + + error_propagate(errp, err); + err = NULL; + visit_end_list(m); +out: + error_propagate(errp, err); +} + void visit_type_uint64List(Visitor *m, uint64List **obj, const char *name, Error **errp) { Error *err = NULL; diff --git a/msvc/unicorn/qapi-visit.h b/msvc/unicorn/qapi-visit.h index 71f91a91..7639e855 100644 --- a/msvc/unicorn/qapi-visit.h +++ b/msvc/unicorn/qapi-visit.h @@ -29,6 +29,7 @@ void visit_type_intList(Visitor *m, intList **obj, const char *name, Error **err void visit_type_uint8List(Visitor *m, uint8List **obj, const char *name, Error **errp); void visit_type_numberList(Visitor *m, numberList **obj, const char *name, Error **errp); void visit_type_int8List(Visitor *m, int8List **obj, const char *name, Error **errp); +void visit_type_sizeList(Visitor *m, sizeList **obj, const char *name, Error **errp); void visit_type_uint64List(Visitor *m, uint64List **obj, const char *name, Error **errp); void visit_type_uint16List(Visitor *m, uint16List **obj, const char *name, Error **errp); void visit_type_boolList(Visitor *m, boolList **obj, const char *name, Error **errp); diff --git a/qemu/scripts/qapi.py b/qemu/scripts/qapi.py index 2b5775d2..d4703476 100644 --- a/qemu/scripts/qapi.py +++ b/qemu/scripts/qapi.py @@ -29,6 +29,7 @@ builtin_types = { 'uint16': 'QTYPE_QINT', 'uint32': 'QTYPE_QINT', 'uint64': 'QTYPE_QINT', + 'size': 'QTYPE_QINT', } def error_path(parent):