* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#include "TeamMemory.h"
#include <algorithm>
#include <OS.h>
#include <String.h>
TeamMemory::~TeamMemory()
{
}
status_t
TeamMemory::ReadMemoryString(target_addr_t address, size_t maxLength,
BString& _string)
{
char buffer[B_PAGE_SIZE];
_string.Truncate(0);
while (maxLength > 0) {
size_t toRead = std::min(maxLength,
B_PAGE_SIZE - size_t(address % B_PAGE_SIZE));
ssize_t bytesRead = ReadMemory(address, buffer, toRead);
if (bytesRead < 0)
return _string.Length() == 0 ? bytesRead : B_OK;
if (bytesRead == 0)
return _string.Length() == 0 ? B_BAD_ADDRESS : B_OK;
size_t length = strnlen(buffer, bytesRead);
_string.Append(buffer, length);
if (length < (size_t)bytesRead)
return B_OK;
address += bytesRead;
maxLength -= bytesRead;
}
return B_OK;
}