[ovs-dev] [netlink flows v2 08/12] ofpbuf: New function ofpbuf_clone_data_with_headroom().
Ben Pfaff
blp at nicira.com
Tue Dec 28 22:33:03 UTC 2010
This new function is a simple helper that creates a new ofpbuf with some
initial contents plus a caller-specified amount of headroom.
This will be used in upcoming commits.
Acked-by: Jesse Gross <jesse at nicira.com>
---
lib/ofpbuf.c | 21 +++++++++++++++++----
lib/ofpbuf.h | 2 ++
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/lib/ofpbuf.c b/lib/ofpbuf.c
index 8191c87..34aad93 100644
--- a/lib/ofpbuf.c
+++ b/lib/ofpbuf.c
@@ -123,6 +123,9 @@ ofpbuf_new_with_headroom(size_t size, size_t headroom)
return b;
}
+/* Creates and returns a new ofpbuf that initially contains a copy of the
+ * 'buffer->size' bytes of data starting at 'buffer->data' with no headroom or
+ * tailroom. */
struct ofpbuf *
ofpbuf_clone(const struct ofpbuf *buffer)
{
@@ -134,15 +137,25 @@ ofpbuf_clone(const struct ofpbuf *buffer)
struct ofpbuf *
ofpbuf_clone_with_headroom(const struct ofpbuf *buffer, size_t headroom)
{
- struct ofpbuf *b = ofpbuf_new_with_headroom(buffer->size, headroom);
- ofpbuf_put(b, buffer->data, buffer->size);
- return b;
+ return ofpbuf_clone_data_with_headroom(buffer->data, buffer->size,
+ headroom);
}
+/* Creates and returns a new ofpbuf that initially contains a copy of the
+ * 'size' bytes of data starting at 'data' with no headroom or tailroom. */
struct ofpbuf *
ofpbuf_clone_data(const void *data, size_t size)
{
- struct ofpbuf *b = ofpbuf_new(size);
+ return ofpbuf_clone_data_with_headroom(data, size, 0);
+}
+
+/* Creates and returns a new ofpbuf that initially contains 'headroom' bytes of
+ * headroom followed by a copy of the 'size' bytes of data starting at
+ * 'data'. */
+struct ofpbuf *
+ofpbuf_clone_data_with_headroom(const void *data, size_t size, size_t headroom)
+{
+ struct ofpbuf *b = ofpbuf_new_with_headroom(size, headroom);
ofpbuf_put(b, data, size);
return b;
}
diff --git a/lib/ofpbuf.h b/lib/ofpbuf.h
index 15f0ab1..442c90c 100644
--- a/lib/ofpbuf.h
+++ b/lib/ofpbuf.h
@@ -69,6 +69,8 @@ struct ofpbuf *ofpbuf_clone(const struct ofpbuf *);
struct ofpbuf *ofpbuf_clone_with_headroom(const struct ofpbuf *,
size_t headroom);
struct ofpbuf *ofpbuf_clone_data(const void *, size_t);
+struct ofpbuf *ofpbuf_clone_data_with_headroom(const void *, size_t,
+ size_t headroom);
void ofpbuf_delete(struct ofpbuf *);
void *ofpbuf_at(const struct ofpbuf *, size_t offset, size_t size);
--
1.7.1
More information about the dev
mailing list