Fix copying hashmaps

- len == 0 wasn't handled propery
- Incorrect source k/v address
- New object was never returned m(
This commit is contained in:
Laria 2022-01-15 23:01:23 +01:00
parent ce37113f93
commit 2684f1e61e

View file

@ -341,6 +341,10 @@ apfl_hashmap_copy(apfl_hashmap src)
struct bucket *dstbucket = &dst->buckets[i];
size_t len = srcbucket->len;
if (len == 0) {
continue;
}
dstbucket->keys = malloc(keysize * len);
dstbucket->values = malloc(valsize * len);
if (dstbucket->keys == NULL || dstbucket->values == NULL) {
@ -354,23 +358,25 @@ apfl_hashmap_copy(apfl_hashmap src)
dstbucket->cap = len;
for (; dstbucket->len < len; dstbucket->len++) {
void *keyaddr = KVADDR(dstbucket->keys, keysize, dstbucket->len);
for (size_t j = 0; j < len; j++) {
copy_key(
dst,
keyaddr,
KVADDR(srcbucket->keys, keysize, srcbucket->len)
KVADDR(dstbucket->keys, keysize, j),
KVADDR(srcbucket->keys, keysize, j)
);
copy_value(
dst,
KVADDR(dstbucket->values, valsize, dstbucket->len),
KVADDR(srcbucket->values, valsize, srcbucket->len)
KVADDR(dstbucket->values, valsize, j),
KVADDR(srcbucket->values, valsize, j)
);
dstbucket->len++;
}
}
return dst;
fail:
apfl_hashmap_destroy(dst);
return NULL;