common: Add put_membuf_printf.
authorWerner Koch <wk@gnupg.org>
Fri, 29 Nov 2013 14:37:23 +0000 (15:37 +0100)
committerWerner Koch <wk@gnupg.org>
Fri, 29 Nov 2013 14:37:23 +0000 (15:37 +0100)
* common/membuf.c (put_membuf_printf): New.
--

This is just a convenience function for easier code readability.

Signed-off-by: Werner Koch <wk@gnupg.org>
common/membuf.c
common/membuf.h

index c3480df..02f1b27 100644 (file)
@@ -1,5 +1,6 @@
 /* membuf.c - A simple implementation of a dynamic buffer.
  * Copyright (C) 2001, 2003, 2009, 2011 Free Software Foundation, Inc.
+ * Copyright (C) 2013 Werner Koch
  *
  * This file is part of GnuPG.
  *
@@ -30,6 +31,7 @@
 #include <config.h>
 #include <stdlib.h>
 #include <errno.h>
+#include <stdarg.h>
 
 #include "membuf.h"
 
@@ -122,6 +124,26 @@ put_membuf_str (membuf_t *mb, const char *string)
 }
 
 
+void
+put_membuf_printf (membuf_t *mb, const char *format, ...)
+{
+  int rc;
+  va_list arg_ptr;
+  char *buf;
+
+  va_start (arg_ptr, format);
+  rc = estream_vasprintf (&buf, format, arg_ptr);
+  if (rc < 0)
+    mb->out_of_core = errno ? errno : ENOMEM;
+  va_end (arg_ptr);
+  if (rc >= 0)
+    {
+      put_membuf (mb, buf, strlen (buf));
+      xfree (buf);
+    }
+}
+
+
 void *
 get_membuf (membuf_t *mb, size_t *len)
 {
index a76c1be..bf4cf36 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef GNUPG_COMMON_MEMBUF_H
 #define GNUPG_COMMON_MEMBUF_H
 
+#include "mischelp.h"
+
 /* The definition of the structure is private, we only need it here,
    so it can be allocated on the stack. */
 struct private_membuf_s
@@ -52,6 +54,8 @@ void init_membuf_secure (membuf_t *mb, int initiallen);
 void clear_membuf (membuf_t *mb, size_t amount);
 void put_membuf  (membuf_t *mb, const void *buf, size_t len);
 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);
 const void *peek_membuf (membuf_t *mb, size_t *len);