aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.in18
-rw-r--r--src/libstrongswan/printf_hook.c14
-rw-r--r--src/libstrongswan/printf_hook.h2
3 files changed, 24 insertions, 10 deletions
diff --git a/configure.in b/configure.in
index 95635b740..ff858f186 100644
--- a/configure.in
+++ b/configure.in
@@ -712,6 +712,14 @@ AC_ARG_ENABLE(
fi]
)
+AC_ARG_ENABLE(
+ [vstr],
+ AS_HELP_STRING([--enable-vstr],[enforce using the Vstr string library to replace glibc-like printf hooks (default is NO).]),
+ [if test x$enableval = xyes; then
+ vstr=true
+ fi]
+)
+
dnl =========================
dnl set up compiler and flags
dnl =========================
@@ -844,8 +852,14 @@ AC_CHECK_FUNC(
[AC_DEFINE(HAVE_PRINTF_HOOKS)],
[
AC_MSG_NOTICE([printf does not support custom format specifiers!])
- AC_HAVE_LIBRARY([vstr],[LIBS="$LIBS"]; vstr=true,[AC_MSG_ERROR([Vstr string library not found])])
- ])
+ vstr=true
+ ]
+)
+
+if test x$vstr = xtrue; then
+ AC_HAVE_LIBRARY([vstr],[LIBS="$LIBS"],[AC_MSG_ERROR([Vstr string library not found])])
+ AC_DEFINE(USE_VSTR)
+fi
if test x$gmp = xtrue; then
AC_HAVE_LIBRARY([gmp],[LIBS="$LIBS"],[AC_MSG_ERROR([GNU Multi Precision library gmp not found])])
diff --git a/src/libstrongswan/printf_hook.c b/src/libstrongswan/printf_hook.c
index 17ed2afbd..692ad9cf8 100644
--- a/src/libstrongswan/printf_hook.c
+++ b/src/libstrongswan/printf_hook.c
@@ -60,7 +60,7 @@ struct printf_hook_handler_t {
*/
int argtypes[ARGS_MAX];
-#ifndef HAVE_PRINTF_HOOKS
+#ifdef USE_VSTR
/**
* name required for Vstr
*/
@@ -75,7 +75,7 @@ static printf_hook_handler_t *printf_hooks[NUM_HANDLERS];
#define SPEC_TO_INDEX(spec) ((int)(spec) - (int)'A')
#define IS_VALID_SPEC(spec) (SPEC_TO_INDEX(spec) > -1 && SPEC_TO_INDEX(spec) < NUM_HANDLERS)
-#ifdef HAVE_PRINTF_HOOKS
+#if defined(HAVE_PRINTF_HOOKS) && !defined(USE_VSTR)
/**
* Printf hook print function. This is actually of type "printf_function",
@@ -359,7 +359,7 @@ static void add_handler(private_printf_hook_t *this, char spec,
if (handler->numargs > 0)
{
-#ifdef HAVE_PRINTF_HOOKS
+#if defined(HAVE_PRINTF_HOOKS) && !defined(USE_VSTR)
register_printf_function(spec, custom_print, custom_arginfo);
#else
Vstr_conf *conf = get_vstr_conf();
@@ -382,7 +382,7 @@ static void add_handler(private_printf_hook_t *this, char spec,
static void destroy(private_printf_hook_t *this)
{
int i;
-#ifndef HAVE_PRINTF_HOOKS
+#ifdef USE_VSTR
Vstr_conf *conf = get_vstr_conf();
#endif
@@ -391,7 +391,7 @@ static void destroy(private_printf_hook_t *this)
printf_hook_handler_t *handler = printf_hooks[i];
if (handler)
{
-#ifndef HAVE_PRINTF_HOOKS
+#ifdef USE_VSTR
vstr_fmt_del(conf, handler->name);
free(handler->name);
#endif
@@ -399,7 +399,7 @@ static void destroy(private_printf_hook_t *this)
}
}
-#ifndef HAVE_PRINTF_HOOKS
+#ifdef USE_VSTR
/* freeing the Vstr_conf of the main thread */
pthread_key_delete(vstr_conf_key);
vstr_free_conf(conf);
@@ -420,7 +420,7 @@ printf_hook_t *printf_hook_create()
memset(printf_hooks, 0, sizeof(printf_hooks));
-#ifndef HAVE_PRINTF_HOOKS
+#ifdef USE_VSTR
if (!vstr_init())
{
DBG1("failed to initialize Vstr library!");
diff --git a/src/libstrongswan/printf_hook.h b/src/libstrongswan/printf_hook.h
index 2d70a58c4..02c973580 100644
--- a/src/libstrongswan/printf_hook.h
+++ b/src/libstrongswan/printf_hook.h
@@ -26,7 +26,7 @@ typedef struct printf_hook_t printf_hook_t;
typedef struct printf_hook_spec_t printf_hook_spec_t;
typedef enum printf_hook_argtype_t printf_hook_argtype_t;
-#ifdef HAVE_PRINTF_HOOKS
+#if defined(HAVE_PRINTF_HOOKS) && !defined(USE_VSTR)
#include <stdio.h>
#include <printf.h>