blobmsg: add blobmsg_parse_array()
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
This commit is contained in:
parent
dde64e47ca
commit
2f74dbad14
2 changed files with 29 additions and 0 deletions
27
blobmsg.c
27
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)
|
||||
{
|
||||
|
|
|
@ -81,6 +81,8 @@ bool blobmsg_check_attr(const struct blob_attr *attr, bool name);
|
|||
bool blobmsg_check_attr_list(const struct blob_attr *attr, int type);
|
||||
int blobmsg_parse(const struct blobmsg_policy *policy, int policy_len,
|
||||
struct blob_attr **tb, void *data, int len);
|
||||
int blobmsg_parse_array(const struct blobmsg_policy *policy, int policy_len,
|
||||
struct blob_attr **tb, void *data, int len);
|
||||
|
||||
int blobmsg_add_field(struct blob_buf *buf, int type, const char *name,
|
||||
const void *data, int len);
|
||||
|
|
Loading…
Reference in a new issue