소스 검색

Removed use of CRT vsnprintf.

Branimir Karadžić 7 년 전
부모
커밋
7adf730694
8개의 변경된 파일61개의 추가작업 그리고 81개의 파일을 삭제
  1. 0 37
      include/bx/inline/readerwriter.inl
  2. 3 9
      include/bx/readerwriter.h
  3. 2 1
      src/crtnone.cpp
  4. 2 2
      src/file.cpp
  5. 9 5
      src/string.cpp
  6. 7 6
      tests/easing_test.cpp
  7. 29 14
      tests/math_test.cpp
  8. 9 7
      tests/rng_test.cpp

+ 0 - 37
include/bx/inline/readerwriter.inl

@@ -356,43 +356,6 @@ namespace bx
 		return result;
 	}
 
-	inline int32_t writePrintfVargs(WriterI* _writer, const char* _format, va_list _argList)
-	{
-		va_list argListCopy;
-		va_copy(argListCopy, _argList);
-
-		char temp[2048];
-		char*   out = temp;
-		int32_t max = sizeof(temp);
-		int32_t len = vsnprintf(out, max, _format, argListCopy);
-
-		va_end(argListCopy);
-
-		if (len > max)
-		{
-			va_copy(argListCopy, _argList);
-
-			out = (char*)alloca(len);
-			len = vsnprintf(out, len, _format, argListCopy);
-
-			va_end(argListCopy);
-		}
-
-		int32_t size = write(_writer, out, len);
-
-		return size;
-	}
-
-	inline int32_t writePrintf(WriterI* _writer, const char* _format, ...)
-	{
-		va_list argList;
-		va_start(argList, _format);
-		int32_t size = writePrintfVargs(_writer, _format, argList);
-		va_end(argList);
-
-		return size;
-	}
-
 	inline int64_t skip(SeekerI* _seeker, int64_t _offset)
 	{
 		return _seeker->seek(_offset, Whence::Current);

+ 3 - 9
include/bx/readerwriter.h

@@ -262,13 +262,13 @@ namespace bx
 	/// Write string view.
 	int32_t write(WriterI* _writer, const StringView& _str, Error* _err = NULL);
 
-	///
+	/// Write formated string.
 	int32_t write(WriterI* _writer, const StringView& _format, va_list _argList, Error* _err);
 
-	///
+	/// Write formated string.
 	int32_t write(WriterI* _writer, Error* _err, const StringView* _format, ...);
 
-	///
+	/// Write formated string.
 	int32_t write(WriterI* _writer, Error* _err, const char* _format, ...);
 
 	/// Write repeat the same value.
@@ -286,12 +286,6 @@ namespace bx
 	template<typename Ty>
 	int32_t writeBE(WriterI* _writer, const Ty& _value, Error* _err = NULL);
 
-	/// Write formated string.
-	int32_t writePrintfVargs(WriterI* _writer, const char* _format, va_list _argList);
-
-	/// Write formated string.
-	int32_t writePrintf(WriterI* _writer, const char* _format, ...);
-
 	/// Skip _offset bytes forward.
 	int64_t skip(SeekerI* _seeker, int64_t _offset);
 

+ 2 - 1
src/crtnone.cpp

@@ -304,7 +304,8 @@ extern "C" int printf(const char* _format, ...)
 	va_list argList;
 	va_start(argList, _format);
 	bx::WriterI* writer = bx::getStdOut();
-	int32_t len = bx::writePrintfVargs(writer, _format, argList);
+	bx::Error err;
+	int32_t len = bx::write(writer, &err, _format, argList);
 	va_end(argList);
 	return len;
 }

+ 2 - 2
src/file.cpp

@@ -51,8 +51,8 @@ namespace bx
 
 		virtual int32_t write(const void* _data, int32_t _size, Error* _err) override
 		{
-			BX_UNUSED(_data, _size, _err);
-			return 0;
+			BX_UNUSED(_data, _err);
+			return _size;
 		}
 	};
 

+ 9 - 5
src/string.cpp

@@ -9,10 +9,6 @@
 #include <bx/readerwriter.h>
 #include <bx/string.h>
 
-#if !BX_CRT_NONE
-#	include <stdio.h> // vsnprintf
-#endif // !BX_CRT_NONE
-
 namespace bx
 {
 	inline bool isInRange(char _ch, char _from, char _to)
@@ -1124,7 +1120,7 @@ namespace bx
 		return total;
 	}
 
