[Debugger] Fix hex string search and GS code copy

This commit is contained in:
shygoo 2020-01-22 00:34:13 -06:00
parent 617db96317
commit bbabbc7b28
3 changed files with 9 additions and 10 deletions

View File

@ -1108,7 +1108,7 @@ LRESULT CDebugMemorySearch::OnWatchListPopupCopyGamesharkCode(WORD /*wNotifyCode
int length = presult->GetStrLength(); int length = presult->GetStrLength();
char str[1024]; char str[1024];
presult->GetMemoryValueString(str, 1024); presult->GetMemoryValueString(str, 1024, true);
bool haveOddLength = (length & 1) != 0; bool haveOddLength = (length & 1) != 0;
int evenLength = length & ~1; int evenLength = length & ~1;
@ -1168,8 +1168,7 @@ LRESULT CDebugMemorySearch::OnWatchListPopupCopyGamesharkCode(WORD /*wNotifyCode
} }
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, strGSCode.length()); HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, strGSCode.length());
strncpy((char*)GlobalLock(hMem), strGSCode.c_str(), strGSCode.length() - 1);
strGSCode.copy((char*)GlobalLock(hMem), strGSCode.length() - 1);
GlobalUnlock(hMem); GlobalUnlock(hMem);
OpenClipboard(); OpenClipboard();
EmptyClipboard(); EmptyClipboard();
@ -1205,7 +1204,7 @@ LRESULT CDebugMemorySearch::OnWatchListPopupCopyAddressAndDescription(WORD /*wNo
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, str.length()); HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, str.length());
str.copy((char*)GlobalLock(hMem), str.length() - 1); strncpy((char*)GlobalLock(hMem), str.c_str(), str.length() - 1);
GlobalUnlock(hMem); GlobalUnlock(hMem);
OpenClipboard(); OpenClipboard();
EmptyClipboard(); EmptyClipboard();

View File

@ -238,7 +238,7 @@ bool CScanResult::GetMemoryValue(CMixed* v)
return true; return true;
} }
int CScanResult::GetMemoryValueString(char* buffer, size_t size) int CScanResult::GetMemoryValueString(char* buffer, size_t size, bool bIgnoreHex)
{ {
if (g_MMU == NULL) if (g_MMU == NULL)
{ {
@ -246,7 +246,7 @@ int CScanResult::GetMemoryValueString(char* buffer, size_t size)
return 1; return 1;
} }
bool bHex = (m_DisplayFormat == DisplayHex); bool bHex = (m_DisplayFormat == DisplayHex) && !bIgnoreHex;
uint32_t paddr = m_Address & 0x1FFFFFFF; uint32_t paddr = m_Address & 0x1FFFFFFF;
@ -737,7 +737,7 @@ void CMemoryScanner::FirstScanLoopString(DisplayFormat resultDisplayFormat)
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)
{ {
uint32_t leAddr = (addr + i) ^ 3; uint32_t leAddr = (addr + i) ^ 3;
if (m_Value._string[i] != m_Memory[leAddr]) if ((uint8_t)m_Value._string[i] != m_Memory[leAddr])
{ {
goto next_addr; goto next_addr;
} }
@ -766,7 +766,7 @@ void CMemoryScanner::FirstScanLoopIString(DisplayFormat resultDisplayFormat)
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)
{ {
uint32_t leAddr = (addr + i) ^ 3; uint32_t leAddr = (addr + i) ^ 3;
if (toupper(m_Value._string[i]) != toupper(m_Memory[leAddr])) if (toupper((uint8_t)m_Value._string[i]) != toupper(m_Memory[leAddr]))
{ {
goto next_addr; goto next_addr;
} }
@ -782,7 +782,7 @@ void CMemoryScanner::FirstScanLoopIString(DisplayFormat resultDisplayFormat)
// scan for text of unknown single-byte encoding // scan for text of unknown single-byte encoding
void CMemoryScanner::FirstScanLoopUnkString(void) void CMemoryScanner::FirstScanLoopUnkString(void)
{ {
const char *str = m_Value._string; const uint8_t* str = (const uint8_t*)m_Value._string;
int length = m_StringValueLength; int length = m_StringValueLength;
uint32_t startAddr = m_RangeStartAddress; uint32_t startAddr = m_RangeStartAddress;

View File

@ -151,7 +151,7 @@ public:
public: public:
int GetValueString(char* buffer, size_t size); int GetValueString(char* buffer, size_t size);
int GetMemoryValueString(char* buffer, size_t size); int GetMemoryValueString(char* buffer, size_t size, bool bIgnoreHex = false);
int GetAddressString(char *buffer); int GetAddressString(char *buffer);
uint32_t GetVirtualAddress(void); uint32_t GetVirtualAddress(void);
bool SetMemoryValueFromString(char* str); bool SetMemoryValueFromString(char* str);