From 67e4edc52238b8ab80a4864e657e8d1d14f67ef5 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Thu, 17 Nov 2005 11:04:39 +0000 Subject: [PATCH] When a symbol name already contains a module name, we shouldn't search in other modules. --- programs/winedbg/symbol.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/programs/winedbg/symbol.c b/programs/winedbg/symbol.c index 837f118cf01..9a61e5189d8 100644 --- a/programs/winedbg/symbol.c +++ b/programs/winedbg/symbol.c @@ -232,9 +232,16 @@ enum sym_get_lval symbol_get_lvalue(const char* name, const int lineno, sgv.bp_disp = bp_disp ? TRUE : FALSE; sgv.do_thunks = DBG_IVAR(AlwaysShowThunks); - buffer[0] = '*'; - buffer[1] = '!'; - strcpy(&buffer[2], name); + if (strchr(name, '!')) + { + strcpy(buffer, name); + } + else + { + buffer[0] = '*'; + buffer[1] = '!'; + strcpy(&buffer[2], name); + } /* this is a wine specific options to return also ELF modules in the * enumeration @@ -248,8 +255,20 @@ enum sym_get_lval symbol_get_lvalue(const char* name, const int lineno, if (!sgv.num && (name[0] != '_')) { - buffer[2] = '_'; - strcpy(&buffer[3], name); + char* ptr = strchr(name, '!'); + + if (ptr++) + { + memmove(ptr + 1, ptr, strlen(ptr)); + *ptr = '_'; + } + else + { + buffer[0] = '*'; + buffer[1] = '!'; + buffer[2] = '_'; + strcpy(&buffer[3], name); + } if (!SymEnumSymbols(dbg_curr_process->handle, 0, buffer, sgv_cb, (void*)&sgv)) { SymSetOptions(opt);