[Core, mod_hash] Add two APIs switch_core_hash_insert_alloc_destructor and switch_core_hash_insert_dup_destructor. Code cleanup in mod_hash. Add unit-tests.

This commit is contained in:
Andrey Volk committed 2021-10-19 20:26:50 +03:00
1 parent f92368d2f2
commit 1b048a8a97
4 files changed
+113 -16

No files matched your search

+39
View File
@@ -68,6 +68,45 @@ SWITCH_DECLARE(switch_status_t) switch_core_hash_insert_auto_free(switch_hash_t
return SWITCH_STATUS_FALSE;
}
SWITCH_DECLARE(void *) switch_core_hash_insert_alloc_destructor(_In_ switch_hash_t *hash, _In_z_ const char *key, _In_opt_ size_t size, hashtable_destructor_t destructor) {
char *dkey;
void *data;
if (!size) return NULL;
dkey = strdup(key);
data = malloc(size);
assert(data);
if (switch_hashtable_insert_destructor(hash, dkey, data, HASHTABLE_FLAG_FREE_KEY | HASHTABLE_DUP_CHECK, destructor)) {
memset(data, 0, size);
return data;
}
free(data);
switch_safe_free(dkey);
return NULL;
}
SWITCH_DECLARE(switch_status_t) switch_core_hash_insert_dup_destructor(switch_hash_t *hash, const char *key, const char *str, hashtable_destructor_t destructor)
{
char *dkey = strdup(key);
char *dup = strdup(str);
assert(dup);
if (switch_hashtable_insert_destructor(hash, dkey, (void *)dup, HASHTABLE_FLAG_FREE_KEY | HASHTABLE_DUP_CHECK, destructor)) {
return SWITCH_STATUS_SUCCESS;
}
switch_safe_free(dup);
switch_safe_free(dkey);
return SWITCH_STATUS_FALSE;
}
SWITCH_DECLARE(switch_status_t) switch_core_hash_insert_destructor(switch_hash_t *hash, const char *key, const void *data, hashtable_destructor_t destructor)
{
char *dkey = strdup(key);