]> granicus.if.org Git - jq/commitdiff
Remove redundant code from jv_object_contains
authorStephen Roantree <stroantree@gmail.com>
Thu, 25 Oct 2012 13:29:23 +0000 (06:29 -0700)
committerStephen Roantree <stroantree@gmail.com>
Thu, 25 Oct 2012 13:29:23 +0000 (06:29 -0700)
jv.c

diff --git a/jv.c b/jv.c
index 45df882e4d681a6f781001f0cab631812d931c96..77937a8dde405ebc23af55d8aa164bb10e44fecc 100644 (file)
--- a/jv.c
+++ b/jv.c
@@ -890,33 +890,17 @@ int jv_object_contains(jv a, jv b) {
   assert(jv_get_kind(b) == JV_KIND_OBJECT);
   int r = 1;
 
-  int nkeys = jv_object_length(jv_copy(b));
-  jv* keys = malloc(sizeof(jv) * nkeys);
-  int kidx = 0;
   jv_object_foreach(i, b) {
-    keys[kidx++] = jv_object_iter_key(b, i);
-  }
-
-  for (int i=0; i < nkeys; i++) {
-    jv a_val = jv_object_get(jv_copy(a), jv_copy(keys[i]));
-    jv b_val = jv_object_get(jv_copy(b), jv_copy(keys[i]));
+    jv key = jv_object_iter_key(b, i);
+    jv a_val = jv_object_get(jv_copy(a), jv_copy(key));
+    jv b_val = jv_object_get(jv_copy(b), jv_copy(key));
 
-    if (!(jv_get_kind(a_val) == jv_get_kind(b_val)
-       && jv_contains(jv_copy(a_val), jv_copy(b_val)))) {
-      r = 0;
-    }
-
-    jv_free(a_val);
-    jv_free(b_val);
+    r = jv_contains(a_val, b_val);
+    jv_free(key);
 
     if (!r) break;
   }
 
-  for (int i=0; i < nkeys; i++) {
-    jv_free(keys[i]);
-  }
-  free(keys);
-
   jv_free(a);
   jv_free(b);
   return r;