1
0
mirror of https://git.savannah.gnu.org/git/gnulib.git synced 2025-08-08 17:22:05 +03:00

Fix various problems in 'obstack-printf' module.

This commit is contained in:
Bruno Haible
2008-06-14 15:06:19 +02:00
parent 7a8101a246
commit b6ee20a97a
6 changed files with 85 additions and 63 deletions

View File

@@ -1,3 +1,16 @@
2008-06-14 Bruno Haible <bruno@clisp.org>
* 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 <ebb9@byu.net> 2008-06-13 Eric Blake <ebb9@byu.net>
Add obstack-printf and obstack-printf-posix modules. Add obstack-printf and obstack-printf-posix modules.

View File

@@ -58,16 +58,16 @@ obstack_vprintf (struct obstack *obs, const char *format, va_list args)
stack-allocated buffer and copy, to reduce the likelihood of a stack-allocated buffer and copy, to reduce the likelihood of a
small-size malloc. Otherwise, print directly into the small-size malloc. Otherwise, print directly into the
obstack. */ obstack. */
const size_t cutoff = 1024; enum { CUTOFF = 1024 };
char buf[cutoff]; char buf[CUTOFF];
char *base = obstack_next_free (obs); char *base = obstack_next_free (obs);
size_t len = obstack_room (obs); size_t len = obstack_room (obs);
char *str; char *str;
if (len < cutoff) if (len < CUTOFF)
{ {
base = buf; base = buf;
len = cutoff; len = CUTOFF;
} }
str = vasnprintf (base, &len, format, args); str = vasnprintf (base, &len, format, args);
if (!str) if (!str)

View File

@@ -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 Copyright (C) 2008 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it, dnl gives unlimited permission to copy and/or distribute it,
@@ -6,6 +6,9 @@ dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_OBSTACK_PRINTF_POSIX], AC_DEFUN([gl_FUNC_OBSTACK_PRINTF_POSIX],
[ [
dnl Persuade glibc <stdio.h> to declare obstack_printf(), obstack_vprintf().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_SIZES_C99])
AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE])
@@ -20,61 +23,64 @@ AC_DEFUN([gl_FUNC_OBSTACK_PRINTF_POSIX],
AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_PRECISION])
AC_REQUIRE([gl_PRINTF_ENOMEM]) AC_REQUIRE([gl_PRINTF_ENOMEM])
gl_cv_func_obstack_printf_posix=no gl_cv_func_obstack_printf_posix=no
case "$gl_cv_func_printf_sizes_c99" in AC_CHECK_FUNCS_ONCE([obstack_printf])
*yes) if test $ac_cv_func_obstack_printf = yes ; then
case "$gl_cv_func_printf_long_double" in case "$gl_cv_func_printf_sizes_c99" in
*yes) *yes)
case "$gl_cv_func_printf_infinite" in case "$gl_cv_func_printf_long_double" in
*yes) *yes)
case "$gl_cv_func_printf_infinite_long_double" in case "$gl_cv_func_printf_infinite" in
*yes) *yes)
case "$gl_cv_func_printf_directive_a" in case "$gl_cv_func_printf_infinite_long_double" in
*yes) *yes)
case "$gl_cv_func_printf_directive_f" in case "$gl_cv_func_printf_directive_a" in
*yes) *yes)
case "$gl_cv_func_printf_directive_n" in case "$gl_cv_func_printf_directive_f" in
*yes) *yes)
case "$gl_cv_func_printf_positions" in case "$gl_cv_func_printf_directive_n" in
*yes) *yes)
case "$gl_cv_func_printf_flag_grouping" in case "$gl_cv_func_printf_positions" in
*yes) *yes)
case "$gl_cv_func_printf_flag_leftadjust" in case "$gl_cv_func_printf_flag_grouping" in
*yes) *yes)
case "$gl_cv_func_printf_flag_zero" in case "$gl_cv_func_printf_flag_leftadjust" in
*yes) *yes)
case "$gl_cv_func_printf_precision" in case "$gl_cv_func_printf_flag_zero" in
*yes) *yes)
case "$gl_cv_func_printf_enomem" in case "$gl_cv_func_printf_precision" in
*yes) *yes)
# obstack_printf exists and is case "$gl_cv_func_printf_enomem" in
# already POSIX compliant. *yes)
gl_cv_func_obstack_printf_posix= yes # obstack_printf exists and is
;; # already POSIX compliant.
esac gl_cv_func_obstack_printf_posix= yes
;; ;;
esac esac
;; ;;
esac esac
;; ;;
esac esac
;; ;;
esac esac
;; ;;
esac esac
;; ;;
esac esac
;; ;;
esac esac
;; ;;
esac esac
;; ;;
esac esac
;; ;;
esac esac
;; ;;
esac esac
;; ;;
esac esac
;;
esac
fi
if test $gl_cv_func_obstack_printf_posix = no; then if test $gl_cv_func_obstack_printf_posix = no; then
gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_LONG_DOUBLE
gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE

View File

@@ -1,4 +1,4 @@
# obstack-printf.m4 serial 1 # obstack-printf.m4 serial 2
dnl Copyright (C) 2008 Free Software Foundation, Inc. dnl Copyright (C) 2008 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it, dnl gives unlimited permission to copy and/or distribute it,
@@ -10,6 +10,9 @@ dnl obstack_vprintf behaves identically, so we only test for one.
AC_DEFUN([gl_FUNC_OBSTACK_PRINTF], AC_DEFUN([gl_FUNC_OBSTACK_PRINTF],
[ [
dnl Persuade glibc <stdio.h> to declare obstack_printf(), obstack_vprintf().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_STDIO_H_DEFAULTS])
AC_CHECK_FUNCS_ONCE([obstack_printf]) AC_CHECK_FUNCS_ONCE([obstack_printf])
if test $ac_cv_func_obstack_printf = no ; then if test $ac_cv_func_obstack_printf = no ; then

View File

@@ -9,6 +9,7 @@ Depends-on:
obstack obstack
stdio stdio
vasnprintf vasnprintf
extensions
configure.ac: configure.ac:
gl_FUNC_OBSTACK_PRINTF gl_FUNC_OBSTACK_PRINTF
@@ -17,7 +18,6 @@ gl_STDIO_MODULE_INDICATOR([obstack-printf])
Makefile.am: Makefile.am:
Include: Include:
"obstack.h"
<stdio.h> <stdio.h>
License: License:

View File

@@ -10,6 +10,7 @@ Depends-on:
obstack obstack
stdio stdio
vasnprintf-posix vasnprintf-posix
extensions
configure.ac: configure.ac:
gl_FUNC_OBSTACK_PRINTF_POSIX gl_FUNC_OBSTACK_PRINTF_POSIX
@@ -18,7 +19,6 @@ gl_STDIO_MODULE_INDICATOR([obstack-printf-posix])
Makefile.am: Makefile.am:
Include: Include:
"obstack.h"
<stdio.h> <stdio.h>
License: License: