From afccfb9380cc7c06fcacb19410796ba87ddee677 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Fri, 30 Apr 2010 12:26:52 +0800 Subject: [vty] Allow to create a buffer in a given context. Stop using the global vty context for all allocations and allow to embed the buffer into a given context, and allocate sub buffers with the context of its parent. --- openbsc/include/vty/buffer.h | 2 +- openbsc/src/vty/buffer.c | 6 +++--- openbsc/src/vty/vty.c | 2 +- openbsc/src/vty_interface_layer3.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/openbsc/include/vty/buffer.h b/openbsc/include/vty/buffer.h index 31519400f..c9467a91d 100644 --- a/openbsc/include/vty/buffer.h +++ b/openbsc/include/vty/buffer.h @@ -28,7 +28,7 @@ /* Create a new buffer. Memory will be allocated in chunks of the given size. If the argument is 0, the library will supply a reasonable default size suitable for buffering socket I/O. */ -struct buffer *buffer_new(size_t); +struct buffer *buffer_new(void *ctx, size_t); /* Free all data in the buffer. */ void buffer_reset(struct buffer *); diff --git a/openbsc/src/vty/buffer.c b/openbsc/src/vty/buffer.c index 195d06209..0bc1760cc 100644 --- a/openbsc/src/vty/buffer.c +++ b/openbsc/src/vty/buffer.c @@ -65,11 +65,11 @@ struct buffer_data { #define BUFFER_DATA_FREE(D) talloc_free((D)) /* Make new buffer. */ -struct buffer *buffer_new(size_t size) +struct buffer *buffer_new(void *ctx, size_t size) { struct buffer *b; - b = talloc_zero(tall_vty_ctx, struct buffer); + b = talloc_zero(ctx, struct buffer); if (size) b->size = size; @@ -138,7 +138,7 @@ static struct buffer_data *buffer_add(struct buffer *b) { struct buffer_data *d; - d = _talloc_zero(tall_vty_ctx, + d = _talloc_zero(b, offsetof(struct buffer_data, data[b->size]), "buffer_add"); if (!d) diff --git a/openbsc/src/vty/vty.c b/openbsc/src/vty/vty.c index 8455b0e3d..5e4902441 100644 --- a/openbsc/src/vty/vty.c +++ b/openbsc/src/vty/vty.c @@ -51,7 +51,7 @@ struct vty *vty_new() if (!new) goto out; - new->obuf = buffer_new(0); /* Use default buffer size. */ + new->obuf = buffer_new(new, 0); /* Use default buffer size. */ if (!new->obuf) goto out_new; new->buf = _talloc_zero(new, VTY_BUFSIZ, "vty_new->buf"); diff --git a/openbsc/src/vty_interface_layer3.c b/openbsc/src/vty_interface_layer3.c index 5e3098289..fee5baee5 100644 --- a/openbsc/src/vty_interface_layer3.c +++ b/openbsc/src/vty_interface_layer3.c @@ -58,7 +58,7 @@ static int dummy_config_write(struct vty *v) static struct buffer *argv_to_buffer(int argc, const char *argv[], int base) { - struct buffer *b = buffer_new(1024); + struct buffer *b = buffer_new(NULL, 1024); int i; if (!b) -- cgit v1.2.3