From 556562086acd2bc2f8e3aa3126ebf155715e042b Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 26 Feb 2014 16:16:30 +0100 Subject: common: New function get_membuf_shrink. * common/membuf.c (get_membuf_shrink): New. --- common/membuf.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'common/membuf.c') diff --git a/common/membuf.c b/common/membuf.c index 02f1b2795..884c08cf3 100644 --- a/common/membuf.c +++ b/common/membuf.c @@ -170,6 +170,31 @@ get_membuf (membuf_t *mb, size_t *len) } +/* Same as get_membuf but shrinks the reallocated space to the + required size. */ +void * +get_membuf_shrink (membuf_t *mb, size_t *len) +{ + void *p, *pp; + size_t dummylen; + + if (!len) + len = &dummylen; + + p = get_membuf (mb, &len); + if (!p) + return NULL; + if (len) + { + pp = xtryrealloc (p, len); + if (pp) + p = pp; + } + + return p; +} + + /* Peek at the membuf MB. On success a pointer to the buffer is returned which is valid until the next operation on MB. If LEN is not NULL the current LEN of the buffer is stored there. On error -- cgit v1.2.3