bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

new module 'vsnprintf-posix'


From: Bruno Haible
Subject: new module 'vsnprintf-posix'
Date: Wed, 7 Mar 2007 02:50:41 +0100
User-agent: KMail/1.5.4

Here is the variant of the 'vsnprintf' module that provides a full POSIX
vsnprintf() function.

2007-03-06  Bruno Haible  <address@hidden>

        * modules/vsnprintf-posix: New file.
        * m4/vsnprintf-posix.m4: New file.
        * m4/vsnprintf.m4 (gl_REPLACE_VSNPRINTF): New macro, extracted from
        gl_FUNC_VSNPRINTF.
        (gl_FUNC_VSNPRINTF): Invoke it.
        * m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Set also REPLACE_VSNPRINTF.
        * lib/stdio_.h (vsnprintf): Define as a replacement if
        REPLACE_VSNPRINTF is set.
        * modules/stdio (Makefile.am): Substitute also REPLACE_VSNPRINTF.

=========================== modules/vsnprintf-posix ==========================
Description:
POSIX compatible vsnprintf() function: print formatted output to a fixed length
string

Files:
m4/vsnprintf-posix.m4
m4/printf.m4

Depends-on:
vsnprintf
vasnprintf
isnan-nolibm
isnanl-nolibm
printf-frexp
printf-frexpl

configure.ac:
gl_FUNC_VSNPRINTF_POSIX

Makefile.am:

Include:
<stdio.h>

License:
LGPL

Maintainer:
Bruno Haible

============================ m4/vsnprintf-posix.m4 ===========================
# vsnprintf-posix.m4 serial 1
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.

AC_DEFUN([gl_FUNC_VSNPRINTF_POSIX],
[
  AC_REQUIRE([gl_EOVERFLOW])
  AC_REQUIRE([gl_PRINTF_SIZES_C99])
  AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
  AC_REQUIRE([gl_PRINTF_DIRECTIVE_N])
  AC_REQUIRE([gl_PRINTF_POSITIONS])
  gl_cv_func_vsnprintf_posix=no
  AC_CHECK_FUNCS([vsnprintf])
  if test $ac_cv_func_vsnprintf = yes; then
    dnl Assume that if vsnprintf() exists, snprintf() also exists.
    gl_SNPRINTF_TRUNCATION_C99
    gl_SNPRINTF_RETVAL_C99
    gl_SNPRINTF_DIRECTIVE_N
    if expr "$gl_cv_func_printf_sizes_c99" : ".*yes" > /dev/null \
       && expr "$gl_cv_func_printf_directive_a" : ".*yes" > /dev/null \
       && expr "$gl_cv_func_printf_directive_n" : ".*yes" > /dev/null \
       && expr "$gl_cv_func_printf_positions" : ".*yes" > /dev/null \
       && expr "$gl_cv_func_snprintf_truncation_c99" : ".*yes" > /dev/null \
       && expr "$gl_cv_func_snprintf_retval_c99" : ".*yes" > /dev/null \
       && expr "$gl_cv_func_snprintf_directive_n" : ".*yes" > /dev/null; then
      # vsnprintf exists and is already POSIX compliant.
      gl_cv_func_vsnprintf_posix=yes
    fi
  fi
  if test $gl_cv_func_vsnprintf_posix = no; then
    if ! expr "$gl_cv_func_printf_directive_a" : ".*yes" > /dev/null; then
      AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], 1,
        [Define if the vasnprintf implementation needs special code for
         the 'a' and 'A' directives.])
    fi
    gl_REPLACE_VASNPRINTF
    gl_REPLACE_VSNPRINTF
  fi
])
==============================================================================
*** m4/vsnprintf.m4     21 Feb 2007 02:21:08 -0000      1.3
--- m4/vsnprintf.m4     7 Mar 2007 01:41:14 -0000
***************
*** 1,4 ****
! # vsnprintf.m4 serial 3
  dnl Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # vsnprintf.m4 serial 4
  dnl Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
***************
*** 7,17 ****
  AC_DEFUN([gl_FUNC_VSNPRINTF],
  [
    AC_REQUIRE([gl_STDIO_H_DEFAULTS])
!   AC_REPLACE_FUNCS(vsnprintf)
!   AC_CHECK_DECLS_ONCE(vsnprintf)
    if test $ac_cv_have_decl_vsnprintf = no; then
      HAVE_DECL_VSNPRINTF=0
    fi
    gl_PREREQ_VSNPRINTF
  ])
  
--- 7,28 ----
  AC_DEFUN([gl_FUNC_VSNPRINTF],
  [
    AC_REQUIRE([gl_STDIO_H_DEFAULTS])
!   AC_CHECK_FUNCS([vsnprintf])
!   if test $ac_cv_func_vsnprintf = no; then
!     gl_REPLACE_VSNPRINTF
!   fi
!   AC_CHECK_DECLS_ONCE([vsnprintf])
    if test $ac_cv_have_decl_vsnprintf = no; then
      HAVE_DECL_VSNPRINTF=0
    fi
+ ])
+ 
+ AC_DEFUN([gl_REPLACE_VSNPRINTF],
+ [
+   AC_LIBOBJ([vsnprintf])
+   if test $ac_cv_func_vsnprintf = yes; then
+     REPLACE_VSNPRINTF=1
+   fi
    gl_PREREQ_VSNPRINTF
  ])
  
*** m4/stdio_h.m4       21 Feb 2007 02:18:10 -0000      1.1
--- m4/stdio_h.m4       7 Mar 2007 01:41:14 -0000
***************
*** 1,4 ****
! # stdio_h.m4 serial 1
  dnl Copyright (C) 2007 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # stdio_h.m4 serial 2
  dnl Copyright (C) 2007 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
***************
*** 25,29 ****
--- 25,30 ----
    GNULIB_VSNPRINTF=0;    AC_SUBST([GNULIB_VSNPRINTF])
    dnl Assume proper GNU behavior unless another module says otherwise.
    HAVE_DECL_SNPRINTF=1;  AC_SUBST([HAVE_DECL_SNPRINTF])
+   REPLACE_VSNPRINTF=0;   AC_SUBST([REPLACE_VSNPRINTF])
    HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF])
  ])
*** lib/stdio_.h        6 Mar 2007 03:27:21 -0000       1.2
--- lib/stdio_.h        7 Mar 2007 01:41:14 -0000
***************
*** 53,59 ****
  #endif
  
  #if @GNULIB_VSNPRINTF@
! # if address@hidden@
  extern int vsnprintf (char *str, size_t size, const char *format, va_list 
args);
  # endif
  #elif defined GNULIB_POSIXCHECK
--- 56,65 ----
  #endif
  
  #if @GNULIB_VSNPRINTF@
! # if @REPLACE_VSNPRINTF@
! #  define vsnprintf rpl_vsnprintf
! # endif
! # if @REPLACE_VSNPRINTF@ || address@hidden@
  extern int vsnprintf (char *str, size_t size, const char *format, va_list 
args);
  # endif
  #elif defined GNULIB_POSIXCHECK
*** modules/stdio       21 Feb 2007 02:18:10 -0000      1.1
--- modules/stdio       7 Mar 2007 01:41:14 -0000
***************
*** 24,29 ****
--- 24,30 ----
              -e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \
              -e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \
              -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
+             -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
              -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
              -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
              < $(srcdir)/stdio_.h; \





reply via email to

[Prev in Thread] Current Thread [Next in Thread]