diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/plist.c | 19 | 
1 files 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;  } | 
