gpg: Add new compliance mode "de-vs".
[gnupg.git] / common / membuf.c
index 884c08c..4c1a844 100644 (file)
@@ -25,7 +25,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
@@ -33,9 +33,8 @@
 #include <errno.h>
 #include <stdarg.h>
 
-#include "membuf.h"
-
 #include "util.h"
+#include "membuf.h"
 
 
 /* A simple implementation of a dynamic buffer.  Use init_membuf() to
@@ -117,6 +116,20 @@ put_membuf (membuf_t *mb, const void *buf, size_t len)
 }
 
 
+/* A variant of put_membuf accepting a void * and returning a
+   gpg_error_t (which will always return 0) to be used as a generic
+   callback handler.  This function also allows buffer to be NULL.  */
+gpg_error_t
+put_membuf_cb (void *opaque, const void *buf, size_t len)
+{
+  membuf_t *data = opaque;
+
+  if (buf)
+    put_membuf (data, buf, len);
+  return 0;
+}
+
+
 void
 put_membuf_str (membuf_t *mb, const char *string)
 {
@@ -132,7 +145,7 @@ put_membuf_printf (membuf_t *mb, const char *format, ...)
   char *buf;
 
   va_start (arg_ptr, format);
-  rc = estream_vasprintf (&buf, format, arg_ptr);
+  rc = gpgrt_vasprintf (&buf, format, arg_ptr);
   if (rc < 0)
     mb->out_of_core = errno ? errno : ENOMEM;
   va_end (arg_ptr);
@@ -181,12 +194,12 @@ get_membuf_shrink (membuf_t *mb, size_t *len)
   if (!len)
     len = &dummylen;
 
-  p = get_membuf (mb, &len);
+  p = get_membuf (mb, len);
   if (!p)
     return NULL;
-  if (len)
+  if (*len)
     {
-      pp = xtryrealloc (p, len);
+      pp = xtryrealloc (p, *len);
       if (pp)
         p = pp;
     }