diff --git a/blob.c b/blob.c index 928b5c5..e74f07f 100644 --- a/blob.c +++ b/blob.c @@ -243,3 +243,17 @@ blob_attr_equal(const struct blob_attr *a1, const struct blob_attr *a2) return !memcmp(a1, a2, blob_pad_len(a1)); } + +struct blob_attr * +blob_memdup(struct blob_attr *attr) +{ + struct blob_attr *ret; + int size = blob_pad_len(attr); + + ret = malloc(size); + if (!ret) + return NULL; + + memcpy(ret, attr, size); + return ret; +} diff --git a/blob.h b/blob.h index ffd9f9a..81a65ae 100644 --- a/blob.h +++ b/blob.h @@ -242,6 +242,7 @@ extern void blob_nest_end(struct blob_buf *buf, void *cookie); extern struct blob_attr *blob_put(struct blob_buf *buf, int id, const void *ptr, int len); 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); static inline struct blob_attr * blob_put_string(struct blob_buf *buf, int id, const char *str)