37 std::vector<std::string> digestNameValuePairs;
40 for (
const auto &digestNameValue : digestNameValuePairs) {
41 std::string_view digestNameValueSV {digestNameValue};
42 auto equalPos = digestNameValueSV.find(
'=');
43 if (equalPos == std::string_view::npos || equalPos >= digestNameValueSV.size() - 1)
46 std::string_view cksumTypeSV = digestNameValueSV.substr(0, equalPos);
48 if (cksumTypeSV.empty())
51 std::string_view cksumValueInSV = digestNameValueSV.substr(equalPos + 1);
52 size_t beginCksumPos = cksumValueInSV.find(
':');
53 size_t endCksumPos = cksumValueInSV.rfind(
':');
56 if (beginCksumPos == 0 && endCksumPos > beginCksumPos + 1 && endCksumPos < cksumValueInSV.size()) {
57 std::string_view cksumValue = cksumValueInSV.substr(beginCksumPos + 1, endCksumPos - beginCksumPos - 1);
59 if (!cksumValue.empty()) {
62 std::string chksumDecoded;
64 std::string cksumTypeLC {cksumTypeSV};
65 std::transform(cksumTypeLC.begin(), cksumTypeLC.end(), cksumTypeLC.begin(), ::tolower);
66 output[cksumTypeLC] = chksumDecoded;
75 std::string_view value_sv {value};
76 while(pos <= value_sv.size()) {
78 size_t comma = value.find(
',',pos);
80 std::string_view item = (comma == std::string_view::npos) ? value_sv.substr(pos) : value_sv.substr(pos, comma - pos);
82 pos = (comma == std::string_view::npos) ? value.size() + 1 : comma + 1;
85 if(item.empty())
continue;
87 size_t eq = item.find(
'=');
89 if(eq == std::string_view::npos)
continue;
91 std::string_view digestName {item.substr(0, eq)};
93 std::string_view preference {item.substr(eq+1)};
96 std::string key_lower {digestName};
97 std::transform(key_lower.begin(),key_lower.end(),key_lower.begin(),::tolower);
102 preference_us = std::min(preference_us,(uint8_t)10);
103 output[key_lower] = preference_us;
111 std::string_view sv{value};
113 while (!sv.empty() && (sv.back() ==
'\r' || sv.back() ==
'\n' ||
114 sv.back() ==
' ' || sv.back() ==
'\t')) {
122 if (c <
'0' || c >
'9') {
126 std::string nullTerm{sv};
128 long long parsed = std::strtoll(nullTerm.c_str(),
nullptr, 10);
129 if (errno == ERANGE ||
130 parsed >
static_cast<long long>(std::numeric_limits<ssize_t>::max())) {
133 return static_cast<ssize_t
>(parsed);