summaryrefslogtreecommitdiff
path: root/buffer.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2002-11-21 23:27:13 +0100
committerNiels Möller <nisse@lysator.liu.se>2002-11-21 23:27:13 +0100
commitbc63438c23cae6d876b4c424cfbe5f37b3468475 (patch)
treef758ca351ac546d198926880e60ac03878004050 /buffer.c
parente82d0a9587aa6b3da2068ac3542e4896b9068a7f (diff)
downloadnettle-bc63438c23cae6d876b4c424cfbe5f37b3468475.tar.gz
* buffer.c (nettle_buffer_grow): New function, replacing
grow_realloc. (nettle_buffer_clear): Rewritten to use buffer->realloc. * buffer.h (struct nettle_buffer): REplaced the GROW function pointer with a nettle_realloc_func pointer and a void (NETTLE_BUFFER_GROW): Deleted macro, use function instead. Rev: src/nettle/buffer.c:1.2 Rev: src/nettle/buffer.h:1.3
Diffstat (limited to 'buffer.c')
-rw-r--r--buffer.c57
1 files changed, 26 insertions, 31 deletions
diff --git a/buffer.c b/buffer.c
index fcf947b1..b2c5ecb5 100644
--- a/buffer.c
+++ b/buffer.c
@@ -28,40 +28,29 @@
#include <stdlib.h>
#include <string.h>
-static int
-grow_realloc(struct nettle_buffer *buffer,
- unsigned length)
+int
+nettle_buffer_grow(struct nettle_buffer *buffer,
+ unsigned length)
{
- if (!length)
- {
- realloc(buffer->contents, 0);
- buffer->contents = NULL;
- buffer->alloc = 0;
- buffer->size = 0;
-
- return 1;
- }
- else
+ assert(buffer->size <= buffer->realloc);
+
+ if (buffer->size + length > buffer->alloc)
{
- unsigned alloc = buffer->alloc * 2 + length + 100;
- uint8_t *p = realloc(buffer->contents, alloc);
+ unsigned alloc;
+ uint8_t *p;
+
+ if (!buffer->realloc)
+ return 0;
+
+ alloc = buffer->alloc * 2 + length + 100;
+ p = buffer->realloc(buffer->realloc_ctx, buffer->contents, alloc);
if (!p)
return 0;
buffer->contents = p;
buffer->alloc = alloc;
-
- return 1;
}
-}
-
-void
-nettle_buffer_init(struct nettle_buffer *buffer)
-{
- buffer->contents = NULL;
- buffer->alloc = 0;
- buffer->grow = grow_realloc;
- buffer->size = 0;
+ return 1;
}
void
@@ -70,14 +59,20 @@ nettle_buffer_init_size(struct nettle_buffer *buffer,
{
buffer->contents = space;
buffer->alloc = length;
- buffer->grow = NULL;
+ buffer->realloc = NULL;
+ buffer->realloc_ctx = NULL;
buffer->size = 0;
}
void
nettle_buffer_clear(struct nettle_buffer *buffer)
{
- NETTLE_BUFFER_GROW(buffer, 0);
+ if (buffer->realloc)
+ buffer->realloc(buffer->realloc_ctx, buffer->contents, 0);
+
+ buffer->contents = NULL;
+ buffer->alloc = 0;
+ buffer->size = 0;
}
uint8_t *
@@ -85,9 +80,9 @@ nettle_buffer_space(struct nettle_buffer *buffer,
unsigned length)
{
uint8_t *p;
- if (buffer->size + length > buffer->alloc)
- if (!NETTLE_BUFFER_GROW(buffer, length))
- return NULL;
+
+ if (!nettle_buffer_grow(buffer, length))
+ return NULL;
p = buffer->contents + buffer->size;
buffer->size += length;