From: Felix Fietkau Date: Sun, 24 Jun 2012 16:38:54 +0000 (+0200) Subject: add blobmsg_list_move X-Git-Url: http://git.openwrt.org/?p=project%2Fprocd.git;a=commitdiff_plain;h=063b8c2b5301646335dac66f1167bc8f128537a7;hp=480c24c6df4446ba484228ecf3212fc6144a54bc add blobmsg_list_move --- diff --git a/utils.c b/utils.c index cf31f87..88ed8c1 100644 --- a/utils.c +++ b/utils.c @@ -42,6 +42,20 @@ blobmsg_list_fill(struct blobmsg_list *list, void *data, int len) return count; } +void +blobmsg_list_move(struct blobmsg_list *list, struct blobmsg_list *src) +{ + struct blobmsg_list_node *node, *tmp; + void *ptr; + + avl_remove_all_elements(&src->avl, node, avl, tmp) { + if (!avl_insert(&list->avl, &node->avl)) { + ptr = ((char *) node - list->node_offset); + free(ptr); + } + } +} + void blobmsg_list_free(struct blobmsg_list *list) { diff --git a/utils.h b/utils.h index 77de1f0..e89f2f1 100644 --- a/utils.h +++ b/utils.h @@ -26,5 +26,6 @@ void __blobmsg_list_init(struct blobmsg_list *list, int offset, int len); int blobmsg_list_fill(struct blobmsg_list *list, void *data, int len); void blobmsg_list_free(struct blobmsg_list *list); bool blobmsg_list_equal(struct blobmsg_list *l1, struct blobmsg_list *l2); +void blobmsg_list_move(struct blobmsg_list *list, struct blobmsg_list *src); #endif