From 710f761cc66c364db83020abfdeb499a63e2b33d Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 21 Oct 2011 13:46:38 +0200 Subject: [PATCH] buffer: adding buffer_cstr_release --- buffer.c | 20 ++++++++++++++++++++ buffer.h | 2 ++ 2 files changed, 22 insertions(+) diff --git a/buffer.c b/buffer.c index 4fb09e0..d8ba6fb 100644 --- a/buffer.c +++ b/buffer.c @@ -55,6 +55,26 @@ char* buffer_cstr(struct buffer *b) { return (char*) b->block; } +char* buffer_cstr_release(struct buffer *b) { + + char *ret; + + if (b->size) { + if (b->len + 1 != b->size) { + ret = realloc(b->block, b->len + 1); + } else { + ret = (char *) b->block; + } + b->block[b->len + 1] = '\0'; + } else { + ret = calloc(1, 1); + } + + buffer_init(b); + + return ret; +} + void buffer_free(struct buffer *b) { if (!b->size) diff --git a/buffer.h b/buffer.h index 8b3faae..034bf77 100644 --- a/buffer.h +++ b/buffer.h @@ -63,6 +63,8 @@ static inline void buffer_reduce(struct buffer *b, size_t len) { char* buffer_cstr(struct buffer *b); +char* buffer_cstr_release(struct buffer *b); + void buffer_free(struct buffer *b); void buffer_attach(struct buffer *b, void *str, size_t len, size_t size);