From 5a7a91d4eb2263d2c9fd63d51bce9a4738b072d9 Mon Sep 17 00:00:00 2001 From: Jonathan Beck Date: Sun, 11 Oct 2009 12:14:22 +0200 Subject: Fix dict iteration. --- src/plist.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/plist.c b/src/plist.c index b723517..5ef3144 100644 --- a/src/plist.c +++ b/src/plist.c @@ -264,24 +264,33 @@ void plist_dict_new_iter(plist_t node, plist_dict_iter *iter) { if (iter && *iter == NULL) { *iter = malloc(sizeof(uint32_t)); - *(uint32_t*)*iter = 0; + *((uint32_t*)(*iter)) = 0; } return; } void plist_dict_next_item(plist_t node, plist_dict_iter iter, char **key, plist_t *val) { - if (node && PLIST_DICT == plist_get_node_type(node) && *(uint32_t*)iter < g_node_n_children(node) / 2) { + uint32_t* iter_int = (uint32_t*) iter; + + if (key) { + *key = NULL; + } + if (val) { + *val = NULL; + } + + if (node && PLIST_DICT == plist_get_node_type(node) && *iter_int < g_node_n_children(node)) { if (key) { - plist_get_key_val((plist_t)g_node_nth_child(node, 2 * (*(uint32_t*)iter)), key); + plist_get_key_val((plist_t)g_node_nth_child(node, *iter_int), key); } if (val) { - *val = (plist_t) g_node_nth_child(node, 2 * (*(uint32_t*)iter) + 1); + *val = (plist_t) g_node_nth_child(node, *iter_int + 1); } - *(uint32_t*)iter += 2; + *iter_int += 2; } return; } -- cgit v1.1-32-gdbae