From: Felix Fietkau Date: Sun, 10 Jun 2012 15:31:54 +0000 (+0200) Subject: add blobmsg_list_equal() X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fprocd.git;a=commitdiff_plain;h=c596f040369f0900e2818e249c00c44c33b6eb64 add blobmsg_list_equal() --- diff --git a/utils.c b/utils.c index cff67bd..cf31f87 100644 --- a/utils.c +++ b/utils.c @@ -53,3 +53,35 @@ blobmsg_list_free(struct blobmsg_list *list) free(ptr); } } + +bool +blobmsg_list_equal(struct blobmsg_list *l1, struct blobmsg_list *l2) +{ + struct blobmsg_list_node *n1, *n2; + int count = l1->avl.count; + + if (count != l2->avl.count) + return false; + + n1 = avl_first_element(&l1->avl, n1, avl); + n2 = avl_first_element(&l2->avl, n2, avl); + + while (count-- > 0) { + int len; + + len = blob_len(n1->data); + if (len != blob_len(n2->data)) + return false; + + if (memcmp(n1->data, n2->data, len) != 0) + return false; + + if (!count) + break; + + n1 = avl_next_element(n1, avl); + n2 = avl_next_element(n2, avl); + } + + return true; +} diff --git a/utils.h b/utils.h index ce9d9dd..b17f5f6 100644 --- a/utils.h +++ b/utils.h @@ -25,5 +25,6 @@ struct blobmsg_list_node { 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); #endif