When a symbol name already contains a module name, we shouldn't search in other modules.
diff --git a/programs/winedbg/symbol.c b/programs/winedbg/symbol.c index 837f118..9a61e51 100644 --- a/programs/winedbg/symbol.c +++ b/programs/winedbg/symbol.c
@@ -232,9 +232,16 @@ 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 @@ 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);