diff --git a/blobmsg.c b/blobmsg.c index 12f603c..2d584a1 100644 --- a/blobmsg.c +++ b/blobmsg.c @@ -61,11 +61,23 @@ 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, bool name) +bool blobmsg_check_attr_list(const struct blob_attr *attr, int type) { struct blob_attr *cur; + bool name; int rem; + switch (blobmsg_type(attr)) { + case BLOBMSG_TYPE_TABLE: + name = true; + break; + case BLOBMSG_TYPE_ARRAY: + name = false; + break; + default: + return false; + } + blobmsg_for_each_attr(cur, attr, rem) { if (blobmsg_type(cur) != type) return false; diff --git a/blobmsg.h b/blobmsg.h index f504351..94b145c 100644 --- a/blobmsg.h +++ b/blobmsg.h @@ -78,7 +78,7 @@ static inline int blobmsg_data_len(const struct blob_attr *attr) } bool blobmsg_check_attr(const struct blob_attr *attr, bool name); -bool blobmsg_check_attr_list(const struct blob_attr *attr, int type, 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);