X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=blobmsg.c;h=f31715209013c31a2ec7d0f493fca4c9e6c8b284;hb=e130b08d98d59dae5d0c59210aeb7633c011b107;hp=62f83cce2b39ed7afd75b531a861e38174624653;hpb=af2f52a37bdbb34835da08b518a5f5a950d87a77;p=project%2Flibubox.git diff --git a/blobmsg.c b/blobmsg.c index 62f83cc..f317152 100644 --- a/blobmsg.c +++ b/blobmsg.c @@ -91,7 +91,7 @@ bool blobmsg_check_attr_list(const struct blob_attr *attr, int type) } int blobmsg_parse_array(const struct blobmsg_policy *policy, int policy_len, - struct blob_attr **tb, void *data, int len) + struct blob_attr **tb, void *data, unsigned int len) { struct blob_attr *attr; int i = 0; @@ -118,7 +118,7 @@ int blobmsg_parse_array(const struct blobmsg_policy *policy, int policy_len, int blobmsg_parse(const struct blobmsg_policy *policy, int policy_len, - struct blob_attr **tb, void *data, int len) + struct blob_attr **tb, void *data, unsigned int len) { struct blobmsg_hdr *hdr; struct blob_attr *attr; @@ -181,6 +181,7 @@ blobmsg_new(struct blob_buf *buf, int type, const char *name, int payload_len, v if (!attr) return NULL; + attr->id_len |= be32_to_cpu(BLOB_ATTR_EXTENDED); hdr = blob_data(attr); hdr->namelen = cpu_to_be16(namelen); strcpy((char *) hdr->name, (const char *)name); @@ -195,14 +196,14 @@ blobmsg_new(struct blob_buf *buf, int type, const char *name, int payload_len, v static inline int attr_to_offset(struct blob_buf *buf, struct blob_attr *attr) { - return (char *)attr - (char *) buf->buf; + return (char *)attr - (char *) buf->buf + BLOB_COOKIE; } void * blobmsg_open_nested(struct blob_buf *buf, const char *name, bool array) { - struct blob_attr *head = buf->head; + struct blob_attr *head; int type = array ? BLOBMSG_TYPE_ARRAY : BLOBMSG_TYPE_TABLE; unsigned long offset = attr_to_offset(buf, buf->head); void *data; @@ -242,7 +243,7 @@ blobmsg_printf(struct blob_buf *buf, const char *name, const char *format, ...) } void * -blobmsg_alloc_string_buffer(struct blob_buf *buf, const char *name, int maxlen) +blobmsg_alloc_string_buffer(struct blob_buf *buf, const char *name, unsigned int maxlen) { struct blob_attr *attr; void *data_dest; @@ -259,10 +260,10 @@ blobmsg_alloc_string_buffer(struct blob_buf *buf, const char *name, int maxlen) } void * -blobmsg_realloc_string_buffer(struct blob_buf *buf, int maxlen) +blobmsg_realloc_string_buffer(struct blob_buf *buf, unsigned int maxlen) { struct blob_attr *attr = blob_next(buf->head); - int offset = attr_to_offset(buf, blob_next(buf->head)) + blob_pad_len(attr); + int offset = attr_to_offset(buf, blob_next(buf->head)) + blob_pad_len(attr) - BLOB_COOKIE; int required = maxlen - (buf->buflen - offset); if (required <= 0) @@ -293,7 +294,7 @@ blobmsg_add_string_buffer(struct blob_buf *buf) int blobmsg_add_field(struct blob_buf *buf, int type, const char *name, - const void *data, int len) + const void *data, unsigned int len) { struct blob_attr *attr; void *data_dest;