| # -*- Autoconf -*- |
| |
| # Copyright (c) 2008 BBN Technologies Corp. All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions |
| # are met: |
| # 1. Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # 2. Redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in the |
| # documentation and/or other materials provided with the distribution. |
| # 3. Neither the name of BBN Technologies nor the names of its contributors |
| # may be used to endorse or promote products derived from this software |
| # without specific prior written permission. |
| # |
| # THIS SOFTWARE IS PROVIDED BY BBN TECHNOLOGIES AND CONTRIBUTORS ``AS IS'' |
| # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| # ARE DISCLAIMED. IN NO EVENT SHALL BBN TECHNOLOGIES OR CONTRIBUTORS BE |
| # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| # POSSIBILITY OF SUCH DAMAGE. |
| |
| |
| # Sets the shell variable snprintf_broken to "yes" if the snprintf() |
| # function is broken. |
| |
| # increment the serial number any time this file is changed |
| # serial 0 |
| AC_DEFUN([STSW_FUNC_SNPRINTF_BROKEN], |
| [ |
| stsw_enable_snprintf_tests=yes |
| AC_ARG_ENABLE( |
| [snprintf-tests], |
| [AS_HELP_STRING( |
| [--disable-snprintf-tests], |
| |
| [Do not test whether the return value of snprintf() |
| conforms to the C99 standard. Use only if you are |
| cross-compiling and you are sure that your snprintf() |
| conforms to the C99 standard.])], |
| |
| [ |
| if test "x$enableval" = "xno" ; then |
| stsw_enable_snprintf_tests=no |
| fi |
| ]) |
| AC_MSG_CHECKING([whether snprintf tests should be run]) |
| AC_MSG_RESULT([$stsw_enable_snprintf_tests]) |
| |
| snprintf_broken=no |
| if test "x$stsw_enable_snprintf_tests" = "xyes" ; then |
| AC_CACHE_CHECK( |
| [if snprintf is broken], |
| [stsw_cv_func_snprintf_broken], |
| [ |
| AC_LANG_PUSH([C]) |
| AC_RUN_IFELSE( |
| [AC_LANG_PROGRAM( |
| [[ |
| #include <stdio.h> |
| #include <string.h> |
| ]], |
| [[ |
| char buf[32]; |
| const char* teststr = "0123456789ABCDEF"; |
| memset(buf, 1, sizeof(buf)); |
| if (snprintf(buf, 8, "%s", teststr) != 16) |
| return 1; |
| if (buf[7] != '\0') |
| return 1; |
| if (snprintf(buf, sizeof(buf), "%s", teststr) != 16) |
| return 1; |
| return 0; |
| ]])], |
| [ |
| # action if true |
| stsw_cv_func_snprintf_broken=no |
| ], |
| [ |
| # action if false |
| stsw_cv_func_snprintf_broken=yes |
| ], |
| [ |
| # action if cross-compiling |
| AC_MSG_ERROR([Unable to test if snprintf() is broken when cross-compiling. Manually check snprintf() and use --disable-snprintf-tests if appropriate.]) |
| ]) |
| AC_LANG_POP([C]) |
| ]) |
| if test "x$stsw_cv_func_snprintf_broken" = "xyes" ; then |
| snprintf_broken=yes |
| fi |
| fi |
| ]) |