summaryrefslogtreecommitdiff
path: root/lib/isc/buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/isc/buffer.c')
-rw-r--r--lib/isc/buffer.c172
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;