From a46c577af5c5855939ca3192a56396e15bebf0f8 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 27 Dec 2010 14:36:16 -0800 Subject: [PATCH] ofpbuf: New function ofpbuf_clone_data_with_headroom(). 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 --- 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 8191c87b..34aad938 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 15f0ab16..442c90c9 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); -- 2.30.2