virJSONValueObjectDeflattenWorker: Refactor cleanup

Use automatic memory handling to remove the cleanup section.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Peter Krempa 2020-03-18 16:38:16 +01:00
parent 3ceb6951bd
commit fca6f593c9

View File

@ -2055,11 +2055,10 @@ virJSONValueObjectDeflattenWorker(const char *key,
void *opaque) void *opaque)
{ {
virJSONValuePtr retobj = opaque; virJSONValuePtr retobj = opaque;
virJSONValuePtr newval = NULL; g_autoptr(virJSONValue) newval = NULL;
virJSONValuePtr existobj; virJSONValuePtr existobj;
char **tokens = NULL; VIR_AUTOSTRINGLIST tokens = NULL;
size_t ntokens = 0; size_t ntokens = 0;
int ret = -1;
/* non-nested keys only need to be copied */ /* non-nested keys only need to be copied */
if (!strchr(key, '.')) { if (!strchr(key, '.')) {
@ -2075,46 +2074,42 @@ virJSONValueObjectDeflattenWorker(const char *key,
if (virJSONValueObjectHasKey(retobj, key)) { if (virJSONValueObjectHasKey(retobj, key)) {
virReportError(VIR_ERR_INVALID_ARG, virReportError(VIR_ERR_INVALID_ARG,
_("can't deflatten colliding key '%s'"), key); _("can't deflatten colliding key '%s'"), key);
goto cleanup; return -1;
} }
if (virJSONValueObjectAppend(retobj, key, newval) < 0) if (virJSONValueObjectAppend(retobj, key, newval) < 0)
goto cleanup; return -1;
newval = NULL;
return 0; return 0;
} }
if (!(tokens = virStringSplitCount(key, ".", 2, &ntokens))) if (!(tokens = virStringSplitCount(key, ".", 2, &ntokens)))
goto cleanup; return -1;
if (ntokens != 2) { if (ntokens != 2) {
virReportError(VIR_ERR_INVALID_ARG, virReportError(VIR_ERR_INVALID_ARG,
_("invalid nested value key '%s'"), key); _("invalid nested value key '%s'"), key);
goto cleanup; return -1;
} }
if (!(existobj = virJSONValueObjectGet(retobj, tokens[0]))) { if (!(existobj = virJSONValueObjectGet(retobj, tokens[0]))) {
existobj = virJSONValueNewObject(); existobj = virJSONValueNewObject();
if (virJSONValueObjectAppend(retobj, tokens[0], existobj) < 0) if (virJSONValueObjectAppend(retobj, tokens[0], existobj) < 0)
goto cleanup; return -1;
} else { } else {
if (!virJSONValueIsObject(existobj)) { if (!virJSONValueIsObject(existobj)) {
virReportError(VIR_ERR_INVALID_ARG, "%s", virReportError(VIR_ERR_INVALID_ARG, "%s",
_("mixing nested objects and values is forbidden in " _("mixing nested objects and values is forbidden in "
"JSON deflattening")); "JSON deflattening"));
goto cleanup; return -1;
} }
} }
ret = virJSONValueObjectDeflattenWorker(tokens[1], value, existobj); return virJSONValueObjectDeflattenWorker(tokens[1], value, existobj);
cleanup:
virStringListFreeCount(tokens, ntokens);
virJSONValueFree(newval);
return ret;
} }