#include "xh_config.h" #include "xh_core.h" static int xh_sort_hash_cmp(const void *p1, const void *p2) { return xh_strcmp(((xh_sort_hash_t *) p1)->key, ((xh_sort_hash_t *) p2)->key); } xh_sort_hash_t * xh_sort_hash(HV *hash, size_t len) { xh_sort_hash_t *sorted_hash; size_t i; sorted_hash = malloc(sizeof(xh_sort_hash_t) * len); if (sorted_hash == NULL) { croak("Memory allocation error"); } hv_iterinit(hash); for (i = 0; i < len; i++) { sorted_hash[i].value = hv_iternextsv(hash, (char **) &sorted_hash[i].key, &sorted_hash[i].key_len); } qsort(sorted_hash, len, sizeof(xh_sort_hash_t), xh_sort_hash_cmp); return sorted_hash; }