From c59734e3f6c4373684ff8da71f5a46f96a02b55e Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Wed, 15 Aug 2018 08:39:19 +0200 Subject: [PATCH] qemu: qapi: Split up virQEMUQAPISchemaObjectGetType Split it into a function that returns the whole schema entry so that we can do additional checks and a helper getting the type string from the schema entry. Signed-off-by: Peter Krempa Reviewed-by: John Ferlan --- src/qemu/qemu_qapi.c | 53 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_qapi.c b/src/qemu/qemu_qapi.c index fea6683336..1492c0c757 100644 --- a/src/qemu/qemu_qapi.c +++ b/src/qemu/qemu_qapi.c @@ -33,24 +33,24 @@ VIR_LOG_INIT("qemu.qemu_qapi"); /** - * virQEMUQAPISchemaObjectGetType: + * virQEMUQAPISchemaObjectGet: * @field: name of the object containing the requested type * @name: name of the requested type * @namefield: name of the object property holding @name + * @elem: QAPI schema entry JSON object * * Helper that selects the type of a QMP schema object member or it's variant - * member. Returns the type string on success or NULL on error. + * member. Returns the QMP entry on success or NULL on error. */ -static const char * -virQEMUQAPISchemaObjectGetType(const char *field, - const char *name, - const char *namefield, - virJSONValuePtr elem) +static virJSONValuePtr +virQEMUQAPISchemaObjectGet(const char *field, + const char *name, + const char *namefield, + virJSONValuePtr elem) { virJSONValuePtr arr; virJSONValuePtr cur; const char *curname; - const char *type; size_t i; if (!(arr = virJSONValueObjectGetArray(elem, field))) @@ -58,18 +58,49 @@ virQEMUQAPISchemaObjectGetType(const char *field, for (i = 0; i < virJSONValueArraySize(arr); i++) { if (!(cur = virJSONValueArrayGet(arr, i)) || - !(curname = virJSONValueObjectGetString(cur, namefield)) || - !(type = virJSONValueObjectGetString(cur, "type"))) + !(curname = virJSONValueObjectGetString(cur, namefield))) continue; if (STREQ(name, curname)) - return type; + return cur; } return NULL; } +static const char * +virQEMUQAPISchemaTypeFromObject(virJSONValuePtr obj) +{ + if (!obj) + return NULL; + + return virJSONValueObjectGetString(obj, "type"); +} + + +/** + * virQEMUQAPISchemaObjectGetType: + * @field: name of the object containing the requested type + * @name: name of the requested type + * @namefield: name of the object property holding @name + * @elem: QAPI schema entry JSON object + * + * Helper that selects the type of a QMP schema object member or it's variant + * member. Returns the type string on success or NULL on error. + */ +static const char * +virQEMUQAPISchemaObjectGetType(const char *field, + const char *name, + const char *namefield, + virJSONValuePtr elem) +{ + virJSONValuePtr obj = virQEMUQAPISchemaObjectGet(field, name, namefield, elem); + + return virQEMUQAPISchemaTypeFromObject(obj); +} + + static virJSONValuePtr virQEMUQAPISchemaTraverse(const char *baseName, char **query, -- GitLab