diff options
author | Garrett Regier <garrettregier@gmail.com> | 2016-10-20 19:44:09 -0700 |
---|---|---|
committer | Garrett Regier <garrettregier@gmail.com> | 2017-06-16 17:16:32 -0700 |
commit | d78ad648942637fb9212d1d93670509d4c7f687b (patch) | |
tree | e1e2fe26f63d2d12446fee7aa291f1363e84ec6d /json-glib/json-gvariant.c | |
parent | 7b3c405df41c0b6f6fe58fdb05c922614f08c4c4 (diff) | |
download | json-glib-d78ad648942637fb9212d1d93670509d4c7f687b.tar.gz |
core: Avoid json_object_get_members()
Use JsonObject's private members_ordered
GQueue instead. This avoids a g_list_copy().
https://bugzilla.gnome.org/show_bug.cgi?id=773504
Diffstat (limited to 'json-glib/json-gvariant.c')
-rw-r--r-- | json-glib/json-gvariant.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/json-glib/json-gvariant.c b/json-glib/json-gvariant.c index 58694de..8185cac 100644 --- a/json-glib/json-gvariant.c +++ b/json-glib/json-gvariant.c @@ -31,6 +31,7 @@ #include "json-generator.h" #include "json-parser.h" +#include "json-types-private.h" /** * SECTION:json-gvariant @@ -947,8 +948,7 @@ json_to_gvariant_dict_entry (JsonNode *json_node, gchar *value_signature; const gchar *tmp_signature; - GList *member; - + GQueue *members; const gchar *json_member; JsonNode *json_value; GVariant *variant_member; @@ -970,9 +970,8 @@ json_to_gvariant_dict_entry (JsonNode *json_node, &key_signature, &value_signature); - member = json_object_get_members (obj); - - json_member = (const gchar *) member->data; + members = json_object_get_members_internal (obj); + json_member = (const gchar *) members->head->data; variant_member = gvariant_simple_from_string (json_member, key_signature[0], error); @@ -998,7 +997,6 @@ json_to_gvariant_dict_entry (JsonNode *json_node, } } - g_list_free (member); g_free (value_signature); g_free (key_signature); g_free (entry_signature); @@ -1026,7 +1024,7 @@ json_to_gvariant_dictionary (JsonNode *json_node, const gchar *tmp_signature; GVariantBuilder *builder; - GList *members; + GQueue *members; GList *member; obj = json_node_get_object (json_node); @@ -1043,10 +1041,9 @@ json_to_gvariant_dictionary (JsonNode *json_node, builder = g_variant_builder_new (G_VARIANT_TYPE (dict_signature)); - members = json_object_get_members (obj); + members = json_object_get_members_internal (obj); - member = members; - while (member != NULL) + for (member = members->head; member != NULL; member = member->next) { const gchar *json_member; JsonNode *json_value; @@ -1082,15 +1079,12 @@ json_to_gvariant_dictionary (JsonNode *json_node, roll_back = TRUE; break; } - - member = member->next; } if (! roll_back) variant = g_variant_builder_end (builder); g_variant_builder_unref (builder); - g_list_free (members); g_free (value_signature); g_free (key_signature); g_free (entry_signature); |