Bugfix: ReadMemoryString() never actually copied the data into the passed in string.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39354 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Rene Gollent 2010-11-08 02:40:15 +00:00
parent 5c06337b7e
commit bcb394d6b1

View File

@ -23,23 +23,21 @@ TeamMemory::ReadMemoryString(target_addr_t address, size_t maxLength,
{ {
char buffer[B_PAGE_SIZE]; char buffer[B_PAGE_SIZE];
BString string; _string.Truncate(0);
while (maxLength > 0) { while (maxLength > 0) {
// read at max maxLength bytes, but don't read across page bounds // read at max maxLength bytes, but don't read across page bounds
size_t toRead = std::min(maxLength, size_t toRead = std::min(maxLength,
B_PAGE_SIZE - size_t(address % B_PAGE_SIZE)); B_PAGE_SIZE - size_t(address % B_PAGE_SIZE));
ssize_t bytesRead = ReadMemory(address, buffer, toRead); ssize_t bytesRead = ReadMemory(address, buffer, toRead);
if (bytesRead < 0) if (bytesRead < 0)
return string.Length() == 0 ? bytesRead : B_OK; return _string.Length() == 0 ? bytesRead : B_OK;
if (bytesRead == 0) if (bytesRead == 0)
return string.Length() == 0 ? B_BAD_ADDRESS : B_OK; return _string.Length() == 0 ? B_BAD_ADDRESS : B_OK;
// append the bytes read // append the bytes read
size_t length = strnlen(buffer, bytesRead); size_t length = strnlen(buffer, bytesRead);
string.Append(buffer, length); _string.Append(buffer, length);
// stop at end of string // stop at end of string
if (length < (size_t)bytesRead) if (length < (size_t)bytesRead)