summaryrefslogtreecommitdiff
path: root/lldb/source/Utility/StringExtractor.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2012-04-07 00:42:53 +0000
committerGreg Clayton <gclayton@apple.com>2012-04-07 00:42:53 +0000
commit7b70be397031a9d4a9686fa3f2b8823f8ab92faf (patch)
tree995ff547a15dd0631dadf87a773c24c3f6b687e1 /lldb/source/Utility/StringExtractor.cpp
parent0235f684f018b54360641cb504980b724d146b7a (diff)
Removed redundant isxdigit checks and added the ability to GetHexU8() so it can extract an 8 bit hex value if one is available. It will set EOF if "set_eof_on_fail" is true or if out of data. This allows a string decoder to grab a string without losing the last part of the packet with a packet like "414243,abc" (it can extract "ABC" and leave the file position set to the comma).
llvm-svn: 154239
Diffstat (limited to 'lldb/source/Utility/StringExtractor.cpp')
-rw-r--r--lldb/source/Utility/StringExtractor.cpp29
1 files changed, 11 insertions, 18 deletions
diff --git a/lldb/source/Utility/StringExtractor.cpp b/lldb/source/Utility/StringExtractor.cpp
index 96ced320302f..d2f4a68f7c4d 100644
--- a/lldb/source/Utility/StringExtractor.cpp
+++ b/lldb/source/Utility/StringExtractor.cpp
@@ -121,14 +121,10 @@ StringExtractor::GetHexS8 (int8_t fail_value)
{
char hi_nibble_char = m_packet[m_index];
char lo_nibble_char = m_packet[m_index+1];
-
- if (isxdigit(hi_nibble_char) && isxdigit(lo_nibble_char))
- {
- char hi_nibble = xdigit_to_sint (hi_nibble_char);
- char lo_nibble = xdigit_to_sint (lo_nibble_char);
- m_index += 2;
- return (hi_nibble << 4) + lo_nibble;
- }
+ char hi_nibble = xdigit_to_sint (hi_nibble_char);
+ char lo_nibble = xdigit_to_sint (lo_nibble_char);
+ m_index += 2;
+ return (hi_nibble << 4) + lo_nibble;
}
m_index = UINT32_MAX;
return fail_value;
@@ -139,22 +135,19 @@ StringExtractor::GetHexS8 (int8_t fail_value)
// string
//----------------------------------------------------------------------
uint8_t
-StringExtractor::GetHexU8 (uint8_t fail_value)
+StringExtractor::GetHexU8 (uint8_t fail_value, bool set_eof_on_fail)
{
if (GetNumHexASCIICharsAtFilePos(2))
{
uint8_t hi_nibble_char = m_packet[m_index];
uint8_t lo_nibble_char = m_packet[m_index+1];
-
- if (isxdigit(hi_nibble_char) && isxdigit(lo_nibble_char))
- {
- uint8_t hi_nibble = xdigit_to_uint (hi_nibble_char);
- uint8_t lo_nibble = xdigit_to_uint (lo_nibble_char);
- m_index += 2;
- return (hi_nibble << 4) + lo_nibble;
- }
+ uint8_t hi_nibble = xdigit_to_uint (hi_nibble_char);
+ uint8_t lo_nibble = xdigit_to_uint (lo_nibble_char);
+ m_index += 2;
+ return (hi_nibble << 4) + lo_nibble;
}
- m_index = UINT32_MAX;
+ if (set_eof_on_fail || m_index >= m_packet.size())
+ m_index = UINT32_MAX;
return fail_value;
}