cut messages at 512 bytes, taking into account the UTF-8 codepoints

ref #3067
This commit is contained in:
louiz’
2016-06-15 15:50:45 +02:00
parent 6235fb2d03
commit 4b1c580bb9
3 changed files with 22 additions and 5 deletions
+12 -2
View File
@@ -1,4 +1,5 @@
#include <utils/string.hpp>
#include <utils/encoding.hpp>
bool to_bool(const std::string& val)
{
@@ -11,8 +12,17 @@ std::vector<std::string> cut(const std::string& val, const std::size_t size)
std::string::size_type pos = 0;
while (pos < val.size())
{
res.emplace_back(val.substr(pos, size));
pos += size;
// Get the number of chars, <= size, that contain only whole
// UTF-8 codepoints.
std::size_t s = 0;
auto codepoint_size = utils::get_next_codepoint_size(val[pos + s]);
while (s + codepoint_size <= size)
{
s += codepoint_size;
codepoint_size = utils::get_next_codepoint_size(val[pos + s]);
}
res.emplace_back(val.substr(pos, s));
pos += s;
}
return res;
}