Peter Oberndorfer : winedbg: Do not write over const char * parameter.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Mar 8 07:17:03 CST 2007
Module: wine
Branch: master
Commit: e879efcc7453416f746b2bec55e769a705deba0c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e879efcc7453416f746b2bec55e769a705deba0c
Author: Peter Oberndorfer <kumbayo84 at 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);
More information about the wine-cvs
mailing list