[AC_MSG_RESULT([no])])
AC_CHECK_FUNC(
- [register_printf_function],
- [AC_DEFINE(HAVE_PRINTF_HOOKS)],
- [
- AC_MSG_NOTICE([printf does not support custom format specifiers!])
- vstr=true
- ]
+ [register_printf_specifier],
+ dnl new specifier functions with argument length
+ [AC_DEFINE(HAVE_PRINTF_SPECIFIER)],
+ [AC_CHECK_FUNC(
+ dnl deprecated function without argument length
+ [register_printf_function],
+ [AC_DEFINE(HAVE_PRINTF_FUNCTION)],
+ [
+ AC_MSG_NOTICE([printf does not support custom format specifiers!])
+ vstr=true
+ ]
+ )]
)
if test x$vstr = xtrue; then
#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)
-#if defined(HAVE_PRINTF_HOOKS) && !defined(USE_VSTR)
+#if !defined(USE_VSTR) && \
+ (defined(HAVE_PRINTF_FUNCTION) || defined(HAVE_PRINTF_SPECIFIER))
/**
* Printf hook print function. This is actually of type "printf_function",
/**
* Printf hook arginfo function, which is actually of type
- * "printf_arginfo_function".
+ * "printf_arginfo_[size_]function".
*/
-static int custom_arginfo(const struct printf_info *info, size_t n, int *argtypes)
+static int custom_arginfo(const struct printf_info *info, size_t n, int *argtypes
+#ifdef HAVE_PRINTF_SPECIFIER
+ , int *size
+#endif
+ )
{
int i;
printf_hook_handler_t *handler = printf_hooks[SPEC_TO_INDEX(info->spec)];
argtypes[i] = handler->argtypes[i];
}
}
+ /* we never set "size", as we have no user defined types */
return handler->numargs;
}
if (handler->numargs > 0)
{
-#if defined(HAVE_PRINTF_HOOKS) && !defined(USE_VSTR)
+#if !defined(USE_VSTR) && \
+ (defined(HAVE_PRINTF_FUNCTION) || defined(HAVE_PRINTF_SPECIFIER))
+# ifdef HAVE_PRINTF_SPECIFIER
+ register_printf_specifier(spec, custom_print, custom_arginfo);
+# else
register_printf_function(spec, custom_print, custom_arginfo);
+# endif
#else
Vstr_conf *conf = get_vstr_conf();
handler->name = malloc(2);
typedef struct printf_hook_spec_t printf_hook_spec_t;
typedef enum printf_hook_argtype_t printf_hook_argtype_t;
-#if defined(HAVE_PRINTF_HOOKS) && !defined(USE_VSTR)
+#if !defined(USE_VSTR) && \
+ (defined(HAVE_PRINTF_FUNCTION) || defined(HAVE_PRINTF_SPECIFIER))
#include <stdio.h>
#include <printf.h>