diff options
author | Felix Fietkau <nbd@openwrt.org> | 2014-03-12 23:08:27 +0400 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2014-03-12 23:18:12 +0400 |
commit | 58aec3c59a53147c7d924c823f7405218fb5f555 (patch) | |
tree | 5b965908d842013c5609d2d541f5dff32806b6c8 /blobmsg.h | |
parent | 926121113b903bf7b6133f782c84d0ed6c1a1a58 (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.h | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -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) |