-	int32_t vsnprintfRef(char* _out, int32_t _max, const char* _format, va_list _argList)
+	int32_t vsnprintf(char* _out, int32_t _max, const char* _format, va_list _argList)
 	{
 		if (1 < _max)
 		{
@@ -1154,6 +1150,12 @@ namespace bx
 		return size;
 	}
 
+#if 0
+
+#if !BX_CRT_NONE
+#	include <stdio.h> // vsnprintf
+#endif // !BX_CRT_NONE
+
 	int32_t vsnprintf(char* _out, int32_t _max, const char* _format, va_list _argList)
 	{
 		va_list argList;
@@ -1178,6 +1180,8 @@ namespace bx
 		return total;
 	}
 
+#endif // 0
+
 	int32_t snprintf(char* _out, int32_t _max, const char* _format, ...)
 	{
 		va_list argList;

+ 7 - 6
tests/easing_test.cpp

@@ -11,24 +11,25 @@
 TEST_CASE("easing", "")
 {
 	bx::WriterI* writer = bx::getNullOut();
+	bx::Error err;
 
 	for (uint32_t ee = 0; ee < bx::Easing::Count; ++ee)
 	{
-		bx::writePrintf(writer, "\n\n%d\n", ee);
+		bx::write(writer, &err, "\n\n%d\n", ee);
 
 		const bx::EaseFn easing = bx::getEaseFunc(bx::Easing::Enum(ee) );
 
 		const int32_t nx = 64;
 		const int32_t ny = 10;
 
-		bx::writePrintf(writer, "\t///      ^\n");
+		bx::write(writer, &err, "\t///      ^\n");
 
 		for (int32_t yy = ny+4; yy >= -5; --yy)
 		{
 			const float ys = float(yy    )/float(ny);
 			const float ye = float(yy+1.0)/float(ny);
 
-			bx::writePrintf(writer, "\t///      %c", yy != 0 ? '|' : '+');
+			bx::write(writer, &err, "\t///      %c", yy != 0 ? '|' : '+');
 
 			for (int32_t xx = 0; xx < nx; ++xx)
 			{
@@ -41,18 +42,18 @@ TEST_CASE("easing", "")
 					if (vv >= ys
 					&&  vv <  ye)
 					{
-						bx::writePrintf(writer, "*");
+						bx::write(writer, "*");
 						break;
 					}
 				}
 
 				if (jj == 10)
 				{
-					bx::writePrintf(writer, "%c", yy != 0 ? ' ' : '-');
+					bx::write(writer, &err, "%c", yy != 0 ? ' ' : '-');
 				}
 			}
 
-			bx::writePrintf(writer, "%s\n", yy != 0 ? "" : ">");
+			bx::write(writer, &err, "%s\n", yy != 0 ? "" : ">");
 		}
 	}
 }

+ 29 - 14
tests/math_test.cpp

@@ -55,84 +55,98 @@ TEST_CASE("libm", "")
 	REQUIRE(bx::equal( 0.89f, bx::fract( 13.89f), 0.000001f) );
 	REQUIRE(bx::equal(-0.89f, bx::fract(-13.89f), 0.000001f) );
 
+	bx::Error err;
+
 	for (int32_t yy = -10; yy < 10; ++yy)
 	{
 		for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
 		{
-			bx::writePrintf(writer, "ldexp(%f, %d) == %f (expected: %f)\n", xx, yy, bx::ldexp(xx, yy), ::ldexpf(xx, yy) );
+			bx::write(writer, &err, "ldexp(%f, %d) == %f (expected: %f)\n", xx, yy, bx::ldexp(xx, yy), ::ldexpf(xx, yy) );
 			REQUIRE(bx::equal(bx::ldexp(xx, yy), ::ldexpf(xx, yy), 0.00001f) );
 		}
 	}
 
 	for (float xx = -80.0f; xx < 80.0f; xx += 0.1f)
 	{
-		bx::writePrintf(writer, "exp(%f) == %f (expected: %f)\n", xx, bx::exp(xx), ::expf(xx) );
+		bx::write(writer, &err, "exp(%f) == %f (expected: %f)\n", xx, bx::exp(xx), ::expf(xx) );
+		REQUIRE(err.isOk() );
 		REQUIRE(bx::equal(bx::exp(xx), ::expf(xx), 0.00001f) );
 	}
 
 	for (float xx = 0.0f; xx < 100.0f; xx += 0.1f)
 	{
-		bx::writePrintf(writer, "rsqrt(%f) == %f (expected: %f)\n", xx, bx::rsqrt(xx), 1.0f/::sqrtf(xx) );
+		bx::write(writer, &err, "rsqrt(%f) == %f (expected: %f)\n", xx, bx::rsqrt(xx), 1.0f/::sqrtf(xx) );
+		REQUIRE(err.isOk() );
 		REQUIRE(bx::equal(bx::rsqrt(xx), 1.0f/::sqrtf(xx), 0.00001f) );
 	}
 
 	for (float xx = 0.0f; xx < 100.0f; xx += 0.1f)
 	{
-		bx::writePrintf(writer, "sqrt(%f) == %f (expected: %f)\n", xx, bx::sqrt(xx), ::sqrtf(xx) );
+		bx::write(writer, &err, "sqrt(%f) == %f (expected: %f)\n", xx, bx::sqrt(xx), ::sqrtf(xx) );
+		REQUIRE(err.isOk() );
 		REQUIRE(bx::equal(bx::sqrt(xx), ::sqrtf(xx), 0.00001f) );
 	}
 
 	for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
 	{
-		bx::writePrintf(writer, "pow(1.389f, %f) == %f (expected: %f)\n", xx, bx::pow(1.389f, xx), ::powf(1.389f, xx) );
+		bx::write(writer, &err, "pow(1.389f, %f) == %f (expected: %f)\n", xx, bx::pow(1.389f, xx), ::powf(1.389f, xx) );
+		REQUIRE(err.isOk() );
 		REQUIRE(bx::equal(bx::pow(1.389f, xx), ::powf(1.389f, xx), 0.00001f) );
 	}
 
 	for (float xx = -1.0f; xx < 1.0f; xx += 0.001f)
 	{
-		bx::writePrintf(writer, "asin(%f) == %f (expected: %f)\n", xx, bx::asin(xx), ::asinf(xx) );
+		bx::write(writer, &err, "asin(%f) == %f (expected: %f)\n", xx, bx::asin(xx), ::asinf(xx) );
+		REQUIRE(err.isOk() );
 		REQUIRE(bx::equal(bx::asin(xx), ::asinf(xx), 0.0001f) );
 	}
 
 	for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
 	{
-		bx::writePrintf(writer, "sin(%f) == %f (expected: %f)\n", xx, bx::sin(xx), ::sinf(xx) );
+		bx::write(writer, &err, "sin(%f) == %f (expected: %f)\n", xx, bx::sin(xx), ::sinf(xx) );
+		REQUIRE(err.isOk() );
 		REQUIRE(bx::equal(bx::sin(xx), ::sinf(xx), 0.00001f) );
 	}
 
 	for (float xx = -1.0f; xx < 1.0f; xx += 0.1f)
 	{
-		bx::writePrintf(writer, "sinh(%f) == %f (expected: %f)\n", xx, bx::sinh(xx), ::sinhf(xx) );
+		bx::write(writer, &err, "sinh(%f) == %f (expected: %f)\n", xx, bx::sinh(xx), ::sinhf(xx) );
+		REQUIRE(err.isOk() );
 		REQUIRE(bx::equal(bx::sinh(xx), ::sinhf(xx), 0.00001f) );
 	}
 
 	for (float xx = -1.0f; xx < 1.0f; xx += 0.001f)
 	{
-		bx::writePrintf(writer, "acos(%f) == %f (expected: %f\n)", xx, bx::acos(xx), ::acosf(xx) );
+		bx::write(writer, &err, "acos(%f) == %f (expected: %f\n)", xx, bx::acos(xx), ::acosf(xx) );
+		REQUIRE(err.isOk() );
 		REQUIRE(bx::equal(bx::acos(xx), ::acosf(xx), 0.0001f) );
 	}
 
 	for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
 	{
-		bx::writePrintf(writer, "cos(%f) == %f (expected: %f)\n", xx, bx::cos(xx), ::cosf(xx) );
+		bx::write(writer, &err, "cos(%f) == %f (expected: %f)\n", xx, bx::cos(xx), ::cosf(xx) );
+		REQUIRE(err.isOk() );
 		REQUIRE(bx::equal(bx::cos(xx), ::cosf(xx), 0.00001f) );
 	}
 
 	for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
 	{
-		bx::writePrintf(writer, "tan(%f) == %f (expected: %f)\n", xx, bx::tan(xx), ::tanf(xx) );
+		bx::write(writer, &err, "tan(%f) == %f (expected: %f)\n", xx, bx::tan(xx), ::tanf(xx) );
+		REQUIRE(err.isOk() );
 		REQUIRE(bx::equal(bx::tan(xx), ::tanf(xx), 0.001f) );
 	}
 
 	for (float xx = -1.0f; xx < 1.0f; xx += 0.1f)
 	{
-		bx::writePrintf(writer, "tanh(%f) == %f (expected: %f\n", xx, bx::tanh(xx), ::tanhf(xx) );
+		bx::write(writer, &err, "tanh(%f) == %f (expected: %f\n", xx, bx::tanh(xx), ::tanhf(xx) );
+		REQUIRE(err.isOk() );
 		REQUIRE(bx::equal(bx::tanh(xx), ::tanhf(xx), 0.00001f) );
 	}
 
 	for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
 	{
-		bx::writePrintf(writer, "atan(%f) == %f (expected: %f)\n", xx, bx::atan(xx), ::atanf(xx) );
+		bx::write(writer, &err, "atan(%f) == %f (expected: %f)\n", xx, bx::atan(xx), ::atanf(xx) );
+		REQUIRE(err.isOk() );
 		REQUIRE(bx::equal(bx::atan(xx), ::atanf(xx), 0.00001f) );
 	}
 
@@ -140,7 +154,8 @@ TEST_CASE("libm", "")
 	{
 		for (float xx = -100.0f; xx < 100.0f; xx += 0.1f)
 		{
-			bx::writePrintf(writer, "atan2(%f, %f) == %f (expected: %f)\n", yy, xx, bx::atan2(yy, xx), ::atan2f(yy, xx) );
+			bx::write(writer, &err, "atan2(%f, %f) == %f (expected: %f)\n", yy, xx, bx::atan2(yy, xx), ::atan2f(yy, xx) );
+			REQUIRE(err.isOk() );
 			REQUIRE(bx::equal(bx::atan2(yy, xx), ::atan2f(yy, xx), 0.00001f) );
 		}
 	}

+ 9 - 7
tests/rng_test.cpp

@@ -41,38 +41,40 @@ void testRng(const char* _name, Ty* _rng)
 	}
 
 	bx::WriterI* writer = bx::getNullOut();
