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)
{
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;
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);