# HG changeset patch # User Bruno Haible # Date 1213448779 -7200 # Node ID 927afe014a7d1de8d4e69269a8d57d5cca14a22e # Parent 3384541effec2e6ae57783c9e888446563c1c20e Fix various problems in 'obstack-printf' module. diff -r 3384541effec -r 927afe014a7d ChangeLog --- a/ChangeLog Fri Jun 13 06:40:53 2008 -0600 +++ b/ChangeLog Sat Jun 14 15:06:19 2008 +0200 @@ -1,3 +1,16 @@ +2008-06-14 Bruno Haible + + * lib/obstack_printf.c (obstack_vprintf): Define the stack-allocated + array size as a constant, not as a const variable. + * m4/obstack-printf.m4 (gl_FUNC_OBSTACK_PRINTF): Require + AC_USE_SYSTEM_EXTENSIONS. + * m4/obstack-printf-posix.m4 (gl_FUNC_OBSTACK_PRINTF_POSIX): Likewise. + Test whether the obstack_printf function actually exists. + * modules/obstack-printf (Depends-on): Add extensions. + (Include): Remove obstack.h. + * modules/obstack-printf-posix (Depends-on): Add extensions. + (Include): Remove obstack.h. + 2008-06-13 Eric Blake Add obstack-printf and obstack-printf-posix modules. diff -r 3384541effec -r 927afe014a7d lib/obstack_printf.c --- a/lib/obstack_printf.c Fri Jun 13 06:40:53 2008 -0600 +++ b/lib/obstack_printf.c Sat Jun 14 15:06:19 2008 +0200 @@ -58,16 +58,16 @@ stack-allocated buffer and copy, to reduce the likelihood of a small-size malloc. Otherwise, print directly into the obstack. */ - const size_t cutoff = 1024; - char buf[cutoff]; + enum { CUTOFF = 1024 }; + char buf[CUTOFF]; char *base = obstack_next_free (obs); size_t len = obstack_room (obs); char *str; - if (len < cutoff) + if (len < CUTOFF) { base = buf; - len = cutoff; + len = CUTOFF; } str = vasnprintf (base, &len, format, args); if (!str) diff -r 3384541effec -r 927afe014a7d m4/obstack-printf-posix.m4 --- a/m4/obstack-printf-posix.m4 Fri Jun 13 06:40:53 2008 -0600 +++ b/m4/obstack-printf-posix.m4 Sat Jun 14 15:06:19 2008 +0200 @@ -1,4 +1,4 @@ -# obstack-printf-posix.m4 serial 1 +# obstack-printf-posix.m4 serial 2 dnl Copyright (C) 2008 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -6,6 +6,9 @@ AC_DEFUN([gl_FUNC_OBSTACK_PRINTF_POSIX], [ + dnl Persuade glibc to declare obstack_printf(), obstack_vprintf(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) @@ -20,61 +23,64 @@ AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_obstack_printf_posix=no - case "$gl_cv_func_printf_sizes_c99" in - *yes) - case "$gl_cv_func_printf_long_double" in - *yes) - case "$gl_cv_func_printf_infinite" in - *yes) - case "$gl_cv_func_printf_infinite_long_double" in - *yes) - case "$gl_cv_func_printf_directive_a" in - *yes) - case "$gl_cv_func_printf_directive_f" in - *yes) - case "$gl_cv_func_printf_directive_n" in - *yes) - case "$gl_cv_func_printf_positions" in - *yes) - case "$gl_cv_func_printf_flag_grouping" in - *yes) - case "$gl_cv_func_printf_flag_leftadjust" in - *yes) - case "$gl_cv_func_printf_flag_zero" in - *yes) - case "$gl_cv_func_printf_precision" in - *yes) - case "$gl_cv_func_printf_enomem" in - *yes) - # obstack_printf exists and is - # already POSIX compliant. - gl_cv_func_obstack_printf_posix= yes - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac + AC_CHECK_FUNCS_ONCE([obstack_printf]) + if test $ac_cv_func_obstack_printf = yes ; then + case "$gl_cv_func_printf_sizes_c99" in + *yes) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + case "$gl_cv_func_printf_directive_a" in + *yes) + case "$gl_cv_func_printf_directive_f" in + *yes) + case "$gl_cv_func_printf_directive_n" in + *yes) + case "$gl_cv_func_printf_positions" in + *yes) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + case "$gl_cv_func_printf_flag_zero" in + *yes) + case "$gl_cv_func_printf_precision" in + *yes) + case "$gl_cv_func_printf_enomem" in + *yes) + # obstack_printf exists and is + # already POSIX compliant. + gl_cv_func_obstack_printf_posix= yes + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + fi if test $gl_cv_func_obstack_printf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE diff -r 3384541effec -r 927afe014a7d m4/obstack-printf.m4 --- a/m4/obstack-printf.m4 Fri Jun 13 06:40:53 2008 -0600 +++ b/m4/obstack-printf.m4 Sat Jun 14 15:06:19 2008 +0200 @@ -1,4 +1,4 @@ -# obstack-printf.m4 serial 1 +# obstack-printf.m4 serial 2 dnl Copyright (C) 2008 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -10,6 +10,9 @@ AC_DEFUN([gl_FUNC_OBSTACK_PRINTF], [ + dnl Persuade glibc to declare obstack_printf(), obstack_vprintf(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([obstack_printf]) if test $ac_cv_func_obstack_printf = no ; then diff -r 3384541effec -r 927afe014a7d modules/obstack-printf --- a/modules/obstack-printf Fri Jun 13 06:40:53 2008 -0600 +++ b/modules/obstack-printf Sat Jun 14 15:06:19 2008 +0200 @@ -9,6 +9,7 @@ obstack stdio vasnprintf +extensions configure.ac: gl_FUNC_OBSTACK_PRINTF @@ -17,7 +18,6 @@ Makefile.am: Include: -"obstack.h" License: diff -r 3384541effec -r 927afe014a7d modules/obstack-printf-posix --- a/modules/obstack-printf-posix Fri Jun 13 06:40:53 2008 -0600 +++ b/modules/obstack-printf-posix Sat Jun 14 15:06:19 2008 +0200 @@ -10,6 +10,7 @@ obstack stdio vasnprintf-posix +extensions configure.ac: gl_FUNC_OBSTACK_PRINTF_POSIX @@ -18,7 +19,6 @@ Makefile.am: Include: -"obstack.h" License: