Explorar o código

fix error string output when there is no formatting

Lee Thomason %!s(int64=8) %!d(string=hai) anos
pai
achega
a36f7ac776
Modificáronse 2 ficheiros con 25 adicións e 12 borrados
  1. 15 12
      tinyxml2.cpp
  2. 10 0
      xmltest.cpp

+ 15 - 12
tinyxml2.cpp

@@ -2305,20 +2305,23 @@ void XMLDocument::SetError( XMLError error, int lineNum, const char* format, ...
     _errorLineNum = lineNum;
 	_errorStr.Reset();
 
-    if (format) {
-        size_t BUFFER_SIZE = 1000;
-        char* buffer = new char[BUFFER_SIZE];
-        TIXML_SNPRINTF(buffer, BUFFER_SIZE, "Error=%s ErrorID=%d (0x%x) Line number=%d: ", ErrorIDToName(error), int(error), int(error), lineNum);
-        size_t len = strlen(buffer);
+    size_t BUFFER_SIZE = 1000;
+    char* buffer = new char[BUFFER_SIZE];
 
-        va_list va;
-        va_start( va, format );
-        TIXML_VSNPRINTF( buffer + len, BUFFER_SIZE - len, format, va );
-        va_end( va );
+    TIXML_SNPRINTF(buffer, BUFFER_SIZE, "Error=%s ErrorID=%d (0x%x) Line number=%d", ErrorIDToName(error), int(error), int(error), lineNum);
 
-        _errorStr.SetStr(buffer);
-        delete [] buffer;
-    }
+	if (format) {
+		size_t len = strlen(buffer);
+		TIXML_SNPRINTF(buffer + len, BUFFER_SIZE - len, ": ");
+		len = strlen(buffer);
+
+		va_list va;
+		va_start(va, format);
+		TIXML_VSNPRINTF(buffer + len, BUFFER_SIZE - len, format, va);
+		va_end(va);
+	}
+	_errorStr.SetStr(buffer);
+	delete[] buffer;
 }
 
 

+ 10 - 0
xmltest.cpp

@@ -567,6 +567,10 @@ int main( int argc, const char ** argv )
 		XMLDocument doc;
 		doc.Parse( error );
 		XMLTest( "Bad XML", XML_ERROR_PARSING_ATTRIBUTE, doc.ErrorID() );
+		const char* errorStr = doc.ErrorStr();
+		XMLTest("Formatted error string",
+			"Error=XML_ERROR_PARSING_ATTRIBUTE ErrorID=8 (0x8) Line number=3: XMLElement name=wrong",
+			errorStr);
 	}
 
 	{
@@ -1160,6 +1164,12 @@ int main( int argc, const char ** argv )
 		XMLDocument doc;
 		doc.Parse( str );
 		XMLTest( "Empty document error", XML_ERROR_EMPTY_DOCUMENT, doc.ErrorID() );
+
+		// But be sure there is an error string!
+		const char* errorStr = doc.ErrorStr();
+		XMLTest("Error string should be set",
+			"Error=XML_ERROR_EMPTY_DOCUMENT ErrorID=15 (0xf) Line number=0",
+			errorStr);
 	}
 
 	{