Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.openwrt.org/project/libubox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2014-03-12 23:08:27 +0400
committerFelix Fietkau <nbd@openwrt.org>2014-03-12 23:18:12 +0400
commit58aec3c59a53147c7d924c823f7405218fb5f555 (patch)
tree5b965908d842013c5609d2d541f5dff32806b6c8 /blobmsg.h
parent926121113b903bf7b6133f782c84d0ed6c1a1a58 (diff)
blobmsg: allow data/length iterator/accessor functions to work on non-blobmsg elements
This primarily helps with simplifying the ubus APIs. blobmsg header presence is indicated by the BLOB_ATTR_EXTENDED bit in the id_len field. This changes the format ABI, but not the API. Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Diffstat (limited to 'blobmsg.h')
-rw-r--r--blobmsg.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/blobmsg.h b/blobmsg.h
index 4619643..e9e0e6e 100644
--- a/blobmsg.h
+++ b/blobmsg.h
@@ -65,7 +65,12 @@ static inline int blobmsg_type(const struct blob_attr *attr)
static inline void *blobmsg_data(const struct blob_attr *attr)
{
struct blobmsg_hdr *hdr = (struct blobmsg_hdr *) blob_data(attr);
- return (char *) hdr + blobmsg_hdrlen(be16_to_cpu(hdr->namelen));
+ char *data = blob_data(attr);
+
+ if (blob_is_extended(attr))
+ data += blobmsg_hdrlen(be16_to_cpu(hdr->namelen));
+
+ return data;
}
static inline int blobmsg_data_len(const struct blob_attr *attr)