Added missing Vstr wrappers for asprintf.
authorTobias Brunner <tobias@strongswan.org>
Fri, 6 Aug 2010 17:27:10 +0000 (19:27 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 6 Aug 2010 17:56:42 +0000 (19:56 +0200)
src/libstrongswan/printf_hook.c
src/libstrongswan/printf_hook.h

index 037f0b9..9c1757b 100644 (file)
@@ -265,6 +265,15 @@ int vstr_wrapper_snprintf(char *str, size_t size, const char *format, ...)
        va_end(args);
        return written;
 }
+int vstr_wrapper_asprintf(char **str, const char *format, ...)
+{
+       int written;
+       va_list args;
+       va_start(args, format);
+       written = vstr_wrapper_vasprintf(str, format, args);
+       va_end(args);
+       return written;
+}
 static inline int vstr_wrapper_vprintf_internal(int fd, const char *format,
                                                                                                va_list args)
 {
@@ -317,6 +326,26 @@ int vstr_wrapper_vsnprintf(char *str, size_t size, const char *format,
 {
        return (size > 0) ? vstr_wrapper_vsnprintf_internal(str, size, format, args) : 0;
 }
+int vstr_wrapper_vasprintf(char **str, const char *format, va_list args)
+{
+       size_t len = 100;
+       int written;
+       *str = malloc(len);
+       while (TRUE)
+       {
+               va_list ac;
+               va_copy(ac, args);
+               written = vstr_wrapper_vsnprintf_internal(*str, len, format, ac);
+               va_end(ac);
+               if (written < len)
+               {
+                       break;
+               }
+               len = written + 1;
+               *str = realloc(*str, len);
+       }
+       return written;
+}
 
 #endif
 
index ce7e10b..11fd66c 100644 (file)
@@ -58,21 +58,25 @@ int vstr_wrapper_printf(const char *format, ...);
 int vstr_wrapper_fprintf(FILE *stream, const char *format, ...);
 int vstr_wrapper_sprintf(char *str, const char *format, ...);
 int vstr_wrapper_snprintf(char *str, size_t size, const char *format, ...);
+int vstr_wrapper_asprintf(char **str, const char *format, ...);
 
 int vstr_wrapper_vprintf(const char *format, va_list ap);
 int vstr_wrapper_vfprintf(FILE *stream, const char *format, va_list ap);
 int vstr_wrapper_vsprintf(char *str, const char *format, va_list ap);
 int vstr_wrapper_vsnprintf(char *str, size_t size, const char *format, va_list ap);
+int vstr_wrapper_vasprintf(char **str, const char *format, va_list ap);
 
 #define printf vstr_wrapper_printf
 #define fprintf vstr_wrapper_fprintf
 #define sprintf vstr_wrapper_sprintf
 #define snprintf vstr_wrapper_snprintf
+#define asprintf vstr_wrapper_asprintf
 
 #define vprintf vstr_wrapper_vprintf
 #define vfprintf vstr_wrapper_vfprintf
 #define vsprintf vstr_wrapper_vsprintf
 #define vsnprintf vstr_wrapper_vsnprintf
+#define vasprintf vstr_wrapper_vasprintf
 
 #endif
 
@@ -83,7 +87,7 @@ int vstr_wrapper_vsnprintf(char *str, size_t size, const char *format, va_list a
  * @param len          length of the buffer
  * @param spec         format specifier
  * @param args         arguments array
- * @return                     number of characters written
+ * @return                     number of characters written
  */
 typedef int (*printf_hook_function_t)(char *dst, size_t len,
                                                                          printf_hook_spec_t *spec,