summaryrefslogtreecommitdiffstats
path: root/src/hashtable.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hashtable.c')
-rw-r--r--src/hashtable.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/hashtable.c b/src/hashtable.c
index dd6dbfc..e3f9b98 100644
--- a/src/hashtable.c
+++ b/src/hashtable.c
@@ -24,6 +24,9 @@ hashtable_t* hash_table_new(hash_func_t hash_func, compare_func_t compare_func,
{
hashtable_t* ht = (hashtable_t*)malloc(sizeof(hashtable_t));
int i;
+ if (!ht) {
+ return NULL;
+ }
for (i = 0; i < 4096; i++) {
ht->entries[i] = NULL;
}
@@ -55,9 +58,9 @@ void hash_table_destroy(hashtable_t *ht)
free(ht);
}
-void hash_table_insert(hashtable_t* ht, void *key, void *value)
+int hash_table_insert(hashtable_t* ht, void *key, void *value)
{
- if (!ht || !key) return;
+ if (!ht || !key) return -1;
unsigned int hash = ht->hash_func(key);
@@ -69,7 +72,7 @@ void hash_table_insert(hashtable_t* ht, void *key, void *value)
if (ht->compare_func(e->key, key)) {
// element already present. replace value.
e->value = value;
- return;
+ return 0;
}
e = e->next;
}
@@ -78,6 +81,9 @@ void hash_table_insert(hashtable_t* ht, void *key, void *value)
// make a new entry.
hashentry_t* entry = (hashentry_t*)malloc(sizeof(hashentry_t));
+ if (!entry) {
+ return -1;
+ }
entry->key = key;
entry->value = value;
if (!ht->entries[idx0]) {
@@ -89,6 +95,7 @@ void hash_table_insert(hashtable_t* ht, void *key, void *value)
}
ht->entries[idx0] = entry;
ht->count++;
+ return 0;
}
void* hash_table_lookup(hashtable_t* ht, void *key)