X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/57c42b6227e191d59ae544393e127f8c3793b8e7..dd9f8b6bb6935360a8271dc3e8749fb026b601a8:/include/wx/wxcrtvararg.h diff --git a/include/wx/wxcrtvararg.h b/include/wx/wxcrtvararg.h index 9dbfe7ebe5..2e52bb23df 100644 --- a/include/wx/wxcrtvararg.h +++ b/include/wx/wxcrtvararg.h @@ -63,11 +63,24 @@ #endif /* - 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 +#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 #endif #if wxUSE_PRINTF_POS_PARAMS @@ -175,16 +188,6 @@ #define wxCRT_VprintfA vprintf #define wxCRT_VsprintfA vsprintf -#define wxCRT_FprintfW fwprintf -#define wxCRT_PrintfW wprintf -#define wxCRT_VfprintfW vfwprintf -#define wxCRT_VprintfW vwprintf - -#if defined(__WINDOWS__) && !HAVE_VSWPRINTF -// only non-standard vswprintf() without buffer size argument can be used here -#define wxCRT_VsprintfW vswprintf -#endif - /* In Unicode mode we need to have all standard functions such as wprintf() and so on but not all systems have them so use our own implementations in this @@ -193,6 +196,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) @@ -206,6 +212,16 @@ int wxCRT_VfprintfW( FILE *stream, const wchar_t *format, va_list ap ); int wxCRT_VprintfW( const wchar_t *format, va_list ap ); int wxCRT_VsprintfW( wchar_t *str, const wchar_t *format, va_list ap ); +#else /* !wxNEED_WPRINTF */ + #define wxCRT_FprintfW fwprintf + #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 + #endif #endif /* wxNEED_WPRINTF */ @@ -219,12 +235,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, ...); +#else + #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 + #define wxCRT_VsscanfW wxVMS_USE_STD vswscanf #endif // ----------------------------------------------------------------------------