From 7ab348370ce072cf7a0af190f596059de0f20246 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Fri, 17 Aug 2012 11:47:52 +0200 Subject: [PATCH] Add a wrapper around vstr_add_fmt() to avoid having to link libcharon against libvstr At least on Android the latter would be required. --- src/libstrongswan/printf_hook.c | 15 +++++++++++++++ src/libstrongswan/printf_hook.h | 18 ++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/libstrongswan/printf_hook.c b/src/libstrongswan/printf_hook.c index 8bd513c05..6e51aa4c3 100644 --- a/src/libstrongswan/printf_hook.c +++ b/src/libstrongswan/printf_hook.c @@ -237,6 +237,21 @@ static inline Vstr_conf *get_vstr_conf() return conf; } +/** + * Described in header + */ +size_t vstr_print_in_hook(struct Vstr_base *base, size_t pos, const char *fmt, + ...) +{ + va_list args; + int written; + + va_start(args, fmt); + written = vstr_add_vfmt(base, pos, fmt, args); + va_end(args); + return written; +} + /** * Wrapper functions for printf and alike */ diff --git a/src/libstrongswan/printf_hook.h b/src/libstrongswan/printf_hook.h index b162e6d97..7d3f23bce 100644 --- a/src/libstrongswan/printf_hook.h +++ b/src/libstrongswan/printf_hook.h @@ -61,7 +61,7 @@ struct printf_hook_data_t { * Helper macro to be used in printf hook callbacks. */ #define print_in_hook(data, fmt, ...) ({\ - int _written = fprintf(data->stream, fmt, ##__VA_ARGS__);\ + ssize_t _written = fprintf(data->stream, fmt, ##__VA_ARGS__);\ if (_written < 0)\ {\ _written = 0;\ @@ -156,11 +156,25 @@ struct printf_hook_data_t { size_t pos; }; +/** + * Wrapper around vstr_add_vfmt(), avoids having to link all users of + * print_in_hook() against libvstr. + * + * @param base Vstr_string to add string to + * @param pos position to write to + * @param fmt format string + * @param ... arguments + * @return number of characters written + */ +size_t vstr_print_in_hook(struct Vstr_base *base, size_t pos, const char *fmt, + ...); + /** * Helper macro to be used in printf hook callbacks. */ #define print_in_hook(data, fmt, ...) ({\ - int _written = vstr_add_fmt(data->base, data->pos, fmt, ##__VA_ARGS__);\ + size_t _written; \ + _written = vstr_print_in_hook(data->base, data->pos, fmt, ##__VA_ARGS__);\ data->pos += _written;\ _written;\ })