Module: wine Branch: master Commit: e879efcc7453416f746b2bec55e769a705deba0c URL: http://source.winehq.org/git/wine.git/?a=commit;h=e879efcc7453416f746b2bec55...
Author: Peter Oberndorfer kumbayo84@arcor.de Date: Wed Mar 7 22:04:21 2007 +0100
winedbg: Do not write over const char * parameter.
Also pass the right string to SymEnumSymbols and check for _ in symbol name, instead of beginning of string.
---
programs/winedbg/symbol.c | 32 ++++++++++++++++++-------------- 1 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/programs/winedbg/symbol.c b/programs/winedbg/symbol.c index 90508f4..15e7093 100644 --- a/programs/winedbg/symbol.c +++ b/programs/winedbg/symbol.c @@ -239,23 +239,27 @@ enum sym_get_lval symbol_get_lvalue(const char* name, const int lineno, SymSetOptions((opt = SymGetOptions()) | 0x40000000); SymEnumSymbols(dbg_curr_process->handle, 0, buffer, sgv_cb, (void*)&sgv);
- if (!sgv.num && (name[0] != '_')) + if (!sgv.num) { - char* ptr = strchr(name, '!'); - - if (ptr++) - { - memmove(ptr + 1, ptr, strlen(ptr)); - *ptr = '_'; - } - else + const char* ptr = strchr(name, '!'); + if ((ptr && ptr[1] != '_') || (!ptr && *name != '_')) { - buffer[0] = '*'; - buffer[1] = '!'; - buffer[2] = '_'; - strcpy(&buffer[3], name); + if (ptr) + { + int offset = ptr - name; + memcpy(buffer, name, offset + 1); + buffer[offset + 1] = '_'; + strcpy(&buffer[offset + 2], ptr + 1); + } + else + { + buffer[0] = '*'; + buffer[1] = '!'; + buffer[2] = '_'; + strcpy(&buffer[3], name); + } + SymEnumSymbols(dbg_curr_process->handle, 0, buffer, sgv_cb, (void*)&sgv); } - SymEnumSymbols(dbg_curr_process->handle, 0, buffer, sgv_cb, (void*)&sgv); } SymSetOptions(opt);