From 7adf7306942bd26343d0fb1c2336259caac9b6db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Mon, 12 Nov 2018 20:01:26 -0800 Subject: [PATCH] Removed use of CRT vsnprintf. --- include/bx/inline/readerwriter.inl | 37 ------------------------- include/bx/readerwriter.h | 12 +++------ src/crtnone.cpp | 3 ++- src/file.cpp | 4 +-- src/string.cpp | 14 ++++++---- tests/easing_test.cpp | 13 ++++----- tests/math_test.cpp | 43 ++++++++++++++++++++---------- tests/rng_test.cpp | 16 ++++++----- 8 files changed, 61 insertions(+), 81 deletions(-) diff --git a/include/bx/inline/readerwriter.inl b/include/bx/inline/readerwriter.inl index 9708253..9a365dc 100644 --- a/include/bx/inline/readerwriter.inl +++ b/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); diff --git a/include/bx/readerwriter.h b/include/bx/readerwriter.h index 8610dfe..0d8e135 100644 --- a/include/bx/readerwriter.h +++ b/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 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); diff --git a/src/crtnone.cpp b/src/crtnone.cpp index c5c9127..9357951 100644 --- a/src/crtnone.cpp +++ b/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; } diff --git a/src/file.cpp b/src/file.cpp index ab29663..8a282ca 100644 --- a/src/file.cpp +++ b/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; } }; diff --git a/src/string.cpp b/src/string.cpp index 6ca50af..dea7f18 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -9,10 +9,6 @@ #include #include -#if !BX_CRT_NONE -# include // 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 // 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; diff --git a/tests/easing_test.cpp b/tests/easing_test.cpp index 2107b71..0694454 100644 --- a/tests/easing_test.cpp +++ b/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 ? "" : ">"); } } } diff --git a/tests/math_test.cpp b/tests/math_test.cpp index f6ef5c7..2eeac28 100644 --- a/tests/math_test.cpp +++ b/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) ); } } diff --git a/tests/rng_test.cpp b/tests/rng_test.cpp index d8bb85f..b5161f7 100644 --- a/tests/rng_test.cpp +++ b/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); }