[Lldb-commits] [lldb] r221310 - for Siva Chandra: Fix compilation of StringPrinter.cpp with GCC. Differential Revision: http://reviews.llvm.org/D6122
Shawn Best
sbest at blueshiftinc.com
Tue Nov 4 14:43:34 PST 2014
Author: sbest
Date: Tue Nov 4 16:43:34 2014
New Revision: 221310
URL: http://llvm.org/viewvc/llvm-project?rev=221310&view=rev
Log:
for Siva Chandra: Fix compilation of StringPrinter.cpp with GCC. Differential Revision: http://reviews.llvm.org/D6122
Modified:
lldb/trunk/source/DataFormatters/StringPrinter.cpp
Modified: lldb/trunk/source/DataFormatters/StringPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/StringPrinter.cpp?rev=221310&r1=221309&r2=221310&view=diff
==============================================================================
--- lldb/trunk/source/DataFormatters/StringPrinter.cpp (original)
+++ lldb/trunk/source/DataFormatters/StringPrinter.cpp Tue Nov 4 16:43:34 2014
@@ -316,78 +316,6 @@ GetPrintable(StringElementType type, uin
}
}
-template <>
-bool
-lldb_private::formatters::ReadStringAndDumpToStream<StringElementType::ASCII> (ReadStringAndDumpToStreamOptions options)
-{
- assert(options.GetStream() && "need a Stream to print the string to");
- Error my_error;
- size_t my_data_read;
-
- ProcessSP process_sp(options.GetProcessSP());
-
- if (process_sp.get() == nullptr || options.GetLocation() == 0)
- return false;
-
- size_t size;
-
- if (options.GetSourceSize() == 0)
- size = process_sp->GetTarget().GetMaximumSizeOfStringSummary();
- else
- size = std::min(options.GetSourceSize(),process_sp->GetTarget().GetMaximumSizeOfStringSummary());
-
- lldb::DataBufferSP buffer_sp(new DataBufferHeap(size,0));
-
- my_data_read = process_sp->ReadCStringFromMemory(options.GetLocation(), (char*)buffer_sp->GetBytes(), size, my_error);
-
- if (my_error.Fail())
- return false;
-
- char prefix_token = options.GetPrefixToken();
- char quote = options.GetQuote();
-
- if (prefix_token != 0)
- options.GetStream()->Printf("%c%c",prefix_token,quote);
- else if (quote != 0)
- options.GetStream()->Printf("%c",quote);
-
- uint8_t* data_end = buffer_sp->GetBytes()+buffer_sp->GetByteSize();
-
- // since we tend to accept partial data (and even partially malformed data)
- // we might end up with no NULL terminator before the end_ptr
- // hence we need to take a slower route and ensure we stay within boundaries
- for (uint8_t* data = buffer_sp->GetBytes(); *data && (data < data_end);)
- {
- if (options.GetEscapeNonPrintables())
- {
- uint8_t* next_data = nullptr;
- auto printable = GetPrintable(StringElementType::ASCII, data, data_end, next_data);
- auto printable_bytes = printable.GetBytes();
- auto printable_size = printable.GetSize();
- if (!printable_bytes || !next_data)
- {
- // GetPrintable() failed on us - print one byte in a desperate resync attempt
- printable_bytes = data;
- printable_size = 1;
- next_data = data+1;
- }
- for (int c = 0; c < printable_size; c++)
- options.GetStream()->Printf("%c", *(printable_bytes+c));
- data = (uint8_t*)next_data;
- }
- else
- {
- options.GetStream()->Printf("%c",*data);
- data++;
- }
- }
-
- if (quote != 0)
- options.GetStream()->Printf("%c",quote);
-
- return true;
-}
-
// use this call if you already have an LLDB-side buffer for the data
template<typename SourceDataType>
static bool
@@ -488,6 +416,84 @@ DumpUTFBufferToStream (ConversionResult
return true;
}
+namespace lldb_private
+{
+
+namespace formatters
+{
+
+template <>
+bool
+ReadStringAndDumpToStream<StringElementType::ASCII> (ReadStringAndDumpToStreamOptions options)
+{
+ assert(options.GetStream() && "need a Stream to print the string to");
+ Error my_error;
+ size_t my_data_read;
+
+ ProcessSP process_sp(options.GetProcessSP());
+
+ if (process_sp.get() == nullptr || options.GetLocation() == 0)
+ return false;
+
+ size_t size;
+
+ if (options.GetSourceSize() == 0)
+ size = process_sp->GetTarget().GetMaximumSizeOfStringSummary();
+ else
+ size = std::min(options.GetSourceSize(),process_sp->GetTarget().GetMaximumSizeOfStringSummary());
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(size,0));
+
+ my_data_read = process_sp->ReadCStringFromMemory(options.GetLocation(), (char*)buffer_sp->GetBytes(), size, my_error);
+
+ if (my_error.Fail())
+ return false;
+
+ char prefix_token = options.GetPrefixToken();
+ char quote = options.GetQuote();
+
+ if (prefix_token != 0)
+ options.GetStream()->Printf("%c%c",prefix_token,quote);
+ else if (quote != 0)
+ options.GetStream()->Printf("%c",quote);
+
+ uint8_t* data_end = buffer_sp->GetBytes()+buffer_sp->GetByteSize();
+
+ // since we tend to accept partial data (and even partially malformed data)
+ // we might end up with no NULL terminator before the end_ptr
+ // hence we need to take a slower route and ensure we stay within boundaries
+ for (uint8_t* data = buffer_sp->GetBytes(); *data && (data < data_end);)
+ {
+ if (options.GetEscapeNonPrintables())
+ {
+ uint8_t* next_data = nullptr;
+ auto printable = GetPrintable(StringElementType::ASCII, data, data_end, next_data);
+ auto printable_bytes = printable.GetBytes();
+ auto printable_size = printable.GetSize();
+ if (!printable_bytes || !next_data)
+ {
+ // GetPrintable() failed on us - print one byte in a desperate resync attempt
+ printable_bytes = data;
+ printable_size = 1;
+ next_data = data+1;
+ }
+ for (int c = 0; c < printable_size; c++)
+ options.GetStream()->Printf("%c", *(printable_bytes+c));
+ data = (uint8_t*)next_data;
+ }
+ else
+ {
+ options.GetStream()->Printf("%c",*data);
+ data++;
+ }
+ }
+
+ if (quote != 0)
+ options.GetStream()->Printf("%c",quote);
+
+ return true;
+}
+
template<typename SourceDataType>
static bool
ReadUTFBufferAndDumpToStream (const ReadStringAndDumpToStreamOptions& options,
@@ -501,12 +507,12 @@ ReadUTFBufferAndDumpToStream (const Read
if (options.GetLocation() == 0 || options.GetLocation() == LLDB_INVALID_ADDRESS)
return false;
-
+
lldb::ProcessSP process_sp(options.GetProcessSP());
-
+
if (!process_sp)
return false;
-
+
const int type_width = sizeof(SourceDataType);
const int origin_encoding = 8 * type_width ;
if (origin_encoding != 8 && origin_encoding != 16 && origin_encoding != 32)
@@ -514,13 +520,13 @@ ReadUTFBufferAndDumpToStream (const Read
// if not UTF8, I need a conversion function to return proper UTF8
if (origin_encoding != 8 && !ConvertFunction)
return false;
-
+
if (!options.GetStream())
return false;
-
+
uint32_t sourceSize = options.GetSourceSize();
bool needs_zero_terminator = options.GetNeedsZeroTermination();
-
+
if (!sourceSize)
{
sourceSize = process_sp->GetTarget().GetMaximumSizeOfStringSummary();
@@ -528,37 +534,37 @@ ReadUTFBufferAndDumpToStream (const Read
}
else
sourceSize = std::min(sourceSize,process_sp->GetTarget().GetMaximumSizeOfStringSummary());
-
+
const int bufferSPSize = sourceSize * type_width;
-
+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(bufferSPSize,0));
-
+
if (!buffer_sp->GetBytes())
return false;
-
+
Error error;
char *buffer = reinterpret_cast<char *>(buffer_sp->GetBytes());
-
+
size_t data_read = 0;
if (needs_zero_terminator)
data_read = process_sp->ReadStringFromMemory(options.GetLocation(), buffer, bufferSPSize, error, type_width);
else
data_read = process_sp->ReadMemoryFromInferior(options.GetLocation(), (char*)buffer_sp->GetBytes(), bufferSPSize, error);
-
+
if (error.Fail() || data_read == 0)
{
options.GetStream()->Printf("unable to read data");
return true;
}
-
+
DataExtractor data(buffer_sp, process_sp->GetByteOrder(), process_sp->GetAddressByteSize());
-
+
return DumpUTFBufferToStream(ConvertFunction, data, *options.GetStream(), options.GetPrefixToken(), options.GetQuote(), sourceSize, options.GetEscapeNonPrintables());
}
template <>
bool
-lldb_private::formatters::ReadStringAndDumpToStream<StringElementType::UTF8> (ReadStringAndDumpToStreamOptions options)
+ReadStringAndDumpToStream<StringElementType::UTF8> (ReadStringAndDumpToStreamOptions options)
{
return ReadUTFBufferAndDumpToStream<UTF8>(options,
nullptr);
@@ -566,7 +572,7 @@ lldb_private::formatters::ReadStringAndD
template <>
bool
-lldb_private::formatters::ReadStringAndDumpToStream<StringElementType::UTF16> (ReadStringAndDumpToStreamOptions options)
+ReadStringAndDumpToStream<StringElementType::UTF16> (ReadStringAndDumpToStreamOptions options)
{
return ReadUTFBufferAndDumpToStream<UTF16>(options,
ConvertUTF16toUTF8);
@@ -574,7 +580,7 @@ lldb_private::formatters::ReadStringAndD
template <>
bool
-lldb_private::formatters::ReadStringAndDumpToStream<StringElementType::UTF32> (ReadStringAndDumpToStreamOptions options)
+ReadStringAndDumpToStream<StringElementType::UTF32> (ReadStringAndDumpToStreamOptions options)
{
return ReadUTFBufferAndDumpToStream<UTF32>(options,
ConvertUTF32toUTF8);
@@ -582,7 +588,7 @@ lldb_private::formatters::ReadStringAndD
template <>
bool
-lldb_private::formatters::ReadBufferAndDumpToStream<StringElementType::UTF8> (ReadBufferAndDumpToStreamOptions options)
+ReadBufferAndDumpToStream<StringElementType::UTF8> (ReadBufferAndDumpToStreamOptions options)
{
assert(options.GetStream() && "need a Stream to print the string to");
@@ -591,7 +597,7 @@ lldb_private::formatters::ReadBufferAndD
template <>
bool
-lldb_private::formatters::ReadBufferAndDumpToStream<StringElementType::ASCII> (ReadBufferAndDumpToStreamOptions options)
+ReadBufferAndDumpToStream<StringElementType::ASCII> (ReadBufferAndDumpToStreamOptions options)
{
// treat ASCII the same as UTF8
// FIXME: can we optimize ASCII some more?
@@ -600,18 +606,22 @@ lldb_private::formatters::ReadBufferAndD
template <>
bool
-lldb_private::formatters::ReadBufferAndDumpToStream<StringElementType::UTF16> (ReadBufferAndDumpToStreamOptions options)
+ReadBufferAndDumpToStream<StringElementType::UTF16> (ReadBufferAndDumpToStreamOptions options)
{
assert(options.GetStream() && "need a Stream to print the string to");
-
+
return DumpUTFBufferToStream(ConvertUTF16toUTF8, options.GetData(), *options.GetStream(), options.GetPrefixToken(), options.GetQuote(), options.GetSourceSize(), options.GetEscapeNonPrintables());
}
template <>
bool
-lldb_private::formatters::ReadBufferAndDumpToStream<StringElementType::UTF32> (ReadBufferAndDumpToStreamOptions options)
+ReadBufferAndDumpToStream<StringElementType::UTF32> (ReadBufferAndDumpToStreamOptions options)
{
assert(options.GetStream() && "need a Stream to print the string to");
-
+
return DumpUTFBufferToStream(ConvertUTF32toUTF8, options.GetData(), *options.GetStream(), options.GetPrefixToken(), options.GetQuote(), options.GetSourceSize(), options.GetEscapeNonPrintables());
}
+
+} // namespace formatters
+
+} // namespace lldb_private
More information about the lldb-commits
mailing list