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 <wk@gnupg.org>
This commit is contained in:
Werner Koch 2013-11-29 15:37:23 +01:00
parent 2c9613f326
commit 159d42ee6a
2 changed files with 26 additions and 0 deletions

View 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)
{

View 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);