From: Felix Fietkau Date: Sun, 10 Feb 2013 19:43:33 +0000 (+0100) Subject: blob: add blob_buf_grow() X-Git-Url: http://git.archive.openwrt.org/?p=project%2Flibubox.git;a=commitdiff_plain;h=b786f852674769813061474366e936fe6e5bd22e blob: add blob_buf_grow() Signed-off-by: Felix Fietkau --- diff --git a/blob.c b/blob.c index e74f07f..c18f5a9 100644 --- a/blob.c +++ b/blob.c @@ -50,6 +50,17 @@ attr_to_offset(struct blob_buf *buf, struct blob_attr *attr) return (char *)attr - (char *) buf->buf; } +void +blob_buf_grow(struct blob_buf *buf, int required) +{ + int offset_head = attr_to_offset(buf, buf->head); + + if (!buf->grow || !buf->grow(buf, required)) + return; + + buf->head = offset_to_attr(buf, offset_head); +} + static struct blob_attr * blob_add(struct blob_buf *buf, struct blob_attr *pos, int id, int payload) { @@ -58,12 +69,7 @@ blob_add(struct blob_buf *buf, struct blob_attr *pos, int id, int payload) struct blob_attr *attr; if (required > 0) { - int offset_head = attr_to_offset(buf, buf->head); - - if (!buf->grow || !buf->grow(buf, required)) - return NULL; - - buf->head = offset_to_attr(buf, offset_head); + blob_buf_grow(buf, required); attr = offset_to_attr(buf, offset); } else { attr = pos; diff --git a/blob.h b/blob.h index 557899d..d78115f 100644 --- a/blob.h +++ b/blob.h @@ -238,6 +238,7 @@ extern void blob_set_raw_len(struct blob_attr *attr, unsigned int len); extern bool blob_attr_equal(const struct blob_attr *a1, const struct blob_attr *a2); extern int blob_buf_init(struct blob_buf *buf, int id); extern void blob_buf_free(struct blob_buf *buf); +extern void blob_buf_grow(struct blob_buf *buf, int required); extern struct blob_attr *blob_new(struct blob_buf *buf, int id, int payload); extern void *blob_nest_start(struct blob_buf *buf, int id); extern void blob_nest_end(struct blob_buf *buf, void *cookie);