Add a wrapper around vstr_add_fmt() to avoid having to link libcharon against libvstr
authorTobias Brunner <tobias@strongswan.org>
Fri, 17 Aug 2012 09:47:52 +0000 (11:47 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 17 Aug 2012 09:47:52 +0000 (11:47 +0200)
At least on Android the latter would be required.

src/libstrongswan/printf_hook.c
src/libstrongswan/printf_hook.h

index 8bd513c..6e51aa4 100644 (file)
@@ -238,6 +238,21 @@ static inline Vstr_conf *get_vstr_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
  */
 int vstr_wrapper_printf(const char *format, ...)
index b162e6d..7d3f23b 100644 (file)
@@ -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;\
@@ -157,10 +157,24 @@ struct printf_hook_data_t {
 };
 
 /**
+ * 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;\
 })