Browse Source

Fixed issue #266.

Бранимир Караџић 2 years ago
parent
commit
76642c9bfc
2 changed files with 28 additions and 10 deletions
  1. 4 5
      src/string.cpp
  2. 24 5
      tests/vsnprintf_test.cpp

+ 4 - 5
src/string.cpp

@@ -1207,15 +1207,14 @@ namespace bx
 			int32_t size = write(&writer, _format, argListCopy, &err);
 			va_end(argListCopy);
 
+			size += write(&writer, '\0', &err);
+
 			if (err.isOk() )
 			{
-				size += write(&writer, '\0', &err);
 				return size - 1 /* size without '\0' terminator */;
 			}
-			else
-			{
-				_out[_max-1] = '\0';
-			}
+
+			_out[_max-1] = '\0';
 		}
 
 		Error err;

+ 24 - 5
tests/vsnprintf_test.cpp

@@ -19,13 +19,32 @@ TEST_CASE("vsnprintf NULL buffer", "No output buffer provided.")
 
 TEST_CASE("vsnprintf truncated", "Truncated output buffer.")
 {
-	char buffer5[5]; // fit
-	REQUIRE(4 == bx::snprintf(buffer5, BX_COUNTOF(buffer5), "abvg") );
-	REQUIRE(0 == bx::strCmp(buffer5, "abvg") );
+	REQUIRE(4 == bx::snprintf(NULL, 0, "abvg") );
+
+	char buffer15[15]; // fit
+	REQUIRE(4    == bx::snprintf(buffer15, BX_COUNTOF(buffer15), "abvg") );
+	REQUIRE('\0' == buffer15[4]);
+	REQUIRE(0    == bx::strCmp(buffer15, "abvg") );
+
+	char buffer1[1]; // truncate
+	REQUIRE(4    == bx::snprintf(buffer1, BX_COUNTOF(buffer1), "abvg") );
+	REQUIRE('\0' == buffer1[BX_COUNTOF(buffer1)-1]);
 
 	char buffer7[7]; // truncate
-	REQUIRE(10 == bx::snprintf(buffer7, BX_COUNTOF(buffer7), "Ten chars!") );
-	REQUIRE(0  == bx::strCmp(buffer7, "Ten ch") );
+	REQUIRE(10   == bx::snprintf(NULL, 0, "Ten chars!") );
+	REQUIRE(10   == bx::snprintf(buffer7, BX_COUNTOF(buffer7), "Ten chars!") );
+	REQUIRE('\0' == buffer7[BX_COUNTOF(buffer7)-1]);
+	REQUIRE(0    == bx::strCmp(buffer7, "Ten ch") );
+
+	REQUIRE(7    == bx::snprintf(NULL, 0, "Seven67") );
+	REQUIRE(7    == bx::snprintf(buffer7, BX_COUNTOF(buffer7), "Seven67") );
+	REQUIRE('\0' == buffer7[BX_COUNTOF(buffer7)-1]);
+	REQUIRE(0    == bx::strCmp(buffer7, "Seven6") );
+
+	REQUIRE(11   == bx::snprintf(NULL, 0, "SevenEleven") );
+	REQUIRE(11   == bx::snprintf(buffer7, BX_COUNTOF(buffer7), "SevenEleven") );
+	REQUIRE('\0' == buffer7[BX_COUNTOF(buffer7)-1]);
+	REQUIRE(0    == bx::strCmp(buffer7, "SevenE") );
 }
 
 static bool test(const char* _expected, const char* _format, ...)