diff options
author | Felix Fietkau <nbd@openwrt.org> | 2014-07-15 12:51:09 +0400 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2014-07-15 12:52:12 +0400 |
commit | 7ba1f8acd8afb451a05276eda5d3567a53ef2fb3 (patch) | |
tree | d521829c62c0db825ba6c5f498628e991d6157f1 /blobmsg.c | |
parent | fd5b522ce6af8584a9c9259700b8916f06f85766 (diff) |
blobmsg: add blobmsg_check_array, which returns the size of the array
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Diffstat (limited to 'blobmsg.c')
-rw-r--r-- | blobmsg.c | 20 |
1 files changed, 14 insertions, 6 deletions
@@ -62,11 +62,12 @@ bool blobmsg_check_attr(const struct blob_attr *attr, bool name) return blob_check_type(data, len, blob_type[id]); } -bool blobmsg_check_attr_list(const struct blob_attr *attr, int type) +int blobmsg_check_array(const struct blob_attr *attr, int type) { struct blob_attr *cur; bool name; int rem; + int size = 0; switch (blobmsg_type(attr)) { case BLOBMSG_TYPE_TABLE: @@ -76,18 +77,25 @@ bool blobmsg_check_attr_list(const struct blob_attr *attr, int type) name = false; break; default: - return false; + return -1; } blobmsg_for_each_attr(cur, attr, rem) { - if (blobmsg_type(cur) != type) - return false; + if (type != BLOBMSG_TYPE_UNSPEC && blobmsg_type(cur) != type) + return -1; if (!blobmsg_check_attr(cur, name)) - return false; + return -1; + + size++; } - return true; + return size; +} + +bool blobmsg_check_attr_list(const struct blob_attr *attr, int type) +{ + return blobmsg_check_array(attr, type) >= 0; } int blobmsg_parse_array(const struct blobmsg_policy *policy, int policy_len, |