Annotation of embedaddon/sudo/m4/ax_func_snprintf.m4, revision 1.1
1.1 ! misho 1: # ===========================================================================
! 2: # http://www.gnu.org/software/autoconf-archive/ax_func_snprintf.html
! 3: # ===========================================================================
! 4: #
! 5: # SYNOPSIS
! 6: #
! 7: # AX_FUNC_SNPRINTF
! 8: #
! 9: # DESCRIPTION
! 10: #
! 11: # Checks for a fully C99 compliant snprintf, in particular checks whether
! 12: # it does bounds checking and returns the correct string length; does the
! 13: # same check for vsnprintf. If no working snprintf or vsnprintf is found,
! 14: # request a replacement and warn the user about it. Note: the mentioned
! 15: # replacement is freely available and may be used in any project
! 16: # regardless of it's license.
! 17: #
! 18: # LICENSE
! 19: #
! 20: # Copyright (c) 2008 Ruediger Kuhlmann <info@ruediger-kuhlmann.de>
! 21: #
! 22: # Copying and distribution of this file, with or without modification, are
! 23: # permitted in any medium without royalty provided the copyright notice
! 24: # and this notice are preserved. This file is offered as-is, without any
! 25: # warranty.
! 26:
! 27: #serial 5
! 28:
! 29: AC_DEFUN([AX_FUNC_SNPRINTF],
! 30: [AC_CHECK_FUNCS(snprintf vsnprintf)
! 31: AC_MSG_CHECKING(for working snprintf)
! 32: AC_CACHE_VAL(ac_cv_have_working_snprintf,
! 33: [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
! 34:
! 35: int main(void)
! 36: {
! 37: char bufs[5] = { 'x', 'x', 'x', '\0', '\0' };
! 38: char bufd[5] = { 'x', 'x', 'x', '\0', '\0' };
! 39: int i;
! 40: i = snprintf (bufs, 2, "%s", "111");
! 41: if (strcmp (bufs, "1")) exit (1);
! 42: if (i != 3) exit (1);
! 43: i = snprintf (bufd, 2, "%d", 111);
! 44: if (strcmp (bufd, "1")) exit (1);
! 45: if (i != 3) exit (1);
! 46: exit(0);
! 47: }]])],[ac_cv_have_working_snprintf=yes],[ac_cv_have_working_snprintf=no],[ac_cv_have_working_snprintf=cross])])
! 48: AC_MSG_RESULT([$ac_cv_have_working_snprintf])
! 49: AC_MSG_CHECKING(for working vsnprintf)
! 50: AC_CACHE_VAL(ac_cv_have_working_vsnprintf,
! 51: [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
! 52: #include <stdarg.h>
! 53:
! 54: int my_vsnprintf (char *buf, const char *tmpl, ...)
! 55: {
! 56: int i;
! 57: va_list args;
! 58: va_start (args, tmpl);
! 59: i = vsnprintf (buf, 2, tmpl, args);
! 60: va_end (args);
! 61: return i;
! 62: }
! 63:
! 64: int main(void)
! 65: {
! 66: char bufs[5] = { 'x', 'x', 'x', '\0', '\0' };
! 67: char bufd[5] = { 'x', 'x', 'x', '\0', '\0' };
! 68: int i;
! 69: i = my_vsnprintf (bufs, "%s", "111");
! 70: if (strcmp (bufs, "1")) exit (1);
! 71: if (i != 3) exit (1);
! 72: i = my_vsnprintf (bufd, "%d", 111);
! 73: if (strcmp (bufd, "1")) exit (1);
! 74: if (i != 3) exit (1);
! 75: exit(0);
! 76: }]])],[ac_cv_have_working_vsnprintf=yes],[ac_cv_have_working_vsnprintf=no],[ac_cv_have_working_vsnprintf=cross])])
! 77: AC_MSG_RESULT([$ac_cv_have_working_vsnprintf])
! 78: if test x$ac_cv_have_working_snprintf$ac_cv_have_working_vsnprintf != "xyesyes"; then
! 79: AC_LIBOBJ(snprintf)
! 80: AC_MSG_WARN([Replacing missing/broken (v)snprintf() with sudo's version.])
! 81: AC_DEFINE(PREFER_PORTABLE_SNPRINTF, 1, [Enable replacement (v)snprintf if system (v)snprintf is broken.])
! 82: fi])
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>