-	bx::writePrintf(writer, "%s\n", _name);
+	bx::Error err;
+
+	bx::write(writer, &err, "%s\n", _name);
 
 	{
-		bx::writePrintf(writer, "\tbits histogram:\n");
+		bx::write(writer, &err, "\tbits histogram:\n");
 		uint32_t min = UINT32_MAX;
 		uint32_t max = 0;
 
 		for (uint32_t ii = 0; ii < BX_COUNTOF(histBits); ++ii)
 		{
-			bx::writePrintf(writer, "\t\t%3d: %d\n", ii, histBits[ii]);
+			bx::write(writer, &err, "\t\t%3d: %d\n", ii, histBits[ii]);
 			min = bx::min(min, histBits[ii]);
 			max = bx::max(max, histBits[ii]);
 		}
 
-		bx::writePrintf(writer, "\tmin: %d, max: %d (diff: %d)\n", min, max, max-min);
+		bx::write(writer, &err, "\tmin: %d, max: %d (diff: %d)\n", min, max, max-min);
 
 		REQUIRE(max-min < 8000);
 	}
 
 	{
-		bx::writePrintf(writer, "\tuint8_t histogram:\n");
+		bx::write(writer, &err, "\tuint8_t histogram:\n");
 		uint32_t min = UINT32_MAX;
 		uint32_t max = 0;
 
 		for (uint32_t ii = 0; ii < BX_COUNTOF(histUint8); ++ii)
 		{
-			bx::writePrintf(writer, "\t\t%3d: %d\n", ii, histUint8[ii]);
+			bx::write(writer, &err, "\t\t%3d: %d\n", ii, histUint8[ii]);
 			min = bx::min(min, histUint8[ii]);
 			max = bx::max(max, histUint8[ii]);
 		}
 
-		bx::writePrintf(writer, "\tmin: %d, max: %d (diff: %d)\n", min, max, max-min);
+		bx::write(writer, &err, "\tmin: %d, max: %d (diff: %d)\n", min, max, max-min);
 
 		REQUIRE(max-min < 8000);
 	}