Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.openwrt.org/project/libubox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-01-08 05:05:00 +0400
committerFelix Fietkau <nbd@openwrt.org>2013-01-08 05:05:03 +0400
commit2f74dbad14b42c3a6687b093210b8604d0b235cd (patch)
treed2478279e17ed6b0d064a7e602de7aa115c325a1 /blobmsg.c
parentdde64e47cadbd245a99f145869eb400b68cc82e9 (diff)
blobmsg: add blobmsg_parse_array()
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Diffstat (limited to 'blobmsg.c')
-rw-r--r--blobmsg.c27
1 files changed, 27 insertions, 0 deletions
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)
{