[PATCH 2/6] virJSONValueObjectDeflattenWorker: Refactor cleanup

Peter Krempa pkrempa at redhat.com
Thu Mar 19 19:35:59 UTC 2020


Use automatic memory handling to remove the cleanup section.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/util/virjson.c | 27 +++++++++++----------------
 1 file changed, 11 insertions(+), 16 deletions(-)

diff --git a/src/util/virjson.c b/src/util/virjson.c
index 2d7368b0b6..f308927fa0 100644
--- a/src/util/virjson.c
+++ b/src/util/virjson.c
@@ -2055,11 +2055,10 @@ virJSONValueObjectDeflattenWorker(const char *key,
                                   void *opaque)
 {
     virJSONValuePtr retobj = opaque;
-    virJSONValuePtr newval = NULL;
+    g_autoptr(virJSONValue) newval = NULL;
     virJSONValuePtr existobj;
-    char **tokens = NULL;
+    VIR_AUTOSTRINGLIST tokens = NULL;
     size_t ntokens = 0;
-    int ret = -1;

     /* non-nested keys only need to be copied */
     if (!strchr(key, '.')) {
@@ -2075,46 +2074,42 @@ virJSONValueObjectDeflattenWorker(const char *key,
         if (virJSONValueObjectHasKey(retobj, key)) {
             virReportError(VIR_ERR_INVALID_ARG,
                            _("can't deflatten colliding key '%s'"), key);
-            goto cleanup;
+            return -1;
         }

         if (virJSONValueObjectAppend(retobj, key, newval) < 0)
-            goto cleanup;
+            return -1;
+
+        newval = NULL;

         return 0;
     }

     if (!(tokens = virStringSplitCount(key, ".", 2, &ntokens)))
-        goto cleanup;
+        return -1;

     if (ntokens != 2) {
         virReportError(VIR_ERR_INVALID_ARG,
                        _("invalid nested value key '%s'"), key);
-        goto cleanup;
+        return -1;
     }

     if (!(existobj = virJSONValueObjectGet(retobj, tokens[0]))) {
         existobj = virJSONValueNewObject();

         if (virJSONValueObjectAppend(retobj, tokens[0], existobj) < 0)
-            goto cleanup;
+            return -1;

     } else {
         if (!virJSONValueIsObject(existobj)) {
             virReportError(VIR_ERR_INVALID_ARG, "%s",
                            _("mixing nested objects and values is forbidden in "
                              "JSON deflattening"));
-            goto cleanup;
+            return -1;
         }
     }

-    ret = virJSONValueObjectDeflattenWorker(tokens[1], value, existobj);
-
- cleanup:
-    virStringListFreeCount(tokens, ntokens);
-    virJSONValueFree(newval);
-
-    return ret;
+    return virJSONValueObjectDeflattenWorker(tokens[1], value, existobj);
 }


-- 
2.24.1




More information about the libvir-list mailing list