blob: add blob_memdup()
authorFelix Fietkau <nbd@openwrt.org>
Fri, 1 Jun 2012 18:54:05 +0000 (20:54 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Fri, 1 Jun 2012 18:54:20 +0000 (20:54 +0200)
blob.c
blob.h

diff --git a/blob.c b/blob.c
index 928b5c5..e74f07f 100644 (file)
--- 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));
 }
 
        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 (file)
--- 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_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)
 
 static inline struct blob_attr *
 blob_put_string(struct blob_buf *buf, int id, const char *str)