From 47bc49879f9e9b1ed15870926228fea470c5f5f9 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Wed, 29 Apr 2020 17:20:07 +0200 Subject: [PATCH] testutilsqemuschema: Use automatic variable clearing where possible MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactor all cleanup to avoid manual clearing, unnecessary labels and return value variables. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- tests/testutilsqemuschema.c | 83 ++++++++++++++----------------------- 1 file changed, 30 insertions(+), 53 deletions(-) diff --git a/tests/testutilsqemuschema.c b/tests/testutilsqemuschema.c index fe8501f3a0..a87060ef12 100644 --- a/tests/testutilsqemuschema.c +++ b/tests/testutilsqemuschema.c @@ -123,36 +123,33 @@ testQEMUSchemaValidateObjectMember(const char *key, void *opaque) { struct testQEMUSchemaValidateObjectMemberData *data = opaque; - virJSONValuePtr keymember = NULL; + g_autoptr(virJSONValue) keymember = NULL; const char *keytype; virJSONValuePtr keyschema = NULL; - int ret = -1; + int rc; virBufferStrcat(data->debug, key, ": ", NULL); /* lookup 'member' entry for key */ if (!(keymember = testQEMUSchemaStealObjectMemberByName(key, data->rootmembers))) { - virBufferAddLit(data->debug, "ERROR: attribute not in schema"); - goto cleanup; + virBufferAddLit(data->debug, "ERROR: attribute not in schema\n"); + return -1; } /* lookup schema entry for keytype */ if (!(keytype = virJSONValueObjectGetString(keymember, "type")) || !(keyschema = virHashLookup(data->schema, keytype))) { - virBufferAsprintf(data->debug, "ERROR: can't find schema for type '%s'", + virBufferAsprintf(data->debug, "ERROR: can't find schema for type '%s'\n", NULLSTR(keytype)); - ret = -2; - goto cleanup; + return -2; } /* recurse */ - ret = testQEMUSchemaValidateRecurse(value, keyschema, data->schema, - data->debug); + rc = testQEMUSchemaValidateRecurse(value, keyschema, data->schema, + data->debug); - cleanup: virBufferAddLit(data->debug, "\n"); - virJSONValueFree(keymember); - return ret; + return rc; } @@ -188,13 +185,12 @@ testQEMUSchemaValidateObjectMergeVariant(virJSONValuePtr root, virBufferPtr debug) { size_t i; - virJSONValuePtr variants = NULL; + g_autoptr(virJSONValue) variants = NULL; virJSONValuePtr variant; virJSONValuePtr variantschema; virJSONValuePtr variantschemamembers; virJSONValuePtr rootmembers; const char *varianttype = NULL; - int ret = -1; if (!(variants = virJSONValueObjectStealArray(root, "variants"))) { virBufferAddLit(debug, "ERROR: missing 'variants' in schema\n"); @@ -214,8 +210,7 @@ testQEMUSchemaValidateObjectMergeVariant(virJSONValuePtr root, if (!varianttype) { virBufferAsprintf(debug, "ERROR: variant '%s' for discriminator '%s' not found\n", variantname, variantfield); - goto cleanup; - + return -1; } if (!(variantschema = virHashLookup(schema, varianttype)) || @@ -223,8 +218,7 @@ testQEMUSchemaValidateObjectMergeVariant(virJSONValuePtr root, virBufferAsprintf(debug, "ERROR: missing schema or schema members for variant '%s'(%s)\n", variantname, varianttype); - ret = -2; - goto cleanup; + return -2; } rootmembers = virJSONValueObjectGetArray(root, "members"); @@ -232,15 +226,10 @@ testQEMUSchemaValidateObjectMergeVariant(virJSONValuePtr root, if (virJSONValueArrayForeachSteal(variantschemamembers, testQEMUSchemaValidateObjectMergeVariantMember, rootmembers) < 0) { - ret = -2; - goto cleanup; + return -2; } - ret = 0; - - cleanup: - virJSONValueFree(variants); - return ret; + return 0; } @@ -269,10 +258,9 @@ testQEMUSchemaValidateObject(virJSONValuePtr obj, { struct testQEMUSchemaValidateObjectMemberData data = { NULL, schema, debug, false }; - virJSONValuePtr localroot = NULL; + g_autoptr(virJSONValue) localroot = NULL; const char *variantfield; const char *variantname; - int ret = -1; if (virJSONValueGetType(obj) != VIR_JSON_TYPE_OBJECT) { virBufferAddLit(debug, "ERROR: not an object"); @@ -283,23 +271,21 @@ testQEMUSchemaValidateObject(virJSONValuePtr obj, virBufferAdjustIndent(debug, 3); /* copy schema */ - if (!(localroot = virJSONValueCopy(root))) { - ret = -2; - goto cleanup; - } + if (!(localroot = virJSONValueCopy(root))) + return -2; /* remove variant */ if ((variantfield = virJSONValueObjectGetString(localroot, "tag"))) { if (!(variantname = virJSONValueObjectGetString(obj, variantfield))) { virBufferAsprintf(debug, "ERROR: missing variant discriminator attribute '%s'\n", variantfield); - goto cleanup; + return -1; } if (testQEMUSchemaValidateObjectMergeVariant(localroot, variantfield, variantname, schema, debug) < 0) - goto cleanup; + return -1; } @@ -308,26 +294,21 @@ testQEMUSchemaValidateObject(virJSONValuePtr obj, if (virJSONValueObjectForeachKeyValue(obj, testQEMUSchemaValidateObjectMember, &data) < 0) - goto cleanup; + return -1; /* check missing mandatory values */ if (virJSONValueArrayForeachSteal(data.rootmembers, testQEMUSchemaValidateObjectMandatoryMember, &data) < 0) { - ret = -2; - goto cleanup; + return -2; } if (data.missingMandatory) - goto cleanup; + return -1; virBufferAdjustIndent(debug, -3); virBufferAddLit(debug, "} OK"); - ret = 0; - - cleanup: - virJSONValueFree(localroot); - return ret; + return 0; } @@ -570,11 +551,11 @@ testQEMUSchemaValidateCommand(const char *command, virJSONValuePtr testQEMUSchemaGetLatest(const char* arch) { - char *capsLatestFile = NULL; - char *capsLatest = NULL; + g_autofree char *capsLatestFile = NULL; + g_autofree char *capsLatest = NULL; char *schemaReply; char *end; - virJSONValuePtr reply = NULL; + g_autoptr(virJSONValue) reply = NULL; virJSONValuePtr schema = NULL; if (!(capsLatestFile = testQemuGetLatestCapsForArch(arch, "replies"))) { @@ -585,14 +566,14 @@ testQEMUSchemaGetLatest(const char* arch) VIR_TEST_DEBUG("replies file: '%s'", capsLatestFile); if (virTestLoadFile(capsLatestFile, &capsLatest) < 0) - goto cleanup; + return NULL; if (!(schemaReply = strstr(capsLatest, "\"execute\": \"query-qmp-schema\"")) || !(schemaReply = strstr(schemaReply, "\n\n")) || !(end = strstr(schemaReply + 2, "\n\n"))) { VIR_TEST_VERBOSE("failed to find reply to 'query-qmp-schema' in '%s'", capsLatestFile); - goto cleanup; + return NULL; } schemaReply += 2; @@ -601,19 +582,15 @@ testQEMUSchemaGetLatest(const char* arch) if (!(reply = virJSONValueFromString(schemaReply))) { VIR_TEST_VERBOSE("failed to parse 'query-qmp-schema' reply from '%s'", capsLatestFile); - goto cleanup; + return NULL; } if (!(schema = virJSONValueObjectStealArray(reply, "return"))) { VIR_TEST_VERBOSE("missing qapi schema data in reply in '%s'", capsLatestFile); - goto cleanup; + return NULL; } - cleanup: - VIR_FREE(capsLatestFile); - VIR_FREE(capsLatest); - virJSONValueFree(reply); return schema; } -- GitLab