blobmsg: add blobmsg_check_attr_list() to validate element types of arrays and tables
authorFelix Fietkau <nbd@openwrt.org>
Sun, 24 Jun 2012 19:07:47 +0000 (21:07 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 24 Jun 2012 19:07:47 +0000 (21:07 +0200)
blobmsg.c
blobmsg.h

index 61b6a0854999df4dba0ab941623e380193691596..12f603c774ab39a985982d88340344f61b619674 100644 (file)
--- a/blobmsg.c
+++ b/blobmsg.c
@@ -61,6 +61,22 @@ 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)
+{
+       struct blob_attr *cur;
+       int rem;
+
+       blobmsg_for_each_attr(cur, attr, rem) {
+               if (blobmsg_type(cur) != type)
+                       return false;
+
+               if (!blobmsg_check_attr(cur, name))
+                       return false;
+       }
+
+       return true;
+}
+
 int blobmsg_parse(const struct blobmsg_policy *policy, int policy_len,
                   struct blob_attr **tb, void *data, int len)
 {
index 61b5331d5800180d1739ee064d20ec003cc60fc8..f5043510b04fceecc3161841f01e0ecb98fc0014 100644 (file)
--- a/blobmsg.h
+++ b/blobmsg.h
@@ -78,6 +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);
 int blobmsg_parse(const struct blobmsg_policy *policy, int policy_len,
                   struct blob_attr **tb, void *data, int len);