summaryrefslogtreecommitdiff
path: root/src/logTypes.cpp
diff options
context:
space:
mode:
authorDan Goodliffe <dan.goodliffe@octal.co.uk>2026-07-02 15:46:25 +0100
committerDan Goodliffe <dan.goodliffe@octal.co.uk>2026-07-02 15:46:25 +0100
commitfbb5038105e26e07d34184544ea4c70892acef92 (patch)
tree1bd79bc9280b65116dd714f202718e9a5e8d091b /src/logTypes.cpp
parent3cc7a1b1c0bf84ffcb149741c9ca2c60d9f00068 (diff)
downloadwebstat-fbb5038105e26e07d34184544ea4c70892acef92.tar.bz2
webstat-fbb5038105e26e07d34184544ea4c70892acef92.tar.xz
webstat-fbb5038105e26e07d34184544ea4c70892acef92.zip
Fixes to parseEscapedString
Fix the warnings picked up by the latest clang-tidy. Add test cases lifted from the bad_lines log. Add missing support for \b in escaping.
Diffstat (limited to 'src/logTypes.cpp')
-rw-r--r--src/logTypes.cpp31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/logTypes.cpp b/src/logTypes.cpp
index d8b3a7e..25fc193 100644
--- a/src/logTypes.cpp
+++ b/src/logTypes.cpp
@@ -3,18 +3,19 @@
namespace {
namespace {
constexpr auto BS_MAP = []() {
- std::array<char, 128> map {};
- map['f'] = '\f';
- map['n'] = '\n';
- map['r'] = '\r';
- map['t'] = '\t';
- map['v'] = '\v';
- map['"'] = '"';
- map['\\'] = '\\';
+ std::array<char, 'v' + 1> map {};
+ map.at('b') = '\b';
+ map.at('f') = '\f';
+ map.at('n') = '\n';
+ map.at('r') = '\r';
+ map.at('t') = '\t';
+ map.at('v') = '\v';
+ map.at('"') = '"';
+ map.at('\\') = '\\';
return map;
}();
- scn::scan_expected<typename scn::ContextType::iterator>
+ scn::scan_expected<scn::ContextType::iterator>
parseEscapedString(std::string & value, scn::ContextType & ctx, const auto & start)
{
ctx.advance_to(start->begin());
@@ -30,8 +31,8 @@ namespace {
value.append(1, static_cast<char>(hex->value()));
ctx.advance_to(hex->begin());
}
- else if (auto escaped = scn::scan<std::string>(ctx.range(), R"ESC(\{:.1[fnrtv"\]})ESC")) {
- value.append(1, BS_MAP[static_cast<unsigned char>(escaped->value().front())]);
+ else if (auto escaped = scn::scan<std::string>(ctx.range(), R"ESC(\{:.1[bfnrtv"\]})ESC")) {
+ value.append(1, BS_MAP.at(static_cast<unsigned char>(escaped->value().front())));
ctx.advance_to(escaped->begin());
}
else {
@@ -44,7 +45,7 @@ namespace {
}
namespace scn {
- scan_expected<typename ContextType::iterator>
+ scan_expected<ContextType::iterator>
scanner<WebStat::QuotedString>::scan(WebStat::QuotedString & value, ContextType & ctx)
{
if (auto empty = scn::scan<>(ctx.range(), R"("")")) {
@@ -63,7 +64,7 @@ namespace scn {
return unexpected(simple.error());
}
- scan_expected<typename ContextType::iterator>
+ scan_expected<ContextType::iterator>
scanner<WebStat::QueryString>::scan(WebStat::QueryString & value, ContextType & ctx)
{
if (auto null = scn::scan<>(ctx.range(), R"("")")) {
@@ -83,13 +84,13 @@ namespace scn {
return unexpected(empty.error());
}
- scan_expected<typename ContextType::iterator>
+ scan_expected<ContextType::iterator>
scanner<WebStat::CLFString>::scan(WebStat::CLFString & value, ContextType & ctx)
{
if (auto null = scn::scan<>(ctx.range(), R"("-")")) {
return null->begin();
}
- return scn::scanner<WebStat::QuotedString> {}.scan(value.emplace(), ctx);
+ return scn::scanner<WebStat::QuotedString>::scan(value.emplace(), ctx);
}
}