summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorRob Kendrick <rjek@netsurf-browser.org>2006-08-20 13:46:30 +0000
committerRob Kendrick <rjek@netsurf-browser.org>2006-08-20 13:46:30 +0000
commit1f9fed85566a8eac647f0cd62db5380113ea0ef0 (patch)
tree23c3a13d5d0978e9a82cdc21764144e4e44958f4 /utils
parentd6b1f763ff7b39732a8ea91c98af306e47af82ed (diff)
downloadnetsurf-1f9fed85566a8eac647f0cd62db5380113ea0ef0.tar.gz
netsurf-1f9fed85566a8eac647f0cd62db5380113ea0ef0.tar.bz2
Make hash_add() return success/failure bool
svn path=/trunk/netsurf/; revision=2872
Diffstat (limited to 'utils')
-rw-r--r--utils/hashtable.c18
-rw-r--r--utils/hashtable.h4
2 files changed, 20 insertions, 2 deletions
diff --git a/utils/hashtable.c b/utils/hashtable.c
index 6f06332b7..d34b19960 100644
--- a/utils/hashtable.c
+++ b/utils/hashtable.c
@@ -9,6 +9,7 @@
#include <stdlib.h>
#include <string.h>
+#include <stdbool.h>
#ifdef TEST_RIG
#include <assert.h>
#include <stdio.h>
@@ -60,7 +61,7 @@ void hash_destroy(struct hash_table *ht)
free(ht);
}
-void hash_add(struct hash_table *ht, const char *key, const char *value)
+bool hash_add(struct hash_table *ht, const char *key, const char *value)
{
unsigned int h = hash_string_fnv(key);
unsigned int c = h % ht->nchains;
@@ -68,9 +69,24 @@ void hash_add(struct hash_table *ht, const char *key, const char *value)
sizeof(struct hash_entry));
e->key = strdup(key);
+ if (e->key == NULL) {
+ LOG(("Unable to strdup() key for hash table."));
+ free(e);
+ return false;
+ }
+
e->value = strdup(value);
+ if (e->value == NULL) {
+ LOG(("Unable to strdup() value for hash table."));
+ free(e->key);
+ free(e);
+ return false;
+ }
+
e->next = ht->chain[c];
ht->chain[c] = e;
+
+ return true;
}
const char *hash_get(struct hash_table *ht, const char *key)
diff --git a/utils/hashtable.h b/utils/hashtable.h
index 8f9df5009..44c40d7c8 100644
--- a/utils/hashtable.h
+++ b/utils/hashtable.h
@@ -10,6 +10,8 @@
#ifndef _NETSURF_HASH_H_
#define _NETSURF_HASH_H_
+#include <stdbool.h>
+
struct hash_entry {
char *key;
char *value;
@@ -23,7 +25,7 @@ struct hash_table {
struct hash_table *hash_create(unsigned int chains);
void hash_destroy(struct hash_table *ht);
-void hash_add(struct hash_table *ht, const char *key, const char *value);
+bool hash_add(struct hash_table *ht, const char *key, const char *value);
const char *hash_get(struct hash_table *ht, const char *key);
unsigned int hash_string_fnv(const char *datum);