Patch for Visual Studio 2003 and earlier.
This patch will be easy to extend in the future.
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 6fbbf16..c45bb4a 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -2038,39 +2038,13 @@
vfprintf( _fp, format, va );
}
else {
-#if defined(_MSC_VER) && (_MSC_VER >= 1400 )
- #if defined(WINCE)
- int len = 512;
- for (;;) {
- len = len*2;
- char* str = new char[len]();
- const int required = _vsnprintf(str, len, format, va);
- delete[] str;
- if ( required != -1 ) {
- len = required;
- break;
- }
- }
- #else
- int len = _vscprintf( format, va );
- #endif
-#else
- int len = vsnprintf( 0, 0, format, va );
-#endif
+ int len = TIXML_VSCPRINTF( format, va );
// Close out and re-start the va-args
va_end( va );
va_start( va, format );
TIXMLASSERT( _buffer.Size() > 0 && _buffer[_buffer.Size() - 1] == 0 );
char* p = _buffer.PushArr( len ) - 1; // back up over the null terminator.
-#if defined(_MSC_VER) && (_MSC_VER >= 1400 )
- #if defined(WINCE)
- _vsnprintf( p, len+1, format, va );
- #else
- vsnprintf_s( p, len+1, _TRUNCATE, format, va );
- #endif
-#else
- vsnprintf( p, len+1, format, va );
-#endif
+ TIXML_VSNPRINTF( p, len+1, format, va );
}
va_end( va );
}
diff --git a/tinyxml2.h b/tinyxml2.h
index af14205..d10658b 100755
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -92,31 +92,66 @@
#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE)
-// Microsoft visual studio, version 2005 and higher.
-/*int _snprintf_s(
- char *buffer,
- size_t sizeOfBuffer,
- size_t count,
- const char *format [,
- argument] ...
-);*/
-inline int TIXML_SNPRINTF( char* buffer, size_t size, const char* format, ... )
-{
- va_list va;
- va_start( va, format );
- int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va );
- va_end( va );
- return result;
-}
-#define TIXML_SSCANF sscanf_s
-#elif defined WINCE
-#define TIXML_SNPRINTF _snprintf
-#define TIXML_SSCANF sscanf
+ // Microsoft visual studio, version 2005 and higher. Not WinCE.
+ /*int _snprintf_s(
+ char *buffer,
+ size_t sizeOfBuffer,
+ size_t count,
+ const char *format [,
+ argument] ...
+ );*/
+ inline int TIXML_SNPRINTF( char* buffer, size_t size, const char* format, ... )
+ {
+ va_list va;
+ va_start( va, format );
+ int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va );
+ va_end( va );
+ return result;
+ }
+ inline int TIXML_VSNPRINTF( char* buffer, size_t size, const char* format, va_list va )
+ {
+ int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va );
+ return result;
+ }
+ #define TIXML_VSCPRINTF _vscprintf
+ #define TIXML_SSCANF sscanf_s
+#elif defined _MSC_VER
+ // Microsoft Visual Studio 2003 and earlier or WinCE
+ #define TIXML_SNPRINTF _snprintf
+ #define TIXML_VSNPRINTF _vsnprintf
+ #define TIXML_SSCANF sscanf
+ #if (_MSC_VER == 1300 ) && (!defined WINCE)
+ // Microsoft Visual Studio 2003 and not WinCE.
+ #define TIXML_VSCPRINTF _vscprintf //VS2003's C runtime has this, but VC6 C runtime or WinCE SDK doesn't have.
+ #else
+ // Microsoft Visual Studio 2003 and earlier or WinCE.
+ inline int TIXML_VSCPRINTF( const char* format, va_list va )
+ {
+ int len = 512;
+ for (;;) {
+ len = len*2;
+ char* str = new char[len]();
+ const int required = _vsnprintf(str, len, format, va);
+ delete[] str;
+ if ( required != -1 ) {
+ len = required;
+ break;
+ }
+ }
+ return len;
+ }
+ #endif
#else
-// GCC version 3 and higher
-//#warning( "Using sn* functions." )
-#define TIXML_SNPRINTF snprintf
-#define TIXML_SSCANF sscanf
+ // GCC version 3 and higher
+ //#warning( "Using sn* functions." )
+ #define TIXML_SNPRINTF snprintf
+ #define TIXML_VSNPRINTF vsnprintf
+ inline int TIXML_VSCPRINTF( const char* format, va_list va )
+ {
+ int len = vsnprintf( 0, 0, format, va );
+ return len;
+ }
+ #define TIXML_SSCANF sscanf
#endif
/* Versioning, past 1.0.14: