diff --git a/ds.c b/ds.c index 2550583..81f6084 100644 --- a/ds.c +++ b/ds.c @@ -153,7 +153,7 @@ ds_hmp_t } void -ds_hmp_free(ds_hmp_t **hmp) +ds_hmp_free(ds_hmp_t **hmp, void kv_callback(_ds_hmp_kv_t *kv)) { int i; _ds_hmp_kv_t *kv; @@ -167,6 +167,9 @@ ds_hmp_free(ds_hmp_t **hmp) ll = (*hmp)->data[i]; while (ll && ll->data) { if ((kv = ds_sll_remove(&ll, 0))) { + if (kv_callback) { + kv_callback(kv); + } free(kv); } } diff --git a/ds.h b/ds.h index bf3c243..18a000f 100644 --- a/ds.h +++ b/ds.h @@ -89,7 +89,7 @@ ds_hmp_t *ds_hmp_init(int data_len); * * @param hmp pointer to the hashmap */ -void ds_hmp_free(ds_hmp_t **hmp); +void ds_hmp_free(ds_hmp_t **hmp, void kv_callback(_ds_hmp_kv_t *kv)); /** * @brief generate a numerical hash from a given string. You shouldn't need to