Added detection of vsscanf and whether or not a prototype exists in headers.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52980 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Neis
2008-04-02 12:05:27 +00:00
parent 42013f4c28
commit a93cf225f7
5 changed files with 55 additions and 6 deletions

View File

@@ -4027,7 +4027,7 @@ dnl
dnl so we first check if the function is in the library
dnl
dnl FIXME: replace this mess with WX_CHECK_FUNCS()
AC_CHECK_FUNCS(snprintf vsnprintf)
AC_CHECK_FUNCS(snprintf vsnprintf vsscanf)
if test "$ac_cv_func_vsnprintf" = "yes"; then
dnl yes it is -- now check if it is in the headers
@@ -4164,6 +4164,37 @@ define HAVE_UNIX98_PRINTF as 1 in setup.h if it is available.])
fi
fi
dnl the same as above but for vsscanf() now: it's not present in at least
dnl Solaris 9 headers for gcc-3.4 (due to fixinclude's processing of stdio.h)
if test "$ac_cv_func_vsscanf" = "yes"; then
AC_CACHE_CHECK([for vsscanf declaration], wx_cv_func_vsscanf_decl,
[
AC_TRY_COMPILE(
[
#include <stdio.h>
#include <stdarg.h>
#ifdef __MSL__
#if __MSL__ >= 0x6000
namespace std {}
using namespace std;
#endif
#endif
],
[
char *buf, *parse;
vsscanf(buf, "%s", parse);
],
wx_cv_func_vsscanf_decl=yes,
wx_cv_func_vsscanf_decl=no
)
]
)
if test "$wx_cv_func_vsscanf_decl" = "yes"; then
AC_DEFINE(HAVE_VSSCANF_DECL)
fi
fi
if test "$wxUSE_UNICODE" = yes; then
dnl also look if we have wide char IO functions, notice that [f]putws are

View File

@@ -19,8 +19,11 @@
#include "wx/wxcrtbase.h"
#include "wx/string.h"
#if defined (__VISUALC__) || defined (__DMC__)
#define HAVE_NO_VSSCANF 1
#ifndef __WX_SETUP_H__
// For non-configure builds assume vsscanf is available, if not Visual C or DMC
#if !defined (__VISUALC__) && !defined (__DMC__)
#define HAVE_VSSCANF 1
#endif
#endif
// ============================================================================

View File

@@ -31,8 +31,8 @@
/* printf() family saga */
/*
For some systems [v]snprintf() exists in the system libraries but not in the
headers, so we need to declare it ourselves to be able to use it.
For some systems [v]snprintf()/vsscanf() exists in the system libraries but
not in the headers, so we need to declare it ourselves to be able to use it.
*/
#if defined(HAVE_VSNPRINTF) && !defined(HAVE_VSNPRINTF_DECL)
#ifdef __cplusplus
@@ -52,6 +52,15 @@
int snprintf(char *str, size_t size, const char *format, ...);
#endif /* !HAVE_SNPRINTF_DECL */
#if defined(HAVE_VSSCANF) && !defined(HAVE_VSSCANF_DECL)
#ifdef __cplusplus
extern "C"
#else
extern
#endif
int vsscanf(const char *str, const char *format, va_list ap);
#endif /* !HAVE_SNPRINTF_DECL */
/* Wrapper for vsnprintf if it's 3rd parameter is non-const. Note: the
* same isn't done for snprintf below, the builtin wxSnprintf_ is used
* instead since it's already a simple wrapper */

View File

@@ -896,6 +896,12 @@
* with 'char*' for the 3rd parameter instead of 'const char*' */
#undef HAVE_BROKEN_VSNPRINTF_DECL
/* Define if you have vsscanf() */
#undef HAVE_VSSCANF
/* Define if you have vsscanf() declaration in the header */
#undef HAVE_VSSCANF_DECL
/* Define if you have usleep() */
#undef HAVE_USLEEP

View File

@@ -1290,7 +1290,7 @@ wchar_t *wxFgets(wchar_t *s, int size, FILE *stream)
// wxScanf() and friends
// ----------------------------------------------------------------------------
#ifndef HAVE_NO_VSSCANF // __VISUALC__ and __DMC__ see wx/crt.h
#ifdef HAVE_VSSCANF // __VISUALC__ and __DMC__ see wx/crt.h
int wxVsscanf(const char *str, const char *format, va_list ap)
{ return wxCRT_VsscanfA(str, format, ap); }
int wxVsscanf(const wchar_t *str, const wchar_t *format, va_list ap)