diff options
Diffstat (limited to 'json-glib/json-reader.c')
-rw-r--r-- | json-glib/json-reader.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/json-glib/json-reader.c b/json-glib/json-reader.c index b12734f..f371dd9 100644 --- a/json-glib/json-reader.c +++ b/json-glib/json-reader.c @@ -495,7 +495,7 @@ json_reader_read_element (JsonReader *reader, case JSON_NODE_OBJECT: { JsonObject *object = json_node_get_object (priv->current_node); - GList *members; + GQueue *members; const gchar *name; if (index_ >= json_object_get_size (object)) @@ -506,13 +506,11 @@ json_reader_read_element (JsonReader *reader, priv->previous_node = priv->current_node; - members = json_object_get_members (object); - name = g_list_nth_data (members, index_); + members = json_object_get_members_internal (object); + name = g_queue_peek_nth (members, index_); priv->current_node = json_object_get_member (object, name); g_ptr_array_add (priv->members, g_strdup (name)); - - g_list_free (members); } break; @@ -737,7 +735,9 @@ gchar ** json_reader_list_members (JsonReader *reader) { JsonReaderPrivate *priv; - GList *members, *l; + JsonObject *object; + GQueue *members; + GList *l; gchar **retval; gint i; @@ -760,18 +760,15 @@ json_reader_list_members (JsonReader *reader) return NULL; } - members = json_object_get_members (json_node_get_object (priv->current_node)); - if (members == NULL) - return NULL; + object = json_node_get_object (priv->current_node); + members = json_object_get_members_internal (object); - retval = g_new (gchar*, g_list_length (members) + 1); - for (l = members, i = 0; l != NULL; l = l->next, i += 1) + retval = g_new (gchar*, g_queue_get_length (members) + 1); + for (l = members->head, i = 0; l != NULL; l = l->next, i += 1) retval[i] = g_strdup (l->data); retval[i] = NULL; - g_list_free (members); - return retval; } |