From 2f9d5a5aa6f176ed7b9b8be18334a2741be14dbe Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Thu, 9 Dec 2010 23:45:13 +0000 Subject: [PATCH] Extend ValueLoader::LoadStringValue() to accept a max length parameter. When a CStringValue is representing an array, use the array's length to limit how many bytes we read. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39795 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/debugger/value/ValueLoader.cpp | 6 +++--- src/apps/debugger/value/ValueLoader.h | 2 +- src/apps/debugger/value/value_nodes/CStringValueNode.cpp | 8 ++++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/apps/debugger/value/ValueLoader.cpp b/src/apps/debugger/value/ValueLoader.cpp index 2bf1cae254..21c78462b1 100644 --- a/src/apps/debugger/value/ValueLoader.cpp +++ b/src/apps/debugger/value/ValueLoader.cpp @@ -188,10 +188,10 @@ ValueLoader::LoadValue(ValueLocation* location, type_code valueType, status_t -ValueLoader::LoadStringValue(BVariant& location, BString& _value) +ValueLoader::LoadStringValue(BVariant& location, size_t maxSize, BString& _value) { static const size_t kMaxStringSize = 255; - return fTeamMemory->ReadMemoryString(location.ToUInt64(), kMaxStringSize, - _value); + return fTeamMemory->ReadMemoryString(location.ToUInt64(), + maxSize > kMaxStringSize ? kMaxStringSize : maxSize, _value); } diff --git a/src/apps/debugger/value/ValueLoader.h b/src/apps/debugger/value/ValueLoader.h index f18a764539..6f39e56672 100644 --- a/src/apps/debugger/value/ValueLoader.h +++ b/src/apps/debugger/value/ValueLoader.h @@ -32,7 +32,7 @@ public: BVariant& _value); status_t LoadStringValue(BVariant& location, - BString& _value); + size_t maxSize, BString& _value); private: Architecture* fArchitecture; diff --git a/src/apps/debugger/value/value_nodes/CStringValueNode.cpp b/src/apps/debugger/value/value_nodes/CStringValueNode.cpp index 5c779bafc7..dc967113b4 100644 --- a/src/apps/debugger/value/value_nodes/CStringValueNode.cpp +++ b/src/apps/debugger/value/value_nodes/CStringValueNode.cpp @@ -69,16 +69,20 @@ CStringValueNode::ResolvedLocationAndValue(ValueLoader* valueLoader, BVariant addressData; BString valueData; status_t error = B_OK; + size_t maxSize = 255; if (dynamic_cast(fType) != NULL) { error = valueLoader->LoadValue(location, valueType, false, addressData); - } else + } else { addressData.SetTo(location->PieceAt(0).address); + maxSize = dynamic_cast(fType) + ->DimensionAt(0)->CountElements(); + } if (error != B_OK) return error; - error = valueLoader->LoadStringValue(addressData, valueData); + error = valueLoader->LoadStringValue(addressData, maxSize, valueData); if (error != B_OK) return error;