diff options
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/main.cpp b/src/main.cpp index a79a0e3..8b6412b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1003,17 +1003,18 @@ static bool RenderDisassembly( static void ParseTraceData(DisasmMap &disasm_map, const DataView &trace_data) { - // FIXME make a full blown parser with various radixes support and different - // trace types support bool parse = true; for (size_t i = 0; i < trace_data.size; i++) { if (trace_data.buffer[i] == '\n' || trace_data.buffer[i] == '\r') { parse = true; } else if (parse) { errno = 0; + // Base 0 enabled strtol to parse octal and hexadecimal numbers with + // prefixes like 0 or 0x. See `man strtol.3p`. + constexpr int base = 0; const char *startptr = reinterpret_cast<const char *>(trace_data.buffer + i); char *endptr = nullptr; - const long address = strtol(startptr, &endptr, 10); + const long address = strtol(startptr, &endptr, base); if ((address == LONG_MAX || address == LONG_MIN) && errno == ERANGE) { // Parsing error, just skip } else if (startptr == endptr) { |