void benc_free(struct benc *b) { struct list *cur, *next; struct dict *dcur, *dnext; if (b == NULL) return; switch(b->type) { case benc_int: free(b); break; case benc_str: free(b->d.s); free(b); break; case benc_list: cur = b->d.l; while (cur != NULL) { benc_free(cur->node); next = cur->next; free(cur); cur = next; } free(b); break; case benc_dict: dcur = b->d.d; while (dcur != NULL) { free(dcur->key); benc_free(dcur->value); dnext = dcur->next; free(dcur); dcur = dnext; } free(b); break; case benc_invalid: free(b); break; default: break; } }
static void benc_append_benc(BENCDATA benc, BENCDATA data) { benc_append(benc, data->buffer, data->length); benc_free(data); }