Browse Source

merge bencode from kamailio

git.mgm/mediaproxy-ng/2.2
Richard Fuchs 13 years ago
parent
commit
a59cd22479
2 changed files with 23 additions and 6 deletions
  1. +22
    -6
      daemon/bencode.c
  2. +1
    -0
      daemon/bencode.h

+ 22
- 6
daemon/bencode.c View File

@ -85,6 +85,7 @@ int bencode_buffer_init(bencode_buffer_t *buf) {
if (!buf->pieces)
return -1;
buf->free_list = NULL;
buf->error = 0;
return 0;
}
@ -92,14 +93,19 @@ static void *__bencode_alloc(bencode_buffer_t *buf, unsigned int size) {
struct __bencode_buffer_piece *piece;
void *ret;
if (buf->error)
return NULL;
piece = buf->pieces;
if (size <= piece->left)
goto alloc;
piece = __bencode_piece_new(size);
if (!piece)
if (!piece) {
buf->error = 1;
return NULL;
}
piece->next = buf->pieces;
buf->pieces = piece;
@ -157,6 +163,11 @@ bencode_item_t *bencode_list(bencode_buffer_t *buf) {
}
static void __bencode_container_add(bencode_item_t *parent, bencode_item_t *child) {
if (!parent)
return;
if (!child)
return;
assert(child->parent == NULL);
assert(child->sibling == NULL);
@ -221,9 +232,9 @@ bencode_item_t *bencode_integer(bencode_buffer_t *buf, long long int i) {
bencode_item_t *bencode_dictionary_add_len(bencode_item_t *dict, const char *key, int keylen, bencode_item_t *val) {
bencode_item_t *str;
assert(dict->type == BENCODE_DICTIONARY);
if (!val)
if (!dict || !val)
return NULL;
assert(dict->type == BENCODE_DICTIONARY);
str = bencode_string_len(dict->buffer, key, keylen);
if (!str)
@ -234,6 +245,8 @@ bencode_item_t *bencode_dictionary_add_len(bencode_item_t *dict, const char *key
}
bencode_item_t *bencode_list_add(bencode_item_t *list, bencode_item_t *item) {
if (!list || !item)
return NULL;
assert(list->type == BENCODE_LIST);
__bencode_container_add(list, item);
return item;
@ -309,7 +322,8 @@ static int __bencode_str_dump(char *out, bencode_item_t *item) {
struct iovec *bencode_iovec(bencode_item_t *root, int *cnt, unsigned int head, unsigned int tail) {
struct iovec *ret;
assert(root != NULL);
if (!root)
return NULL;
assert(cnt != NULL);
assert(root->iov_cnt > 0);
@ -324,7 +338,8 @@ char *bencode_collapse(bencode_item_t *root, int *len) {
char *ret;
int l;
assert(root != NULL);
if (!root)
return NULL;
assert(root->str_len > 0);
ret = __bencode_alloc(root->buffer, root->str_len + 1);
@ -340,7 +355,8 @@ char *bencode_collapse_dup(bencode_item_t *root, int *len) {
char *ret;
int l;
assert(root != NULL);
if (!root)
return NULL;
assert(root->str_len > 0);
ret = BENCODE_MALLOC(root->str_len + 1);


+ 1
- 0
daemon/bencode.h View File

@ -54,6 +54,7 @@ struct bencode_item {
struct bencode_buffer {
struct __bencode_buffer_piece *pieces;
struct __bencode_free_list *free_list;
int error:1;
};


Loading…
Cancel
Save