projects
/
project
/
libubox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
blob: fix handling of custom validator callback
[project/libubox.git]
/
blob.c
diff --git
a/blob.c
b/blob.c
index
6d66fcd
..
9b721d1
100644
(file)
--- a/
blob.c
+++ b/
blob.c
@@
-40,14
+40,14
@@
blob_init(struct blob_attr *attr, int id, unsigned int len)
static inline struct blob_attr *
offset_to_attr(struct blob_buf *buf, int offset)
{
static inline struct blob_attr *
offset_to_attr(struct blob_buf *buf, int offset)
{
- void *ptr = (char *)buf->buf + offset;
+ void *ptr = (char *)buf->buf + offset
- BLOB_COOKIE
;
return ptr;
}
static inline int
attr_to_offset(struct blob_buf *buf, struct blob_attr *attr)
{
return ptr;
}
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
}
void
@@
-65,7
+65,7
@@
static struct blob_attr *
blob_add(struct blob_buf *buf, struct blob_attr *pos, int id, int payload)
{
int offset = attr_to_offset(buf, pos);
blob_add(struct blob_buf *buf, struct blob_attr *pos, int id, int payload)
{
int offset = attr_to_offset(buf, pos);
- int required = (offset + sizeof(struct blob_attr) + payload) - buf->buflen;
+ int required = (offset
- BLOB_COOKIE
+ sizeof(struct blob_attr) + payload) - buf->buflen;
struct blob_attr *attr;
if (required > 0) {
struct blob_attr *attr;
if (required > 0) {
@@
-115,10
+115,9
@@
blob_fill_pad(struct blob_attr *attr)
void
blob_set_raw_len(struct blob_attr *attr, unsigned int len)
{
void
blob_set_raw_len(struct blob_attr *attr, unsigned int len)
{
- int id = blob_id(attr);
len &= BLOB_ATTR_LEN_MASK;
len &= BLOB_ATTR_LEN_MASK;
-
len |= (id << BLOB_ATTR_ID_SHIFT) & BLOB_ATTR_ID_MASK
;
- attr->id_len = cpu_to_be32(len);
+
attr->id_len &= ~cpu_to_be32(BLOB_ATTR_LEN_MASK)
;
+ attr->id_len
|
= cpu_to_be32(len);
}
struct blob_attr *
}
struct blob_attr *
@@
-237,7
+236,7
@@
blob_parse(struct blob_attr *attr, struct blob_attr **data, const struct blob_at
if (info[id].maxlen && len > info[id].maxlen)
continue;
if (info[id].maxlen && len > info[id].maxlen)
continue;
- if (info[id].validate && !info[id].validate(&info[id],
attr
))
+ if (info[id].validate && !info[id].validate(&info[id],
pos
))
continue;
}
continue;
}