From a0ea6c513008895080f8d16517cc38ce001f965f Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Tue, 31 May 2011 16:43:40 +0000 Subject: [PATCH] eina: fix eina_hash_set to act when data == NULL like eina_hash_del. SVN revision: 59849 --- legacy/eina/ChangeLog | 4 ++++ legacy/eina/src/include/eina_hash.h | 2 +- legacy/eina/src/lib/eina_hash.c | 14 ++++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/legacy/eina/ChangeLog b/legacy/eina/ChangeLog index 093de1956a..a664a013b3 100644 --- a/legacy/eina/ChangeLog +++ b/legacy/eina/ChangeLog @@ -97,3 +97,7 @@ 2011-05-30 Cedric Bail * Add eina_condition_timedwait. + +2011-05-31 Cedric Bail + + * Fix eina_hash_set to handle data == NULL like eina_hash_del. diff --git a/legacy/eina/src/include/eina_hash.h b/legacy/eina/src/include/eina_hash.h index fec43df4b1..3abd3637f6 100644 --- a/legacy/eina/src/include/eina_hash.h +++ b/legacy/eina/src/include/eina_hash.h @@ -379,7 +379,7 @@ EAPI void *eina_hash_modify(Eina_Hash *hash, */ EAPI void *eina_hash_set(Eina_Hash *hash, const void *key, - const void *data) EINA_ARG_NONNULL(1, 2, 3); + const void *data) EINA_ARG_NONNULL(1, 2); /** * @brief Change the key associated with a data without triggering the diff --git a/legacy/eina/src/lib/eina_hash.c b/legacy/eina/src/lib/eina_hash.c index 2e9040a00c..bf1bcd70a5 100644 --- a/legacy/eina/src/lib/eina_hash.c +++ b/legacy/eina/src/lib/eina_hash.c @@ -1103,7 +1103,6 @@ eina_hash_set(Eina_Hash *hash, const void *key, const void *data) EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL); EINA_MAGIC_CHECK_HASH(hash); key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; @@ -1119,10 +1118,21 @@ eina_hash_set(Eina_Hash *hash, const void *key, const void *data) void *old_data = NULL; old_data = hash_element->tuple.data; - hash_element->tuple.data = (void *)data; + + if (data) + { + hash_element->tuple.data = (void *)data; + } + else + { + _eina_hash_del_by_hash_el(hash, hash_element, hash_head, key_hash); + } + return old_data; } + if (!data) return NULL; + eina_hash_add_alloc_by_hash(hash, key, key_length,