X-Git-Url: http://git.archive.openwrt.org/?p=project%2Flibubox.git;a=blobdiff_plain;f=blobmsg.c;h=a2c2c5db66778b8a2c3e7c07ab64e84e2ed46879;hp=f31715209013c31a2ec7d0f493fca4c9e6c8b284;hb=7ba1f8acd8afb451a05276eda5d3567a53ef2fb3;hpb=fd5b522ce6af8584a9c9259700b8916f06f85766 diff --git a/blobmsg.c b/blobmsg.c index f317152..a2c2c5d 100644 --- a/blobmsg.c +++ b/blobmsg.c @@ -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,