diff options
| author | Greg Clayton <gclayton@apple.com> | 2012-04-07 00:42:53 +0000 |
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2012-04-07 00:42:53 +0000 |
| commit | 7b70be397031a9d4a9686fa3f2b8823f8ab92faf (patch) | |
| tree | 995ff547a15dd0631dadf87a773c24c3f6b687e1 | |
| parent | 0235f684f018b54360641cb504980b724d146b7a (diff) | |
| download | bcm5719-llvm-7b70be397031a9d4a9686fa3f2b8823f8ab92faf.tar.gz bcm5719-llvm-7b70be397031a9d4a9686fa3f2b8823f8ab92faf.zip | |
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
| -rw-r--r-- | lldb/source/Utility/StringExtractor.cpp | 29 | ||||
| -rw-r--r-- | lldb/source/Utility/StringExtractor.h | 2 |
2 files changed, 12 insertions, 19 deletions
diff --git a/lldb/source/Utility/StringExtractor.cpp b/lldb/source/Utility/StringExtractor.cpp index 96ced320302..d2f4a68f7c4 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; } diff --git a/lldb/source/Utility/StringExtractor.h b/lldb/source/Utility/StringExtractor.h index e58eae19707..520119c7d93 100644 --- a/lldb/source/Utility/StringExtractor.h +++ b/lldb/source/Utility/StringExtractor.h @@ -93,7 +93,7 @@ public: GetHexS8 (int8_t fail_value = 0); uint8_t - GetHexU8 (uint8_t fail_value = 0); + GetHexU8 (uint8_t fail_value = 0, bool set_eof_on_fail = true); bool GetNameColonValue (std::string &name, std::string &value); |

