Skip to content

Commit c1d165a

Browse files
sipaMacroFake
authored andcommitted
Make ParseHex use string_view
1 parent f58c1f1 commit c1d165a

File tree

2 files changed

+12
-21
lines changed

2 files changed

+12
-21
lines changed

src/util/strencodings.cpp

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -81,32 +81,24 @@ bool IsHexNumber(const std::string& str)
8181
return (str.size() > starting_location);
8282
}
8383

84-
std::vector<unsigned char> ParseHex(const char* psz)
84+
std::vector<unsigned char> ParseHex(std::string_view str)
8585
{
8686
// convert hex dump to vector
8787
std::vector<unsigned char> vch;
88-
while (true)
89-
{
90-
while (IsSpace(*psz))
91-
psz++;
92-
signed char c = HexDigit(*psz++);
93-
if (c == (signed char)-1)
94-
break;
95-
auto n{uint8_t(c << 4)};
96-
c = HexDigit(*psz++);
97-
if (c == (signed char)-1)
98-
break;
99-
n |= c;
100-
vch.push_back(n);
88+
auto it = str.begin();
89+
while (it != str.end() && it + 1 != str.end()) {
90+
if (IsSpace(*it)) {
91+
++it;
92+
continue;
93+
}
94+
auto c1 = HexDigit(*(it++));
95+
auto c2 = HexDigit(*(it++));
96+
if (c1 < 0 || c2 < 0) break;
97+
vch.push_back(uint8_t(c1 << 4) | c2);
10198
}
10299
return vch;
103100
}
104101

105-
std::vector<unsigned char> ParseHex(const std::string& str)
106-
{
107-
return ParseHex(str.c_str());
108-
}
109-
110102
void SplitHostPort(std::string in, uint16_t& portOut, std::string& hostOut)
111103
{
112104
size_t colon = in.find_last_of(':');

src/util/strencodings.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ enum class ByteUnit : uint64_t {
5555
* @return A new string without unsafe chars
5656
*/
5757
std::string SanitizeString(const std::string& str, int rule = SAFE_CHARS_DEFAULT);
58-
std::vector<unsigned char> ParseHex(const char* psz);
59-
std::vector<unsigned char> ParseHex(const std::string& str);
58+
std::vector<unsigned char> ParseHex(std::string_view str);
6059
signed char HexDigit(char c);
6160
/* Returns true if each character in str is a hex character, and has an even
6261
* number of hex digits.*/

0 commit comments

Comments
 (0)