diff --git a/blob.c b/blob.c index c18f5a9..6d66fcd 100644 --- a/blob.c +++ b/blob.c @@ -134,6 +134,20 @@ blob_new(struct blob_buf *buf, int id, int payload) return attr; } +struct blob_attr * +blob_put_raw(struct blob_buf *buf, const void *ptr, int len) +{ + struct blob_attr *attr; + + if (len < sizeof(struct blob_attr) || !ptr) + return NULL; + + attr = blob_add(buf, blob_next(buf->head), 0, len - sizeof(struct blob_attr)); + blob_set_raw_len(buf->head, blob_pad_len(buf->head) + len); + memcpy(attr, ptr, len); + return attr; +} + struct blob_attr * blob_put(struct blob_buf *buf, int id, const void *ptr, int len) { diff --git a/blob.h b/blob.h index 88ee01c..846de6e 100644 --- a/blob.h +++ b/blob.h @@ -190,6 +190,7 @@ extern struct blob_attr *blob_put(struct blob_buf *buf, int id, const void *ptr, extern bool blob_check_type(const void *ptr, int len, int type); extern int blob_parse(struct blob_attr *attr, struct blob_attr **data, const struct blob_attr_info *info, int max); extern struct blob_attr *blob_memdup(struct blob_attr *attr); +extern struct blob_attr *blob_put_raw(struct blob_buf *buf, const void *ptr, int len); static inline struct blob_attr * blob_put_string(struct blob_buf *buf, int id, const char *str)