Просмотр исходного кода

Write to string directly for large formats in FormatString

Michael Ragazzon 6 месяцев назад
Родитель
Сommit
b3f95a2607
1 измененных файлов с 13 добавлено и 7 удалено
  1. 13 7
      Source/Core/StringUtilities.cpp

+ 13 - 7
Source/Core/StringUtilities.cpp

@@ -61,18 +61,23 @@ static int FormatString(String& string, const char* format, va_list argument_lis
 			return 0;
 		}
 
-		if ((size_t)length < max_size || i > 0)
+		if (i > 0)
+		{
+			RMLUI_ASSERT(string.size() == (size_t)length);
 			break;
+		}
 
+		if ((size_t)length < max_size)
+		{
+			string = buffer_ptr;
+			break;
+		}
+
+		string.resize((size_t)length);
 		max_size = (size_t)length + 1;
-		buffer_ptr = new char[max_size];
+		buffer_ptr = &(*string.begin()); // C++17 Upgrade: Replace with string.data()
 	}
 
-	string = buffer_ptr;
-
-	if (buffer_ptr != buffer)
-		delete[] buffer_ptr;
-
 	return length;
 }
 
@@ -84,6 +89,7 @@ int FormatString(String& string, const char* format, ...)
 	va_end(argument_list);
 	return result;
 }
+
 String CreateString(const char* format, ...)
 {
 	String result;