blobmsg: add blobmsg_realloc_string_buffer()
authorFelix Fietkau <nbd@openwrt.org>
Sun, 10 Feb 2013 19:43:51 +0000 (20:43 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 10 Feb 2013 19:43:51 +0000 (20:43 +0100)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
blobmsg.c
blobmsg.h

index 7257eae..8db2238 100644 (file)
--- a/blobmsg.c
+++ b/blobmsg.c
@@ -233,6 +233,23 @@ blobmsg_alloc_string_buffer(struct blob_buf *buf, const char *name, int maxlen)
        return data_dest;
 }
 
+void *
+blobmsg_realloc_string_buffer(struct blob_buf *buf, 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 required = maxlen - (buf->buflen - offset);
+
+       if (required <= 0)
+               goto out;
+
+       blob_buf_grow(buf, required);
+       attr = blob_next(buf->head);
+
+out:
+       return blobmsg_data(attr);
+}
+
 void
 blobmsg_add_string_buffer(struct blob_buf *buf)
 {
index 9fdf486..c4bf10d 100644 (file)
--- a/blobmsg.h
+++ b/blobmsg.h
@@ -192,6 +192,7 @@ static inline char *blobmsg_get_string(struct blob_attr *attr)
 }
 
 void *blobmsg_alloc_string_buffer(struct blob_buf *buf, const char *name, int maxlen);
+void *blobmsg_realloc_string_buffer(struct blob_buf *buf, int maxlen);
 void blobmsg_add_string_buffer(struct blob_buf *buf);
 
 /* blobmsg to json formatting */