From 159d42ee6ab21d97f40ee129445f37209b875739 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 29 Nov 2013 15:37:23 +0100 Subject: [PATCH] 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 --- common/membuf.c | 22 ++++++++++++++++++++++ common/membuf.h | 4 ++++ 2 files changed, 26 insertions(+) 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 #include #include +#include #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);