Actually implement bcode_free

This commit is contained in:
Lucas Gabriel Vuotto 2025-01-28 02:59:29 +00:00
parent d95e10600c
commit 03f488d26f

34
bcode.c
View File

@ -403,12 +403,42 @@ bcode_parse(const uint8_t *dp, size_t sz)
return bcode; return bcode;
} }
void static void
bcode_free(struct bcode *bcode) free_internal(struct bcode *bcode)
{ {
size_t i;
if (bcode == NULL) if (bcode == NULL)
return; return;
switch (bcode->type) {
case BCODE_STRING:
free(bcode->value.s.data);
break;
case BCODE_INTEGER:
break;
case BCODE_LIST:
for (i = 0; i < bcode->value.l.sz; i++)
free_internal(&bcode->value.l.elems[i]);
free(bcode->value.l.elems);
break;
case BCODE_DICTIONARY:
for (i = 0; i < bcode->value.d.sz; i++) {
free(bcode->value.d.elems[i].k.data);
free_internal(&bcode->value.d.elems[i].v);
}
free(bcode->value.d.elems);
break;
default:
/* Do nothing. */
break;
}
}
void
bcode_free(struct bcode *bcode)
{
free_internal(bcode);
free(bcode); free(bcode);
} }