mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-03 01:23:01 +00:00
winedump: Re-import the demangling code from msvcrt.
This commit is contained in:
parent
1d58300478
commit
2f0c0f4c38
|
@ -130,58 +130,11 @@ void dump_unicode_str( const WCHAR *str, int len )
|
|||
|
||||
const char* get_symbol_str(const char* symname)
|
||||
{
|
||||
char* tmp;
|
||||
const char* ret;
|
||||
const char* ret = NULL;
|
||||
|
||||
if (!symname) return "(nil)";
|
||||
if (globals.do_demangle)
|
||||
{
|
||||
parsed_symbol symbol;
|
||||
|
||||
symbol_init(&symbol, symname);
|
||||
if (!symbol_demangle(&symbol))
|
||||
ret = symname;
|
||||
else if (symbol.flags & SYM_DATA)
|
||||
{
|
||||
ret = tmp = dump_want_n(strlen(symbol.arg_text[0]) + 1);
|
||||
if (tmp) strcpy(tmp, symbol.arg_text[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned int i, len, start = symbol.flags & SYM_THISCALL ? 1 : 0;
|
||||
|
||||
len = strlen(symbol.return_text) + 3 /* ' __' */ +
|
||||
strlen(symbol_get_call_convention(&symbol)) + 1 /* ' ' */+
|
||||
strlen(symbol.function_name) + 1 /* ')' */;
|
||||
if (!symbol.argc || (symbol.argc == 1 && symbol.flags & SYM_THISCALL))
|
||||
len += 4 /* "void" */;
|
||||
else for (i = start; i < symbol.argc; i++)
|
||||
len += (i > start ? 2 /* ", " */ : 0 /* "" */) + strlen(symbol.arg_text[i]);
|
||||
if (symbol.varargs) len += 5 /* ", ..." */;
|
||||
len += 2; /* ")\0" */
|
||||
|
||||
ret = tmp = dump_want_n(len);
|
||||
if (tmp)
|
||||
{
|
||||
sprintf(tmp, "%s __%s %s(",
|
||||
symbol.return_text,
|
||||
symbol_get_call_convention(&symbol),
|
||||
symbol.function_name);
|
||||
if (!symbol.argc || (symbol.argc == 1 && symbol.flags & SYM_THISCALL))
|
||||
strcat(tmp, "void");
|
||||
else for (i = start; i < symbol.argc; i++)
|
||||
{
|
||||
if (i > start) strcat(tmp, ", ");
|
||||
strcat(tmp, symbol.arg_text[i]);
|
||||
}
|
||||
if (symbol.varargs) strcat(tmp, ", ...");
|
||||
strcat(tmp, ")");
|
||||
}
|
||||
}
|
||||
symbol_clear(&symbol);
|
||||
}
|
||||
else ret = symname;
|
||||
return ret;
|
||||
if (globals.do_demangle) ret = demangle( symname );
|
||||
return ret ? ret : symname;
|
||||
}
|
||||
|
||||
const char* get_guid_str(const GUID* guid)
|
||||
|
|
|
@ -453,7 +453,7 @@ int main (int argc, char *argv[])
|
|||
if (globals.do_code && symbol_searched(count, symbol.symbol))
|
||||
{
|
||||
/* Attempt to get information about the symbol */
|
||||
BOOL result = symbol_demangle (&symbol) || symbol_search(&symbol);
|
||||
BOOL result = symbol_search(&symbol);
|
||||
|
||||
if (result && symbol.function_name)
|
||||
/* Clean up the prototype */
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -168,7 +168,7 @@ BOOL dll_next_symbol (parsed_symbol * sym);
|
|||
/* Symbol functions */
|
||||
void symbol_init(parsed_symbol* symbol, const char* name);
|
||||
|
||||
BOOL symbol_demangle (parsed_symbol *symbol);
|
||||
char *demangle( const char *name );
|
||||
|
||||
BOOL symbol_search (parsed_symbol *symbol);
|
||||
|
||||
|
|
Loading…
Reference in a new issue