summaryrefslogtreecommitdiff
path: root/json-glib/json-generator.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-generator.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-generator.c')
-rw-r--r--json-glib/json-generator.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/json-glib/json-generator.c b/json-glib/json-generator.c
index 6a9aff4..0afe881 100644
--- a/json-glib/json-generator.c
+++ b/json-glib/json-generator.c
@@ -426,7 +426,8 @@ dump_object (JsonGenerator *generator,
JsonObject *object)
{
JsonGeneratorPrivate *priv = generator->priv;
- GList *members, *l;
+ GQueue *members;
+ GList *l;
gboolean pretty = priv->pretty;
guint indent = priv->indent;
guint i;
@@ -436,9 +437,9 @@ dump_object (JsonGenerator *generator,
if (pretty)
g_string_append_c (buffer, '\n');
- members = json_object_get_members (object);
+ members = json_object_get_members_internal (object);
- for (l = members; l != NULL; l = l->next)
+ for (l = members->head; l != NULL; l = l->next)
{
const gchar *member_name = l->data;
JsonNode *cur = json_object_get_member (object, member_name);
@@ -452,8 +453,6 @@ dump_object (JsonGenerator *generator,
g_string_append_c (buffer, '\n');
}
- g_list_free (members);
-
if (pretty)
{
for (i = 0; i < (level * indent); i++)