|
|
|
|
@ -23,11 +23,6 @@ struct __bencode_buffer_piece {
|
|
|
|
|
struct __bencode_buffer_piece *next;
|
|
|
|
|
char buf[0];
|
|
|
|
|
};
|
|
|
|
|
struct __bencode_free_list {
|
|
|
|
|
void *ptr;
|
|
|
|
|
free_func_t func;
|
|
|
|
|
struct __bencode_free_list *next;
|
|
|
|
|
};
|
|
|
|
|
struct __bencode_hash {
|
|
|
|
|
struct bencode_item *buckets[BENCODE_HASH_BUCKETS];
|
|
|
|
|
};
|
|
|
|
|
@ -100,7 +95,6 @@ int bencode_buffer_init(bencode_buffer_t *buf) {
|
|
|
|
|
buf->pieces = __bencode_piece_new(0);
|
|
|
|
|
if (!buf->pieces)
|
|
|
|
|
return -1;
|
|
|
|
|
buf->free_list = NULL;
|
|
|
|
|
buf->error = 0;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
@ -141,12 +135,8 @@ alloc:
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void bencode_buffer_free(bencode_buffer_t *buf) {
|
|
|
|
|
struct __bencode_free_list *fl;
|
|
|
|
|
struct __bencode_buffer_piece *piece, *next;
|
|
|
|
|
|
|
|
|
|
for (fl = buf->free_list; fl; fl = fl->next)
|
|
|
|
|
fl->func(fl->ptr);
|
|
|
|
|
|
|
|
|
|
for (piece = buf->pieces; piece; piece = next) {
|
|
|
|
|
next = piece->next;
|
|
|
|
|
BENCODE_FREE(piece);
|
|
|
|
|
@ -686,20 +676,6 @@ bencode_item_t *bencode_dictionary_get_len(bencode_item_t *dict, const char *key
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void bencode_buffer_destroy_add(bencode_buffer_t *buf, free_func_t func, void *p) {
|
|
|
|
|
struct __bencode_free_list *li;
|
|
|
|
|
|
|
|
|
|
if (!p)
|
|
|
|
|
return;
|
|
|
|
|
li = bencode_buffer_alloc(buf, sizeof(*li));
|
|
|
|
|
if (!li)
|
|
|
|
|
return;
|
|
|
|
|
li->ptr = p;
|
|
|
|
|
li->func = func;
|
|
|
|
|
li->next = buf->free_list;
|
|
|
|
|
buf->free_list = li;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static ssize_t __bencode_string(const char *s, ssize_t offset, size_t len) {
|
|
|
|
|
size_t pos;
|
|
|
|
|
unsigned long sl;
|
|
|
|
|
|