bug-gnulib
[Top][All Lists]
Advanced

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

Re: new module 'printf-posix'


From: Bruno Haible
Subject: Re: new module 'printf-posix'
Date: Sat, 10 Mar 2007 12:25:31 +0100
User-agent: KMail/1.5.4

Eric Blake wrote:
> shouldn't all the rpl_*printf variant
> declarations be given a printf attribute when available so that users of
> the *printf-posix modules still get the benefits of gcc format string
> checking?

Good idea. I'm applying this:

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

        * lib/stdio_.h (__attribute__): New macro.
        (fprintf, vfprintf, printf, vprintf, snprintf, vsnprintf, sprintf,
        vsprintf): Specify __attribute__ __format__ for GCC.
        Suggested by Eric Blake.

*** lib/stdio_.h        10 Mar 2007 11:20:32 -0000      1.12
--- lib/stdio_.h        10 Mar 2007 11:21:05 -0000
***************
*** 31,36 ****
--- 31,49 ----
  #include <stdarg.h>
  #include <stddef.h>
  
+ #ifndef __attribute__
+ /* This feature is available in gcc versions 2.5 and later.  */
+ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
+ #  define __attribute__(Spec) /* empty */
+ # endif
+ /* The __-protected variants of `format' and `printf' attributes
+    are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
+ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+ #  define __format__ format
+ #  define __printf__ printf
+ # endif
+ #endif
+ 
  
  /* The definition of GL_LINK_WARNING is copied here.  */
  
***************
*** 43,49 ****
  #if @GNULIB_FPRINTF_POSIX@
  # if @REPLACE_FPRINTF@
  #  define fprintf rpl_fprintf
! extern int fprintf (FILE *fp, const char *format, ...);
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef fprintf
--- 56,63 ----
  #if @GNULIB_FPRINTF_POSIX@
  # if @REPLACE_FPRINTF@
  #  define fprintf rpl_fprintf
! extern int fprintf (FILE *fp, const char *format, ...)
!        __attribute__ ((__format__ (__printf__, 2, 3)));
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef fprintf
***************
*** 57,63 ****
  #if @GNULIB_VFPRINTF_POSIX@
  # if @REPLACE_VFPRINTF@
  #  define vfprintf rpl_vfprintf
! extern int vfprintf (FILE *fp, const char *format, va_list args);
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef vfprintf
--- 71,78 ----
  #if @GNULIB_VFPRINTF_POSIX@
  # if @REPLACE_VFPRINTF@
  #  define vfprintf rpl_vfprintf
! extern int vfprintf (FILE *fp, const char *format, va_list args)
!        __attribute__ ((__format__ (__printf__, 2, 0)));
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef vfprintf
***************
*** 72,78 ****
  # if @REPLACE_PRINTF@
  /* Don't break __attribute__((format(printf,M,N))).  */
  #  define printf __printf__
! extern int printf (const char *format, ...);
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef printf
--- 87,94 ----
  # if @REPLACE_PRINTF@
  /* Don't break __attribute__((format(printf,M,N))).  */
  #  define printf __printf__
! extern int printf (const char *format, ...)
!        __attribute__ ((__format__ (__printf__, 1, 2)));
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef printf
***************
*** 93,99 ****
  #if @GNULIB_VPRINTF_POSIX@
  # if @REPLACE_VPRINTF@
  #  define vprintf rpl_vprintf
! extern int vprintf (const char *format, va_list args);
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef vprintf
--- 109,116 ----
  #if @GNULIB_VPRINTF_POSIX@
  # if @REPLACE_VPRINTF@
  #  define vprintf rpl_vprintf
! extern int vprintf (const char *format, va_list args)
!        __attribute__ ((__format__ (__printf__, 1, 0)));
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef vprintf
***************
*** 109,115 ****
  #  define snprintf rpl_snprintf
  # endif
  # if @REPLACE_SNPRINTF@ || address@hidden@
! extern int snprintf (char *str, size_t size, const char *format, ...);
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef snprintf
--- 126,133 ----
  #  define snprintf rpl_snprintf
  # endif
  # if @REPLACE_SNPRINTF@ || address@hidden@
! extern int snprintf (char *str, size_t size, const char *format, ...)
!        __attribute__ ((__format__ (__printf__, 3, 4)));
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef snprintf
***************
*** 124,130 ****
  #  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
  # undef vsnprintf
--- 142,149 ----
  #  define vsnprintf rpl_vsnprintf
  # endif
  # if @REPLACE_VSNPRINTF@ || address@hidden@
! extern int vsnprintf (char *str, size_t size, const char *format, va_list 
args)
!        __attribute__ ((__format__ (__printf__, 3, 0)));
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef vsnprintf
***************
*** 137,143 ****
  #if @GNULIB_SPRINTF_POSIX@
  # if @REPLACE_SPRINTF@
  #  define sprintf rpl_sprintf
! extern int sprintf (char *str, const char *format, ...);
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef sprintf
--- 156,163 ----
  #if @GNULIB_SPRINTF_POSIX@
  # if @REPLACE_SPRINTF@
  #  define sprintf rpl_sprintf
! extern int sprintf (char *str, const char *format, ...)
!        __attribute__ ((__format__ (__printf__, 2, 3)));
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef sprintf
***************
*** 151,157 ****
  #if @GNULIB_VSPRINTF_POSIX@
  # if @REPLACE_VSPRINTF@
  #  define vsprintf rpl_vsprintf
! extern int vsprintf (char *str, const char *format, va_list args);
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef vsprintf
--- 171,178 ----
  #if @GNULIB_VSPRINTF_POSIX@
  # if @REPLACE_VSPRINTF@
  #  define vsprintf rpl_vsprintf
! extern int vsprintf (char *str, const char *format, va_list args)
!        __attribute__ ((__format__ (__printf__, 2, 0)));
  # endif
  #elif defined GNULIB_POSIXCHECK
  # undef vsprintf





reply via email to

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