From e526127cbd2f8ad88fb41229df0c9b850c722830 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 12 Oct 2018 16:43:35 +1100 Subject: Check if snprintf understands %zu. If the platforms snprintf and friends don't understand %zu, use the compat replacement. Prevents segfaults on those platforms. --- configure.ac | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'configure.ac') diff --git a/configure.ac b/configure.ac index c0e120fe9..9dacccb2d 100644 --- a/configure.ac +++ b/configure.ac @@ -2110,6 +2110,29 @@ if test "x$ac_cv_func_snprintf" = "xyes" ; then ) fi +if test "x$ac_cv_func_snprintf" = "xyes" ; then + AC_MSG_CHECKING([whether snprintf understands %zu]) + AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[ +#include +#include + ]], + [[ + size_t a = 1, b = 2; + char z[128]; + snprintf(z, sizeof z, "%zu%zu", a, b); + exit(strcmp(z, "12")); + ]])], + [AC_MSG_RESULT([yes])], + [ + AC_MSG_RESULT([no]) + AC_DEFINE([BROKEN_SNPRINTF], [1], + [snprintf does not understand %zu]) + ], + [ AC_MSG_WARN([cross compiling: Assuming working snprintf()]) ] + ) +fi + # We depend on vsnprintf returning the right thing on overflow: the # number of characters it tried to create (as per SUSv3) if test "x$ac_cv_func_vsnprintf" = "xyes" ; then -- cgit v1.2.3