diff options
author | Baitinq <manuelpalenzuelamerino@gmail.com> | 2025-01-04 16:24:29 +0100 |
---|---|---|
committer | Baitinq <manuelpalenzuelamerino@gmail.com> | 2025-01-04 16:24:29 +0100 |
commit | 75d42cc0e3d9feccf3a367f77e299acc4abfabd4 (patch) | |
tree | 9a7a5cbbbba018058aaa86711f0c14843a1ff1a9 /lib/hashtable.c | |
parent | Start implementing referencing hashmap impl in fuzzer (diff) | |
download | c-hashtable-75d42cc0e3d9feccf3a367f77e299acc4abfabd4.tar.gz c-hashtable-75d42cc0e3d9feccf3a367f77e299acc4abfabd4.tar.bz2 c-hashtable-75d42cc0e3d9feccf3a367f77e299acc4abfabd4.zip |
Copy memory in hashmap
Diffstat (limited to 'lib/hashtable.c')
-rw-r--r-- | lib/hashtable.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/hashtable.c b/lib/hashtable.c index e7799ad..f9f9873 100644 --- a/lib/hashtable.c +++ b/lib/hashtable.c @@ -44,6 +44,11 @@ int hashtable_deinit(HashTable* ht) { for (int i = 0; i < ht_impl->capacity; ++i) { HashTableBucket bucket = ht_impl->buckets[i]; + for (int j = 0; j < bucket.length; ++j) { + HashTableData data = bucket.data[j]; + free(data.key); + free(data.data); + } free(bucket.data); } @@ -68,7 +73,7 @@ void* hashtable_get(HashTable ht, char* key) { return NULL; } -int hashtable_put(HashTable ht, char* key, void* val) { +int hashtable_put(HashTable ht, char* key, void* val, size_t val_size) { HashTableImpl* ht_impl = (HashTableImpl*) ht; int index = hash(key, ht_impl->capacity); @@ -91,10 +96,11 @@ int hashtable_put(HashTable ht, char* key, void* val) { bucket->data = realloc(bucket->data, sizeof(HashTableData) * bucket->length); HashTableData newData = { - .key = key, - .data = val, + .key = strdup(key), + .data = malloc(val_size), .deleted = 0 }; + memcpy(newData.data, val, val_size); bucket->data[bucket->length - 1] = newData; return 0; |