diff options
author | Felix Fietkau <nbd@openwrt.org> | 2012-06-25 00:55:17 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2012-06-25 00:55:17 +0200 |
commit | 9ec29d3648904002f92b7d2b0732a820e44c5f4b (patch) | |
tree | d185414e574844c92a984191b58002f40da7d113 /utils.c | |
parent | 4a1bfc6ec5033236742967e548bfac9efe851c91 (diff) | |
download | unitd-9ec29d3648904002f92b7d2b0732a820e44c5f4b.tar unitd-9ec29d3648904002f92b7d2b0732a820e44c5f4b.zip |
add netdev ifindex support
Diffstat (limited to 'utils.c')
-rw-r--r-- | utils.c | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -3,11 +3,12 @@ #include "utils.h" void -__blobmsg_list_init(struct blobmsg_list *list, int offset, int len) +__blobmsg_list_init(struct blobmsg_list *list, int offset, int len, blobmsg_list_cmp cmp) { avl_init(&list->avl, avl_strcmp, false, NULL); list->node_offset = offset; list->node_len = len; + list->cmp = cmp; } int @@ -21,7 +22,7 @@ blobmsg_list_fill(struct blobmsg_list *list, void *data, int len, bool array) int rem = len; __blob_for_each_attr(cur, data, rem) { - if (!blobmsg_check_attr(cur, true)) + if (!blobmsg_check_attr(cur, !array)) continue; ptr = calloc(1, list->node_len); @@ -52,7 +53,7 @@ blobmsg_list_move(struct blobmsg_list *list, struct blobmsg_list *src) void *ptr; avl_remove_all_elements(&src->avl, node, avl, tmp) { - if (!avl_insert(&list->avl, &node->avl)) { + if (avl_insert(&list->avl, &node->avl)) { ptr = ((char *) node - list->node_offset); free(ptr); } @@ -93,6 +94,9 @@ blobmsg_list_equal(struct blobmsg_list *l1, struct blobmsg_list *l2) if (memcmp(n1->data, n2->data, len) != 0) return false; + if (l1->cmp && !l1->cmp(n1, n2)) + return false; + if (!count) break; |