Beispiel #1
0
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);
}