[systemd-devel] [PATCH 2/4] metadata: add kdbus_meta_memdup() to dup a metadata object

Djalal Harouni tixxdz at opendz.org
Fri Jun 27 03:32:06 PDT 2014


This is a preparation patch thats add kdbus_meta_memdup() to memdup a
metadata object. This is useful to connections with a
KDBUS_HELLO_CACHE_META flag.

Signed-off-by: Djalal Harouni <tixxdz at opendz.org>
---
 metadata.c | 27 +++++++++++++++++++++++++++
 metadata.h |  3 ++-
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/metadata.c b/metadata.c
index 0db5392..6516402 100644
--- a/metadata.c
+++ b/metadata.c
@@ -70,6 +70,33 @@ void kdbus_meta_free(struct kdbus_meta *meta)
 	kfree(meta);
 }
 
+/**
+ * kdbus_meta_memdup() - duplicate metadata object
+ *
+ * @src:		metadata to duplicate
+ * @meta:		New metadata object
+ *
+ * Return: 0 on success, negative errno on failure.
+ */
+int kdbus_meta_memdup(struct kdbus_meta *src, struct kdbus_meta **meta)
+{
+	struct kdbus_meta *m;
+
+	m = kmemdup(src, sizeof(*m), GFP_KERNEL);
+	if (!m)
+		return -ENOMEM;
+
+	m->data = kmemdup(src->data, src->allocated_size, GFP_KERNEL);
+	if (!m->data) {
+		kfree(m);
+		return -ENOMEM;
+	}
+
+	*meta = m;
+
+	return 0;
+}
+
 static struct kdbus_item *
 kdbus_meta_append_item(struct kdbus_meta *meta, size_t extra_size)
 {
diff --git a/metadata.h b/metadata.h
index 77b7303..766dade 100644
--- a/metadata.h
+++ b/metadata.h
@@ -16,7 +16,7 @@
 /**
  * struct kdbus_meta - metadata buffer
  * @attached:		Flags for already attached data
- * @domain:			Domain the metadata belongs to
+ * @domain:		Domain the metadata belongs to
  * @data:		Allocated buffer
  * @size:		Number of bytes used
  * @allocated_size:	Size of buffer
@@ -35,6 +35,7 @@ struct kdbus_meta {
 struct kdbus_conn;
 
 int kdbus_meta_new(struct kdbus_meta **meta);
+int kdbus_meta_memdup(struct kdbus_meta *src, struct kdbus_meta **meta);
 int kdbus_meta_append_data(struct kdbus_meta *meta, u64 type,
 			   const void *buf, size_t len);
 int kdbus_meta_append(struct kdbus_meta *meta,
-- 
1.9.3



More information about the systemd-devel mailing list