diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:29:32 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:29:32 -0800 |
commit | 2068259fff846977bdd4262fa27ea6cb81d35a78 (patch) | |
tree | d4c35114dd30b1fbf3e91f785f63023f97438147 /m4 | |
parent | ee88353f0c125cdc2ee7a56187fde3a10e4ff918 (diff) | |
download | genext2fs-2068259fff846977bdd4262fa27ea6cb81d35a78.tar.gz |
auto import from //depot/cupcake/@135843android-sdk-tools_r2android-sdk-1.6_r2android-sdk-1.6_r1android-sdk-1.6-docs_r1android-sdk-1.5_r3android-sdk-1.5_r1android-sdk-1.5-preandroid-1.6_r2android-1.6_r1.5android-1.6_r1.4android-1.6_r1.3android-1.6_r1.2android-1.6_r1.1android-1.6_r1android-1.5r4android-1.5r3android-1.5r2android-1.5donut-release2donut-releasedonutcupcake-releasecupcake
Diffstat (limited to 'm4')
-rw-r--r-- | m4/ac_func_scanf_can_malloc.m4 | 53 | ||||
-rw-r--r-- | m4/ac_func_snprintf.m4 | 73 |
2 files changed, 126 insertions, 0 deletions
diff --git a/m4/ac_func_scanf_can_malloc.m4 b/m4/ac_func_scanf_can_malloc.m4 new file mode 100644 index 0000000..84b0a01 --- /dev/null +++ b/m4/ac_func_scanf_can_malloc.m4 @@ -0,0 +1,53 @@ +dnl AC_FUNC_SCANF_CAN_MALLOC macro +dnl +dnl (c) Finn Thain 2006 +dnl Copying and distribution of this file, with or without modification, +dnl are permitted in any medium without royalty provided the copyright +dnl notice and this notice are preserved. + +# AC_FUNC_SCANF_CAN_MALLOC() +# -------------------------------------- +AC_DEFUN([AC_FUNC_SCANF_CAN_MALLOC], + [ AC_CHECK_HEADERS([stdlib.h]) + AC_CACHE_CHECK([whether scanf can malloc], [ac_scanf_can_malloc], + [ AC_RUN_IFELSE( + [ AC_LANG_PROGRAM( + [ +#include <stdio.h> +#if STDC_HEADERS || HAVE_STDLIB_H +#include <stdlib.h> +#endif + ], [ + union { float f; char *p; } u; + char *p; + u.f = 0; + char *scan_this = "56789"; + int matched = sscanf(scan_this, "%as", &u); + if(matched < 1) return 1; /* shouldn't happens */ + if(u.f == (float)56789) return 2; + + p = u.p; + while(*scan_this && *p == *scan_this) { + ++p; + ++scan_this; + }; + free(u.p); + if(*scan_this == 0) return 0; + return 3; + ]) + ], + [ac_scanf_can_malloc=yes], + [ac_scanf_can_malloc=no], + [ +case $host_alias in + *-*-linux* ) ac_scanf_can_malloc=yes ;; + *-*-solaris* ) ac_scanf_can_malloc=no ;; + *-*-darwin* ) ac_scanf_can_malloc=no ;; + * ) ac_scanf_can_malloc=no ;; +esac + ]) + ]) +if test x$ac_scanf_can_malloc = "xyes"; then + AC_DEFINE([SCANF_CAN_MALLOC], 1, [Define to 1 if the scanf %a conversion format mallocs a buffer. Undefine if %a format denotes a float.]) +fi + ]) diff --git a/m4/ac_func_snprintf.m4 b/m4/ac_func_snprintf.m4 new file mode 100644 index 0000000..3b1d43a --- /dev/null +++ b/m4/ac_func_snprintf.m4 @@ -0,0 +1,73 @@ +dnl From http://autoconf-archive.cryp.to/ + +dnl @synopsis AC_FUNC_SNPRINTF +dnl +dnl Checks for a fully C99 compliant snprintf, in particular checks +dnl whether it does bounds checking and returns the correct string +dnl length; does the same check for vsnprintf. If no working snprintf +dnl or vsnprintf is found, request a replacement and warn the user +dnl about it. Note: the mentioned replacement is freely available and +dnl may be used in any project regardless of it's licence (just like +dnl the autoconf special exemption). +dnl +dnl @category C +dnl @author Rüdiger Kuhlmann <info@ruediger-kuhlmann.de> +dnl @version 2002-09-26 +dnl @license AllPermissive + +AC_DEFUN([AC_FUNC_SNPRINTF], +[AC_CHECK_FUNCS(snprintf vsnprintf) +AC_MSG_CHECKING(for working snprintf) +AC_CACHE_VAL(ac_cv_have_working_snprintf, +[AC_TRY_RUN( +[#include <stdio.h> + +int main(void) +{ + char bufs[5] = { 'x', 'x', 'x', '\0', '\0' }; + char bufd[5] = { 'x', 'x', 'x', '\0', '\0' }; + int i; + i = snprintf (bufs, 2, "%s", "111"); + if (strcmp (bufs, "1")) exit (1); + if (i != 3) exit (1); + i = snprintf (bufd, 2, "%d", 111); + if (strcmp (bufd, "1")) exit (1); + if (i != 3) exit (1); + exit(0); +}], ac_cv_have_working_snprintf=yes, ac_cv_have_working_snprintf=no, ac_cv_have_working_snprintf=cross)]) +AC_MSG_RESULT([$ac_cv_have_working_snprintf]) +AC_MSG_CHECKING(for working vsnprintf) +AC_CACHE_VAL(ac_cv_have_working_vsnprintf, +[AC_TRY_RUN( +[#include <stdio.h> +#include <stdarg.h> + +int my_vsnprintf (char *buf, const char *tmpl, ...) +{ + int i; + va_list args; + va_start (args, tmpl); + i = vsnprintf (buf, 2, tmpl, args); + va_end (args); + return i; +} + +int main(void) +{ + char bufs[5] = { 'x', 'x', 'x', '\0', '\0' }; + char bufd[5] = { 'x', 'x', 'x', '\0', '\0' }; + int i; + i = my_vsnprintf (bufs, "%s", "111"); + if (strcmp (bufs, "1")) exit (1); + if (i != 3) exit (1); + i = my_vsnprintf (bufd, "%d", 111); + if (strcmp (bufd, "1")) exit (1); + if (i != 3) exit (1); + exit(0); +}], ac_cv_have_working_vsnprintf=yes, ac_cv_have_working_vsnprintf=no, ac_cv_have_working_vsnprintf=cross)]) +AC_MSG_RESULT([$ac_cv_have_working_vsnprintf]) +if test x$ac_cv_have_working_snprintf$ac_cv_have_working_vsnprintf != "xyesyes"; then + AC_LIBOBJ(snprintf) + AC_MSG_WARN([Will use fallback (v)snprintf() implementation.]) + AC_DEFINE(PREFER_PORTABLE_SNPRINTF, 1, "enable replacement (v)snprintf if system (v)snprintf is broken") +fi]) |