diff options
author | Greg Clayton <gclayton@apple.com> | 2011-06-17 23:50:44 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2011-06-17 23:50:44 +0000 |
commit | 4e4294bdeee8d41b74f8ddf671aa00952b645c3d (patch) | |
tree | a65127dfa5acbb60ff3cc22537482de0ccc5bbcd /lldb/source/Core | |
parent | 1240f4e53a6eb0a0f25b714d0e994137bc3d26c5 (diff) | |
download | bcm5719-llvm-4e4294bdeee8d41b74f8ddf671aa00952b645c3d.tar.gz bcm5719-llvm-4e4294bdeee8d41b74f8ddf671aa00952b645c3d.zip |
Added a new format for displaying an array of characters: eFormatCharArray
This us useful because sometomes you have to show a single character as: 'a'
(using eFormatChar) and other times you might have an array of single
charcters for display as: 'a' 'b' 'c', and other times you might want to
show the contents of buffer of characters that can contain non printable
chars: "\0\x22\n123".
This also fixes an issue that currently happens when you have a single character
C string (const char *a = "a"; or char b[1] = { 'b' };) that was being output
as "'a'" incorrectly due to the way the eFormatChar format output worked.
llvm-svn: 133316
Diffstat (limited to 'lldb/source/Core')
-rw-r--r-- | lldb/source/Core/DataExtractor.cpp | 6 | ||||
-rw-r--r-- | lldb/source/Core/State.cpp | 1 | ||||
-rw-r--r-- | lldb/source/Core/ValueObject.cpp | 4 |
3 files changed, 7 insertions, 4 deletions
diff --git a/lldb/source/Core/DataExtractor.cpp b/lldb/source/Core/DataExtractor.cpp index bc26c8645e1..9d665735534 100644 --- a/lldb/source/Core/DataExtractor.cpp +++ b/lldb/source/Core/DataExtractor.cpp @@ -1354,6 +1354,7 @@ DataExtractor::Dump else if (item_format != eFormatChar && item_format != eFormatCharPrintable && + item_format != eFormatCharArray && count > 0) { s->PutChar(' '); @@ -1397,6 +1398,7 @@ DataExtractor::Dump case eFormatChar: case eFormatCharPrintable: + case eFormatCharArray: { // If we are only printing one character surround it with single // quotes @@ -1406,7 +1408,7 @@ DataExtractor::Dump uint32_t ch = GetMaxU64(&offset, item_byte_size); if (isprint(ch)) s->Printf ("%c", ch); - else if (item_format == eFormatChar) + else if (item_format != eFormatCharPrintable) { switch (ch) { @@ -1608,7 +1610,7 @@ DataExtractor::Dump case eFormatVectorOfChar: s->PutChar('{'); - offset = Dump (s, start_offset, eFormatChar, 1, item_byte_size, item_byte_size, LLDB_INVALID_ADDRESS, 0, 0); + offset = Dump (s, start_offset, eFormatCharArray, 1, item_byte_size, item_byte_size, LLDB_INVALID_ADDRESS, 0, 0); s->PutChar('}'); break; diff --git a/lldb/source/Core/State.cpp b/lldb/source/Core/State.cpp index ad73ba8e3d5..2292fa750b2 100644 --- a/lldb/source/Core/State.cpp +++ b/lldb/source/Core/State.cpp @@ -51,6 +51,7 @@ lldb_private::GetFormatAsCString (lldb::Format format) case eFormatBytes: return "bytes"; case eFormatBytesWithASCII: return "bytes with ASCII"; case eFormatChar: return "character"; + case eFormatCharArray: return "character array"; case eFormatCharPrintable: return "printable character"; case eFormatComplexFloat: return "complet float"; case eFormatCString: return "c-string"; diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index ee44876a0ec..2f71c02dba8 100644 --- a/lldb/source/Core/ValueObject.cpp +++ b/lldb/source/Core/ValueObject.cpp @@ -505,7 +505,7 @@ ValueObject::GetSummaryAsCString () sstr << '"'; data.Dump (&sstr, 0, // Start offset in "data" - eFormatChar, // Print as characters + eFormatCharArray, // Print as characters 1, // Size of item (1 byte for a char!) bytes_read, // How many bytes to print? UINT32_MAX, // num per line @@ -535,7 +535,7 @@ ValueObject::GetSummaryAsCString () data.Dump (&sstr, 0, // Start offset in "data" - eFormatChar, // Print as characters + eFormatCharArray, // Print as characters 1, // Size of item (1 byte for a char!) len, // How many bytes to print? UINT32_MAX, // num per line |