common: New function get_membuf_shrink.
authorWerner Koch <wk@gnupg.org>
Wed, 26 Feb 2014 15:16:30 +0000 (16:16 +0100)
committerWerner Koch <wk@gnupg.org>
Wed, 26 Feb 2014 15:16:30 +0000 (16:16 +0100)
* common/membuf.c (get_membuf_shrink): New.

common/membuf.c
common/membuf.h

index 02f1b27..884c08c 100644 (file)
@@ -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
index bf4cf36..dfa236d 100644 (file)
@@ -57,6 +57,7 @@ void put_membuf_str (membuf_t *mb, const char *string);
 void put_membuf_printf (membuf_t *mb, const char *format,
                         ...) JNLIB_GCC_A_PRINTF(2,3);
 void *get_membuf (membuf_t *mb, size_t *len);
+void *get_membuf_shrink (membuf_t *mb, size_t *len);
 const void *peek_membuf (membuf_t *mb, size_t *len);
 
 #endif /*GNUPG_COMMON_MEMBUF_H*/