This is an automated email from the ASF dual-hosted git repository. bneradt pushed a commit to branch dev-1-2-13 in repository https://gitbox.apache.org/repos/asf/trafficserver-libswoc.git
commit 85b5f2d090d547d9126173945733db29da810ae4 Author: Alan M. Carroll <a...@apache.org> AuthorDate: Thu Nov 5 14:49:53 2020 -0600 Add "0b" for binary prefix checking to svtoi. --- code/src/TextView.cc | 28 ++++++++++++++++++---------- unit_tests/test_TextView.cc | 1 + 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/code/src/TextView.cc b/code/src/TextView.cc index 5ae6863..4759f2a 100644 --- a/code/src/TextView.cc +++ b/code/src/TextView.cc @@ -86,7 +86,7 @@ intmax_t svtoi(TextView src, TextView *out, int base) { intmax_t zret = 0; - if (src.ltrim_if(&isspace) && src) { + if (src.ltrim_if(&isspace)) { TextView parsed; const char *start = src.data(); bool neg = false; @@ -128,21 +128,29 @@ svtou(TextView src, TextView *out, int base) { if ('0' == *src) { ++src; base = 8; - if (src && ('x' == *src || 'X' == *src)) { - ++src; - base = 16; + if (src) { + switch (*src) { + case 'x': + case 'X': + ++src; + base = 16; + break; + case 'b': + case 'B': + ++src; + base = 2; + break; + } } } } // For performance in common cases, use the templated conversion. switch (base) { - case 8:zret = svto_radix<8>(src); - break; - case 10:zret = svto_radix<10>(src); - break; - case 16:zret = svto_radix<16>(src); - break; + case 2: zret = svto_radix<2>(src); break; + case 8: zret = svto_radix<8>(src); break; + case 10: zret = svto_radix<10>(src); break; + case 16: zret = svto_radix<16>(src); break; default: while (src.size() && (0 <= (v = svtoi_convert[static_cast<unsigned char>(*src)])) && v < base) { diff --git a/unit_tests/test_TextView.cc b/unit_tests/test_TextView.cc index 4b914f3..b8a29e5 100644 --- a/unit_tests/test_TextView.cc +++ b/unit_tests/test_TextView.cc @@ -385,6 +385,7 @@ TEST_CASE("TextView Conversions", "[libswoc][TextView]") REQUIRE(2345679 == svtoi(n8)); REQUIRE(2345679 == svtoi(n8, &x)); REQUIRE(x == n8); + REQUIRE(0b10111 == svtoi("0b10111"_tv)); x = n4; REQUIRE(13 == swoc::svto_radix<10>(x));