X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fofpbuf.c;h=9cb2ceb80f7adc0d03b906d3b6552a78a65138d3;hb=a0bc29a541fc7dc6e20137d5558e2094d614e6ab;hp=ed326fd5c0e5b50f927cafcf3f6b19406b82bc3e;hpb=064af42167bf4fc9aaea2702d80ce08074b889c0;p=openvswitch diff --git a/lib/ofpbuf.c b/lib/ofpbuf.c index ed326fd5..9cb2ceb8 100644 --- a/lib/ofpbuf.c +++ b/lib/ofpbuf.c @@ -1,17 +1,17 @@ /* * Copyright (c) 2008, 2009 Nicira Networks. * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ #include @@ -19,6 +19,7 @@ #include #include #include +#include "dynamic-string.h" #include "util.h" /* Initializes 'b' as an empty ofpbuf that contains the 'allocated' bytes of @@ -36,7 +37,7 @@ ofpbuf_use(struct ofpbuf *b, void *base, size_t allocated) b->size = 0; b->l2 = b->l3 = b->l4 = b->l7 = NULL; b->next = NULL; - b->private = NULL; + b->private_p = NULL; } /* Initializes 'b' as an empty ofpbuf with an initial capacity of 'size' @@ -103,7 +104,7 @@ ofpbuf_delete(struct ofpbuf *b) * commonly, the data in a ofpbuf is at its beginning, and thus the ofpbuf's * headroom is 0.) */ size_t -ofpbuf_headroom(struct ofpbuf *b) +ofpbuf_headroom(const struct ofpbuf *b) { return (char*)b->data - (char*)b->base; } @@ -111,7 +112,7 @@ ofpbuf_headroom(struct ofpbuf *b) /* Returns the number of bytes that may be appended to the tail end of ofpbuf * 'b' before the ofpbuf must be reallocated. */ size_t -ofpbuf_tailroom(struct ofpbuf *b) +ofpbuf_tailroom(const struct ofpbuf *b) { return (char*)ofpbuf_end(b) - (char*)ofpbuf_tail(b); } @@ -286,3 +287,18 @@ ofpbuf_try_pull(struct ofpbuf *b, size_t size) { return b->size >= size ? ofpbuf_pull(b, size) : NULL; } + +/* Returns a string that describes some of 'b''s metadata plus a hex dump of up + * to 'maxbytes' from the start of the buffer. */ +char * +ofpbuf_to_string(const struct ofpbuf *b, size_t maxbytes) +{ + struct ds s; + + ds_init(&s); + ds_put_format(&s, "size=%zu, allocated=%zu, head=%zu, tail=%zu\n", + b->size, b->allocated, + ofpbuf_headroom(b), ofpbuf_tailroom(b)); + ds_put_hex_dump(&s, b->data, MIN(b->size, maxbytes), 0, false); + return ds_cstr(&s); +}