From 2f74dbad14b42c3a6687b093210b8604d0b235cd Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 8 Jan 2013 02:05:00 +0100 Subject: blobmsg: add blobmsg_parse_array() Signed-off-by: Felix Fietkau --- blobmsg.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'blobmsg.c') diff --git a/blobmsg.c b/blobmsg.c index 2d584a1..e04fa53 100644 --- a/blobmsg.c +++ b/blobmsg.c @@ -89,6 +89,33 @@ bool blobmsg_check_attr_list(const struct blob_attr *attr, int type) return true; } +int blobmsg_parse_array(const struct blobmsg_policy *policy, int policy_len, + struct blob_attr **tb, void *data, int len) +{ + struct blob_attr *attr; + int i = 0; + + memset(tb, 0, policy_len * sizeof(*tb)); + __blob_for_each_attr(attr, data, len) { + if (policy[i].type != BLOBMSG_TYPE_UNSPEC && + blob_id(attr) != policy[i].type) + continue; + + if (!blobmsg_check_attr(attr, true)) + return -1; + + if (tb[i]) + continue; + + tb[i++] = attr; + if (i == policy_len) + break; + } + + return 0; +} + + int blobmsg_parse(const struct blobmsg_policy *policy, int policy_len, struct blob_attr **tb, void *data, int len) { -- cgit v1.2.3