diff --git a/builds/windows/ftdebug.c b/builds/windows/ftdebug.c index f7f65f63e..94c22da75 100644 --- a/builds/windows/ftdebug.c +++ b/builds/windows/ftdebug.c @@ -93,28 +93,57 @@ #ifdef FT_DEBUG_LEVEL_ERROR -#include -#include -#include - +#define WIN32_LEAN_AND_MEAN #include +#ifdef _WIN32_WCE + + FT_LOACAL_DEF( void ) + OutputDebugStringA( LPCSTR lpOutputString ) + { + int len; + LPWSTR lpOutputStringW; + + + /* allocate memory space for converted string */ + len = MultiByteToWideChar( CP_ACP, MB_ERR_INVALID_CHARS, + lpOutputString, -1, NULL, 0 ); + + lpOutputStringW = (LPWSTR)_alloca( len * sizeof ( WCHAR ) ); + + if ( !len || !lpOutputStringW ) + return; + + /* now it is safe to do the translation */ + MultiByteToWideChar( CP_ACP, MB_ERR_INVALID_CHARS, + lpOutputString, -1, lpOutputStringW, len ); + + OutputDebugStringW( lpOutputStringW ); + } + +#endif /* _WIN32_WCE */ + + /* documentation is in ftdebug.h */ FT_BASE_DEF( void ) FT_Message( const char* fmt, ... ) { - static char buf[8192]; - va_list ap; + va_list ap; va_start( ap, fmt ); vfprintf( stderr, fmt, ap ); - /* send the string to the debugger as well */ - vsprintf( buf, fmt, ap ); - OutputDebugStringA( buf ); + if ( IsDebuggerPresent() ) + { + static char buf[1024]; + + + vsnprintf( buf, sizeof buf, fmt, ap ); + OutputDebugStringA( buf ); + } va_end( ap ); } @@ -125,13 +154,19 @@ FT_Panic( const char* fmt, ... ) { - static char buf[8192]; - va_list ap; + va_list ap; va_start( ap, fmt ); - vsprintf( buf, fmt, ap ); - OutputDebugStringA( buf ); + vfprintf( stderr, fmt, ap ); + if ( IsDebuggerPresent() ) + { + static char buf[1024]; + + + vsnprintf( buf, sizeof buf, fmt, ap ); + OutputDebugStringA( buf ); + } va_end( ap ); exit( EXIT_FAILURE );