This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] Eliminate warnings about snprintf declaration


On Thu, May 12, 2005 at 05:55:49PM +0300, Eli Zaretskii wrote:
> Okay, here're the patches to add snprintf and vsnprintf to the list of
> functions whose declarations are checked at configure time.  Comments?

I recommend copying the libiberty maintainers directly to get their
attention.

Also, this isn't useful:

> @@ -282,7 +282,7 @@
>    sysconf times sbrk gettimeofday ffs snprintf vsnprintf \
>    pstat_getstatic pstat_getdynamic sysmp getsysinfo table sysctl wait3 wait4 \
>    realpath canonicalize_file_name __fsetlocking)
> -  AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf])
> +  AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf])
>    AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.])
>    AC_DEFINE(HAVE_SYS_NERR,    1, [Define if you have the sys_nerr variable.])
>    AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.])
> @@ -518,7 +518,7 @@
>      [AC_MSG_RESULT([no])])
>  
>    AC_CHECK_FUNCS($checkfuncs)
> -  AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf])
> +  AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf])
>    libiberty_NEED_DECLARATION(canonicalize_file_name)
>  fi

That will only affect libiberty.h when building libiberty; it won't
affect the users of libiberty.

> +#if !HAVE_DECL_SNPRINTF
> +# ifdef HAVE_DECL_SNPRINTF
> +  extern int snprintf ();
> +# else
> +/* Like sprintf but prints at most N characters.  */
> +  extern int snprintf (char *, size_t, const char *, ...) ATTRIBUTE_PRINTF_3;
> +# endif
> +#endif
> +
> +#if !HAVE_DECL_VSNPRINTF
> +# ifdef HAVE_DECL_VSNPRINTF
> +  extern int vsnprintf ();
> +# else
> +/* Like vsprintf but prints at most N characters.  */
> +  extern int vsnprintf (char *, size_t, const char *, va_list);
> +# endif
> +#endif
> +

I believe you've got this logic reversed.  You also don't want or need
the non-prototype - it's only needed for basename because basename
returns a pointer.  How about this, based on the later examples in the
file:

#if defined (HAVE_DECL_SPRINTF) && !HAVE_DECL_SNPRINTF
/* Like sprintf but prints at most N characters.  */
extern int snprintf (char *, size_t, const char *, ...) ATTRIBUTE_PRINTF_3;
#endif

#if defined (HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF
/* Like vsprintf but prints at most N characters.  */
extern int vsnprintf (char *, size_t, const char *, va_list);
#endif

-- 
Daniel Jacobowitz
CodeSourcery, LLC


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]