diff options
| author | Ed Maste <emaste@FreeBSD.org> | 2013-11-06 16:48:53 +0000 | 
|---|---|---|
| committer | Ed Maste <emaste@FreeBSD.org> | 2013-11-06 16:48:53 +0000 | 
| commit | f21a844f60ae6c74fcf1fddca32461acce3c1ee0 (patch) | |
| tree | 56d79f94966870db1cecd65a7264510a25fd1cba /source/Utility/StringExtractor.cpp | |
| parent | 37d22554be9f5a677dad2a95b7ef22fe59c66a8a (diff) | |
Notes
Diffstat (limited to 'source/Utility/StringExtractor.cpp')
| -rw-r--r-- | source/Utility/StringExtractor.cpp | 78 | 
1 files changed, 75 insertions, 3 deletions
| diff --git a/source/Utility/StringExtractor.cpp b/source/Utility/StringExtractor.cpp index 2f4bcecda8f3..d4ce470d56f3 100644 --- a/source/Utility/StringExtractor.cpp +++ b/source/Utility/StringExtractor.cpp @@ -168,10 +168,68 @@ StringExtractor::GetU32 (uint32_t fail_value, int base)      {          char *end = NULL;          const char *start = m_packet.c_str(); -        const char *uint_cstr = start + m_index; -        uint32_t result = ::strtoul (uint_cstr, &end, base); +        const char *cstr = start + m_index; +        uint32_t result = ::strtoul (cstr, &end, base); -        if (end && end != uint_cstr) +        if (end && end != cstr) +        { +            m_index = end - start; +            return result; +        } +    } +    return fail_value; +} + +int32_t +StringExtractor::GetS32 (int32_t fail_value, int base) +{ +    if (m_index < m_packet.size()) +    { +        char *end = NULL; +        const char *start = m_packet.c_str(); +        const char *cstr = start + m_index; +        int32_t result = ::strtol (cstr, &end, base); +         +        if (end && end != cstr) +        { +            m_index = end - start; +            return result; +        } +    } +    return fail_value; +} + + +uint64_t +StringExtractor::GetU64 (uint64_t fail_value, int base) +{ +    if (m_index < m_packet.size()) +    { +        char *end = NULL; +        const char *start = m_packet.c_str(); +        const char *cstr = start + m_index; +        uint64_t result = ::strtoull (cstr, &end, base); +         +        if (end && end != cstr) +        { +            m_index = end - start; +            return result; +        } +    } +    return fail_value; +} + +int64_t +StringExtractor::GetS64 (int64_t fail_value, int base) +{ +    if (m_index < m_packet.size()) +    { +        char *end = NULL; +        const char *start = m_packet.c_str(); +        const char *cstr = start + m_index; +        int64_t result = ::strtoll (cstr, &end, base); +         +        if (end && end != cstr)          {              m_index = end - start;              return result; @@ -371,6 +429,20 @@ StringExtractor::GetHexByteString (std::string &str)      return str.size();  } +size_t +StringExtractor::GetHexByteStringTerminatedBy (std::string &str, +                                               char terminator) +{ +    str.clear(); +    char ch; +    while ((ch = GetHexU8(0,false)) != '\0') +        str.append(1, ch); +    if (Peek() && *Peek() == terminator) +        return str.size(); +    str.clear(); +    return str.size(); +} +  bool  StringExtractor::GetNameColonValue (std::string &name, std::string &value)  { | 
