From 2477d93c6e2fbda33e423f5514d591ea64da1685 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Fri, 7 Aug 2009 00:32:41 +0200 Subject: switch vty implementation over to talloc --- openbsc/src/vty/buffer.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'openbsc/src/vty/buffer.c') diff --git a/openbsc/src/vty/buffer.c b/openbsc/src/vty/buffer.c index 63661004d..be6623dac 100644 --- a/openbsc/src/vty/buffer.c +++ b/openbsc/src/vty/buffer.c @@ -28,9 +28,12 @@ #include #include +#include #include #include +static void *tall_vbuf_ctx; + /* Buffer master. */ struct buffer { /* Data list. */ @@ -61,14 +64,14 @@ struct buffer_data { next page boundery. */ #define BUFFER_SIZE_DEFAULT 4096 -#define BUFFER_DATA_FREE(D) free((D)) +#define BUFFER_DATA_FREE(D) talloc_free((D)) /* Make new buffer. */ struct buffer *buffer_new(size_t size) { struct buffer *b; - b = calloc(1, sizeof(struct buffer)); + b = talloc_zero(tall_vbuf_ctx, struct buffer); if (size) b->size = size; @@ -89,7 +92,7 @@ struct buffer *buffer_new(size_t size) void buffer_free(struct buffer *b) { buffer_reset(b); - free(b); + talloc_free(b); } /* Make string clone. */ @@ -102,7 +105,7 @@ char *buffer_getstr(struct buffer *b) for (data = b->head; data; data = data->next) totlen += data->cp - data->sp; - if (!(s = malloc(totlen + 1))) + if (!(s = _talloc_zero(tall_vbuf_ctx, (totlen + 1), "buffer_getstr"))) return NULL; p = s; for (data = b->head; data; data = data->next) { @@ -137,7 +140,9 @@ static struct buffer_data *buffer_add(struct buffer *b) { struct buffer_data *d; - d = malloc(offsetof(struct buffer_data, data[b->size])); + d = _talloc_zero(tall_vbuf_ctx, + offsetof(struct buffer_data, data[b->size]), + "buffer_add"); if (!d) return NULL; d->cp = d->sp = 0; @@ -458,3 +463,8 @@ buffer_write(struct buffer * b, int fd, const void *p, size_t size) } return b->head ? BUFFER_PENDING : BUFFER_EMPTY; } + +static __attribute__((constructor)) void on_dso_load_vty_buf(void) +{ + tall_vbuf_ctx = talloc_named_const(NULL, 1, "vty_buffer"); +} -- cgit v1.2.3