X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fofpbuf.c;h=34aad93825126943d4ffbaaaf9be9a8aa2d2b677;hb=f9ef1c31cfcd2d9ded66588a11c59e29e5aaa2ca;hp=8191c87b7ef47b269df227e62ee0473b5f5dfc08;hpb=0dce369bdd8bf47895e59277bcbf77b74af20446;p=openvswitch 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; }