diff options
Diffstat (limited to 'src/hashtable.c')
| -rw-r--r-- | src/hashtable.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/hashtable.c b/src/hashtable.c index 9a8484d..3a83861 100644 --- a/src/hashtable.c +++ b/src/hashtable.c @@ -8,7 +8,14 @@ const unsigned int fnvOffset = 2166136261U; pair_t init_pair(char* key, void* value) { pair_t p; - p.key = key; + if (key != NULL) { + char* kp = malloc((strlen(key) + 1) * sizeof(char)); + strcpy(kp, key); + p.key = kp; + } + else { + p.key = NULL; + } p.value = value; return p; } @@ -20,6 +27,12 @@ hashtable_t* init_hashtable(unsigned int capacity, hashtable_t* parent) { return ht; } void destroy_hashtable(hashtable_t* hashtable) { + /* TODO: optimize this */ + for (int i = 0; i < hashtable->capacity; i++) { + if (hashtable->pairs[i].key != NULL) { + free(hashtable->pairs[i].key); + } + } free(hashtable->pairs); free(hashtable); } |
