]> git.saurik.com Git - wxWidgets.git/commitdiff
Added detection of vsscanf and whether or not a prototype exists in headers.
authorStefan Neis <Stefan.Neis@t-online.de>
Wed, 2 Apr 2008 12:05:27 +0000 (12:05 +0000)
committerStefan Neis <Stefan.Neis@t-online.de>
Wed, 2 Apr 2008 12:05:27 +0000 (12:05 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52980 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

configure.in
include/wx/wxcrt.h
include/wx/wxcrtvararg.h
setup.h.in
src/common/wxcrt.cpp

index 49260e76d430fe14336f67ad1cbf6ccd07d34e85..de07fb3943f2bc6a19c2e045e8a97dc7d0b0782d 100644 (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
index 04b5fa6e4d30d36b9c15f5072c044facf2f73b0b..6383a0f5d3e9be16e37a1d9ec237990fcbfd1b13 100644 (file)
 #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
 
 // ============================================================================
index 2e52bb23df09df3ec17872b4f258004c5dabdf47..85b18d6135f382dd2ca1f398ee081df842ab4173 100644 (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
     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 */
index c7a3321653f12268cdc661acdfdaacec3d72eb05..162d88073be12099586928d640ff0fe5bbe60e62 100644 (file)
  * 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
 
index 6f3377d6cd3e7b13ed557280e27d5e9164fbef1b..d6f7c35cdad77c73cb32d71073c54987f89e76da 100644 (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)