aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2010-08-06 19:27:10 +0200
committerTobias Brunner <tobias@strongswan.org>2010-08-06 19:56:42 +0200
commit7c3dd613d7e5111374158c0a5a60d5b8fa35c8b8 (patch)
tree3769bf9c2aee09c040094fb051873659a5877b45
parent7c03d707a556a85f195f524b31625a60ceb5dab7 (diff)
downloadstrongswan-7c3dd613d7e5111374158c0a5a60d5b8fa35c8b8.tar.bz2
strongswan-7c3dd613d7e5111374158c0a5a60d5b8fa35c8b8.tar.xz
Added missing Vstr wrappers for asprintf.
-rw-r--r--src/libstrongswan/printf_hook.c29
-rw-r--r--src/libstrongswan/printf_hook.h6
2 files changed, 34 insertions, 1 deletions
diff --git a/src/libstrongswan/printf_hook.c b/src/libstrongswan/printf_hook.c
index 037f0b918..9c1757b9c 100644
--- a/src/libstrongswan/printf_hook.c
+++ b/src/libstrongswan/printf_hook.c
@@ -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
diff --git a/src/libstrongswan/printf_hook.h b/src/libstrongswan/printf_hook.h
index ce7e10b24..11fd66ce9 100644
--- a/src/libstrongswan/printf_hook.h
+++ b/src/libstrongswan/printf_hook.h
@@ -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,