summaryrefslogtreecommitdiff
path: root/json-glib/json-gvariant.c
diff options
context:
space:
mode:
authorGarrett Regier <garrettregier@gmail.com>2016-10-20 19:44:09 -0700
committerGarrett Regier <garrettregier@gmail.com>2017-06-16 17:16:32 -0700
commitd78ad648942637fb9212d1d93670509d4c7f687b (patch)
treee1e2fe26f63d2d12446fee7aa291f1363e84ec6d /json-glib/json-gvariant.c
parent7b3c405df41c0b6f6fe58fdb05c922614f08c4c4 (diff)
downloadjson-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.c20
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);