diff options
author | Sumit Bose <sbose@redhat.com> | 2010-09-29 12:24:19 +0200 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2010-10-12 14:26:07 -0400 |
commit | 8a5a0c340cb259103abc77d37960710177a74f8c (patch) | |
tree | f4a8f0d7c093763b284bcda578e221001827a86c /dhash/dhash.c | |
parent | 841a1ab44968f13f0f7b6a2ace4e38d418142cbd (diff) | |
download | ding-libs2-8a5a0c340cb259103abc77d37960710177a74f8c.tar.gz ding-libs2-8a5a0c340cb259103abc77d37960710177a74f8c.tar.xz ding-libs2-8a5a0c340cb259103abc77d37960710177a74f8c.zip |
dhash: Allow hash_enter() to update entries
Diffstat (limited to 'dhash/dhash.c')
-rw-r--r-- | dhash/dhash.c | 61 |
1 files changed, 34 insertions, 27 deletions
diff --git a/dhash/dhash.c b/dhash/dhash.c index cb292b7..f92e463 100644 --- a/dhash/dhash.c +++ b/dhash/dhash.c @@ -898,34 +898,10 @@ int hash_enter(hash_table_t *table, hash_key_t *key, hash_value_t *value) memcpy((void *)element->entry.key.str, key->str, len); break; } - switch(element->entry.value.type = value->type) { - case HASH_VALUE_UNDEF: - element->entry.value.ul = 0; - break; - case HASH_VALUE_PTR: - element->entry.value.ptr = value->ptr; - break; - case HASH_VALUE_INT: - element->entry.value.i = value->i; - break; - case HASH_VALUE_UINT: - element->entry.value.ui = value->ui; - break; - case HASH_VALUE_LONG: - element->entry.value.l = value->l; - break; - case HASH_VALUE_ULONG: - element->entry.value.ul = value->ul; - break; - case HASH_VALUE_FLOAT: - element->entry.value.f = value->f; - break; - case HASH_VALUE_DOUBLE: - element->entry.value.d = value->d; - break; - } + *chain = element; /* link into chain */ element->next = NULL; + /* * Table over-full? */ @@ -934,7 +910,38 @@ int hash_enter(hash_table_t *table, hash_key_t *key, hash_value_t *value) return error; } } - } /* end not found */ + + } else { + hdelete_callback(table, HASH_ENTRY_DESTROY, &element->entry); + } + + switch(element->entry.value.type = value->type) { + case HASH_VALUE_UNDEF: + element->entry.value.ul = 0; + break; + case HASH_VALUE_PTR: + element->entry.value.ptr = value->ptr; + break; + case HASH_VALUE_INT: + element->entry.value.i = value->i; + break; + case HASH_VALUE_UINT: + element->entry.value.ui = value->ui; + break; + case HASH_VALUE_LONG: + element->entry.value.l = value->l; + break; + case HASH_VALUE_ULONG: + element->entry.value.ul = value->ul; + break; + case HASH_VALUE_FLOAT: + element->entry.value.f = value->f; + break; + case HASH_VALUE_DOUBLE: + element->entry.value.d = value->d; + break; + } + return HASH_SUCCESS; } |