diff options
Diffstat (limited to 'lib/isc/buffer.c')
-rw-r--r-- | lib/isc/buffer.c | 172 |
1 files changed, 50 insertions, 122 deletions
diff --git a/lib/isc/buffer.c b/lib/isc/buffer.c index 6699f6e1..ba84b302 100644 --- a/lib/isc/buffer.c +++ b/lib/isc/buffer.c @@ -17,34 +17,25 @@ #include <config.h> -#include <string.h> - -#include <isc/assertions.h> #include <isc/buffer.h> +#include <isc/mem.h> +#include <isc/region.h> +#include <isc/string.h> +#include <isc/util.h> void -isc_buffer_init(isc_buffer_t *b, void *base, unsigned int length, - unsigned int type) -{ +isc__buffer_init(isc_buffer_t *b, void *base, unsigned int length) { /* * Make 'b' refer to the 'length'-byte region starting at base. */ REQUIRE(b != NULL); - b->magic = ISC_BUFFER_MAGIC; - b->type = type; - b->base = base; - b->length = length; - b->used = 0; - b->current = 0; - b->active = 0; - b->mctx = NULL; - ISC_LINK_INIT(b, link); + ISC__BUFFER_INIT(b, base, length); } void -isc_buffer_invalidate(isc_buffer_t *b) { +isc__buffer_invalidate(isc_buffer_t *b) { /* * Make 'b' an invalid buffer. */ @@ -53,28 +44,11 @@ isc_buffer_invalidate(isc_buffer_t *b) { REQUIRE(!ISC_LINK_LINKED(b, link)); REQUIRE(b->mctx == NULL); - b->magic = 0; - b->type = 0; - b->base = NULL; - b->length = 0; - b->used = 0; - b->current = 0; - b->active = 0; -} - -unsigned int -isc_buffer_type(isc_buffer_t *b) { - /* - * The type of 'b'. - */ - - REQUIRE(ISC_BUFFER_VALID(b)); - - return (b->type); + ISC__BUFFER_INVALIDATE(b); } void -isc_buffer_region(isc_buffer_t *b, isc_region_t *r) { +isc__buffer_region(isc_buffer_t *b, isc_region_t *r) { /* * Make 'r' refer to the region of 'b'. */ @@ -82,12 +56,11 @@ isc_buffer_region(isc_buffer_t *b, isc_region_t *r) { REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(r != NULL); - r->base = b->base; - r->length = b->length; + ISC__BUFFER_REGION(b, r); } void -isc_buffer_used(isc_buffer_t *b, isc_region_t *r) { +isc__buffer_usedregion(isc_buffer_t *b, isc_region_t *r) { /* * Make 'r' refer to the used region of 'b'. */ @@ -95,12 +68,11 @@ isc_buffer_used(isc_buffer_t *b, isc_region_t *r) { REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(r != NULL); - r->base = b->base; - r->length = b->used; + ISC__BUFFER_USEDREGION(b, r); } void -isc_buffer_available(isc_buffer_t *b, isc_region_t *r) { +isc__buffer_availableregion(isc_buffer_t *b, isc_region_t *r) { /* * Make 'r' refer to the available region of 'b'. */ @@ -108,12 +80,11 @@ isc_buffer_available(isc_buffer_t *b, isc_region_t *r) { REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(r != NULL); - r->base = (unsigned char *)b->base + b->used; - r->length = b->length - b->used; + ISC__BUFFER_AVAILABLEREGION(b, r); } void -isc_buffer_add(isc_buffer_t *b, unsigned int n) { +isc__buffer_add(isc_buffer_t *b, unsigned int n) { /* * Increase the 'used' region of 'b' by 'n' bytes. */ @@ -121,11 +92,11 @@ isc_buffer_add(isc_buffer_t *b, unsigned int n) { REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(b->used + n <= b->length); - b->used += n; + ISC__BUFFER_ADD(b, n); } void -isc_buffer_subtract(isc_buffer_t *b, unsigned int n) { +isc__buffer_subtract(isc_buffer_t *b, unsigned int n) { /* * Decrease the 'used' region of 'b' by 'n' bytes. */ @@ -133,28 +104,22 @@ isc_buffer_subtract(isc_buffer_t *b, unsigned int n) { REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(b->used >= n); - b->used -= n; - if (b->current > b->used) - b->current = b->used; - if (b->active > b->used) - b->active = b->used; + ISC__BUFFER_SUBTRACT(b, n); } void -isc_buffer_clear(isc_buffer_t *b) { +isc__buffer_clear(isc_buffer_t *b) { /* * Make the used region empty. */ REQUIRE(ISC_BUFFER_VALID(b)); - b->used = 0; - b->current = 0; - b->active = 0; + ISC__BUFFER_CLEAR(b); } void -isc_buffer_consumed(isc_buffer_t *b, isc_region_t *r) { +isc__buffer_consumedregion(isc_buffer_t *b, isc_region_t *r) { /* * Make 'r' refer to the consumed region of 'b'. */ @@ -162,12 +127,11 @@ isc_buffer_consumed(isc_buffer_t *b, isc_region_t *r) { REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(r != NULL); - r->base = b->base; - r->length = b->current; + ISC__BUFFER_CONSUMEDREGION(b, r); } void -isc_buffer_remaining(isc_buffer_t *b, isc_region_t *r) { +isc__buffer_remainingregion(isc_buffer_t *b, isc_region_t *r) { /* * Make 'r' refer to the remaining region of 'b'. */ @@ -175,12 +139,11 @@ isc_buffer_remaining(isc_buffer_t *b, isc_region_t *r) { REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(r != NULL); - r->base = (unsigned char *)b->base + b->current; - r->length = b->used - b->current; + ISC__BUFFER_REMAININGREGION(b, r); } void -isc_buffer_active(isc_buffer_t *b, isc_region_t *r) { +isc__buffer_activeregion(isc_buffer_t *b, isc_region_t *r) { /* * Make 'r' refer to the active region of 'b'. */ @@ -188,43 +151,34 @@ isc_buffer_active(isc_buffer_t *b, isc_region_t *r) { REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(r != NULL); - if (b->current < b->active) { - r->base = (unsigned char *)b->base + b->current; - r->length = b->active - b->current; - } else { - r->base = NULL; - r->length = 0; - } + ISC__BUFFER_ACTIVEREGION(b, r); } void -isc_buffer_setactive(isc_buffer_t *b, unsigned int n) { - unsigned int active; - +isc__buffer_setactive(isc_buffer_t *b, unsigned int n) { /* * Sets the end of the active region 'n' bytes after current. */ REQUIRE(ISC_BUFFER_VALID(b)); - active = b->current + n; - REQUIRE(active <= b->used); + REQUIRE(b->current + n <= b->used); - b->active = active; + ISC__BUFFER_SETACTIVE(b, n); } void -isc_buffer_first(isc_buffer_t *b) { +isc__buffer_first(isc_buffer_t *b) { /* * Make the consumed region empty. */ REQUIRE(ISC_BUFFER_VALID(b)); - b->current = 0; + ISC__BUFFER_FIRST(b); } void -isc_buffer_forward(isc_buffer_t *b, unsigned int n) { +isc__buffer_forward(isc_buffer_t *b, unsigned int n) { /* * Increase the 'consumed' region of 'b' by 'n' bytes. */ @@ -232,11 +186,11 @@ isc_buffer_forward(isc_buffer_t *b, unsigned int n) { REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(b->current + n <= b->used); - b->current += n; + ISC__BUFFER_FORWARD(b, n); } void -isc_buffer_back(isc_buffer_t *b, unsigned int n) { +isc__buffer_back(isc_buffer_t *b, unsigned int n) { /* * Decrease the 'consumed' region of 'b' by 'n' bytes. */ @@ -244,7 +198,7 @@ isc_buffer_back(isc_buffer_t *b, unsigned int n) { REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(n <= b->current); - b->current -= n; + ISC__BUFFER_BACK(b, n); } void @@ -293,17 +247,12 @@ isc_buffer_getuint8(isc_buffer_t *b) { } void -isc_buffer_putuint8(isc_buffer_t *b, isc_uint8_t val) +isc__buffer_putuint8(isc_buffer_t *b, isc_uint8_t val) { - unsigned char *cp; - REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(b->used + 1 <= b->length); - cp = b->base; - cp += b->used; - b->used += 1; - cp[0] = (val & 0x00ff); + ISC__BUFFER_PUTUINT8(b, val); } isc_uint16_t @@ -329,18 +278,12 @@ isc_buffer_getuint16(isc_buffer_t *b) { } void -isc_buffer_putuint16(isc_buffer_t *b, isc_uint16_t val) +isc__buffer_putuint16(isc_buffer_t *b, isc_uint16_t val) { - unsigned char *cp; - REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(b->used + 2 <= b->length); - cp = b->base; - cp += b->used; - b->used += 2; - cp[0] = (val & 0xff00) >> 8; - cp[1] = (val & 0x00ff); + ISC__BUFFER_PUTUINT16(b, val); } isc_uint32_t @@ -368,52 +311,37 @@ isc_buffer_getuint32(isc_buffer_t *b) { } void -isc_buffer_putuint32(isc_buffer_t *b, isc_uint32_t val) +isc__buffer_putuint32(isc_buffer_t *b, isc_uint32_t val) { - unsigned char *cp; - REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(b->used + 4 <= b->length); - cp = b->base; - cp += b->used; - b->used += 4; - cp[0] = (unsigned char)((val & 0xff000000) >> 24); - cp[1] = (unsigned char)((val & 0x00ff0000) >> 16); - cp[2] = (unsigned char)((val & 0x0000ff00) >> 8); - cp[3] = (unsigned char)(val & 0x000000ff); + ISC__BUFFER_PUTUINT32(b, val); } void -isc_buffer_putmem(isc_buffer_t *b, unsigned char *base, unsigned int length) -{ - unsigned char *cp; - +isc__buffer_putmem(isc_buffer_t *b, unsigned char *base, unsigned int length) { REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(b->used + length <= b->length); - cp = (unsigned char *)b->base + b->used; - memcpy(cp, base, length); - b->used += length; + ISC__BUFFER_PUTMEM(b, base, length); } -isc_result_t +void isc_buffer_putstr(isc_buffer_t *b, const char *source) { - unsigned int l; + unsigned int l; unsigned char *cp; REQUIRE(ISC_BUFFER_VALID(b)); REQUIRE(source != NULL); l = strlen(source); - if (l > (b->length - b->used)) - return (ISC_R_NOSPACE); - cp = (unsigned char *)b->base + b->used; + REQUIRE(l <= isc_buffer_availablelength(b)); + + cp = isc_buffer_used(b); memcpy(cp, source, l); b->used += l; - - return (ISC_R_SUCCESS); } isc_result_t @@ -436,7 +364,7 @@ isc_buffer_copyregion(isc_buffer_t *b, isc_region_t *r) { isc_result_t isc_buffer_allocate(isc_mem_t *mctx, isc_buffer_t **dynbuffer, - unsigned int length, unsigned int type) + unsigned int length) { isc_buffer_t *dbuf; @@ -448,7 +376,7 @@ isc_buffer_allocate(isc_mem_t *mctx, isc_buffer_t **dynbuffer, return (ISC_R_NOMEMORY); isc_buffer_init(dbuf, ((unsigned char *)dbuf) + sizeof(isc_buffer_t), - length, type); + length); dbuf->mctx = mctx; *dynbuffer = dbuf; |