aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2013-11-29 14:37:23 +0000
committerWerner Koch <[email protected]>2013-11-29 14:37:23 +0000
commit159d42ee6ab21d97f40ee129445f37209b875739 (patch)
tree7fa321e6669177a4db5c76594d2752a778d3fffa
parentAdd rendered versions of the gnupg logo to artwork. (diff)
downloadgnupg-159d42ee6ab21d97f40ee129445f37209b875739.tar.gz
gnupg-159d42ee6ab21d97f40ee129445f37209b875739.zip
common: Add put_membuf_printf.
* common/membuf.c (put_membuf_printf): New. -- This is just a convenience function for easier code readability. Signed-off-by: Werner Koch <[email protected]>
-rw-r--r--common/membuf.c22
-rw-r--r--common/membuf.h4
2 files changed, 26 insertions, 0 deletions
diff --git a/common/membuf.c b/common/membuf.c
index c3480dffb..02f1b2795 100644
--- a/common/membuf.c
+++ b/common/membuf.c
@@ -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)
{
diff --git a/common/membuf.h b/common/membuf.h
index a76c1be2e..bf4cf3687 100644
--- a/common/membuf.h
+++ b/common/membuf.h
@@ -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);