X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/934960d133573e7ddbb5be4ea3804dd16a486291..3e97a905185a72c04a7feb67c7885ab4412100ee:/include/wx/wxcrtvararg.h diff --git a/include/wx/wxcrtvararg.h b/include/wx/wxcrtvararg.h index 9a9aa4cc5a..77ffc5f0d7 100644 --- a/include/wx/wxcrtvararg.h +++ b/include/wx/wxcrtvararg.h @@ -31,9 +31,12 @@ /* 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 many old Unix 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. */ +#ifdef __UNIX__ + #if defined(HAVE_VSNPRINTF) && !defined(HAVE_VSNPRINTF_DECL) #ifdef __cplusplus extern "C" @@ -52,6 +55,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_VSSCANF_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 */ @@ -62,13 +74,24 @@ } #endif +#endif /* __UNIX__ */ + /* - MinGW MSVCRT has non-standard vswprintf() (for MSVC compatibility - presumably) and normally _vsnwprintf() is used instead + mingw32 normally uses MSVCRT which has non-standard vswprintf() and so + normally _vsnwprintf() is used instead, the only exception is when mingw32 + is used with STLPort which does have a standard vswprintf() starting from + version 5.1 which we can use. */ -#if defined(HAVE_VSWPRINTF) && defined(__MINGW32__) - #undef HAVE_VSWPRINTF -#endif +#ifdef __MINGW32__ + #if defined(_STLPORT_VERSION) && _STLPORT_VERSION >= 0x510 + #ifndef HAVE_VSWPRINTF + #define HAVE_VSWPRINTF + #endif + #elif defined(HAVE_VSWPRINTF) + /* can't use non-standard vswprintf() */ + #undef HAVE_VSWPRINTF + #endif +#endif /* __MINGW32__ */ #if defined(__WATCOMC__) #define HAVE_VSWPRINTF 1 @@ -187,6 +210,9 @@ #if wxUSE_UNICODE && !defined(wxHAVE_TCHAR_SUPPORT) && !defined(HAVE_WPRINTF) #define wxNEED_WPRINTF #endif +#if wxUSE_UNICODE && !defined(wxHAVE_TCHAR_SUPPORT) && !defined(HAVE_VSWSCANF) + #define wxNEED_VSWSCANF +#endif #if defined(wxNEED_WPRINTF) @@ -205,7 +231,7 @@ #define wxCRT_PrintfW wprintf #define wxCRT_VfprintfW vfwprintf #define wxCRT_VprintfW vwprintf - + #if defined(__WINDOWS__) && !defined(HAVE_VSWPRINTF) // only non-standard vswprintf() without buffer size argument can be used here #define wxCRT_VsprintfW vswprintf @@ -223,26 +249,15 @@ int wxCRT_ScanfW(const wchar_t *format, ...); int wxCRT_SscanfW(const wchar_t *str, const wchar_t *format, ...); int wxCRT_FscanfW(FILE *stream, const wchar_t *format, ...); - int wxCRT_VsscanfW(const wchar_t *str, const wchar_t *format, va_list ap); -#else -#ifdef __VMS -#if (__DECCXX_VER >= 70100000) && !defined(__STD_CFRONT) && !defined( __NONAMESPACE_STD ) -# define wxCRT_ScanfW std::wscanf -# define wxCRT_SscanfW std::swscanf -# define wxCRT_FscanfW std::fwscanf -# define wxCRT_VsscanfW std::vswscanf #else - #define wxCRT_ScanfW wscanf - #define wxCRT_SscanfW swscanf - #define wxCRT_FscanfW fwscanf - #define wxCRT_VsscanfW vswscanf + #define wxCRT_ScanfW wxVMS_USE_STD wscanf + #define wxCRT_SscanfW wxVMS_USE_STD swscanf + #define wxCRT_FscanfW wxVMS_USE_STD fwscanf #endif +#ifdef wxNEED_VSWSCANF + int wxCRT_VsscanfW(const wchar_t *str, const wchar_t *format, va_list ap); #else - #define wxCRT_ScanfW wscanf - #define wxCRT_SscanfW swscanf - #define wxCRT_FscanfW fwscanf - #define wxCRT_VsscanfW vswscanf -#endif + #define wxCRT_VsscanfW wxVMS_USE_STD vswscanf #endif // ----------------------------------------------------------------------------