[PATCH] dbghelp: Implement SymFromNameW().

Zhiyi Zhang zzhang at codeweavers.com
Thu Apr 22 05:15:08 CDT 2021



On 4/22/21 6:00 PM, Gijs Vermeulen wrote:
> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50829
> Signed-off-by: Gijs Vermeulen <gijsvrm at gmail.com>
> ---
>  dlls/dbghelp/dbghelp.spec |  2 +-
>  dlls/dbghelp/symbol.c     | 29 +++++++++++++++++++++++++++++
>  2 files changed, 30 insertions(+), 1 deletion(-)
>
> diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec
> index b17c7b18655..73455c547e8 100644
> --- a/dlls/dbghelp/dbghelp.spec
> +++ b/dlls/dbghelp/dbghelp.spec
> @@ -75,7 +75,7 @@
>  @ stdcall SymFromIndex(long int64 long ptr)
>  @ stdcall SymFromIndexW(long int64 long ptr)
>  @ stdcall SymFromName(long str ptr)
> -@ stub SymFromNameW
> +@ stdcall SymFromNameW(long wstr ptr)
>  @ stub SymFromToken
>  @ stub SymFromTokenW
>  @ stdcall SymFunctionTableAccess(long long)
> diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
> index 706d088aec0..8b32b06c327 100644
> --- a/dlls/dbghelp/symbol.c
> +++ b/dlls/dbghelp/symbol.c
> @@ -1404,6 +1404,35 @@ BOOL WINAPI SymFromName(HANDLE hProcess, PCSTR Name, PSYMBOL_INFO Symbol)
>      return FALSE;
>  }
>  
> +/***********************************************************************
> + *      SymFromNameW (DBGHELP.@)
> + */
> +BOOL WINAPI SymFromNameW(HANDLE process, const WCHAR *name, SYMBOL_INFOW *symbol)
> +{
> +    SYMBOL_INFO *si;
> +    DWORD len;
> +    char *tmp;
> +    BOOL ret;
> +
> +    TRACE("(%p, %s, %p)\n", process, debugstr_w(name), symbol);
> +
> +    len = sizeof(*si) + symbol->MaxNameLen * sizeof(WCHAR);
> +    if (!(si = HeapAlloc(GetProcessHeap(), 0, len))) return FALSE;
> +
> +    len = WideCharToMultiByte(CP_ACP, 0, name, -1, NULL, 0, NULL, NULL);
> +    if (!(tmp = HeapAlloc(GetProcessHeap(), 0, len))) return FALSE;
si is leaked on failure.

> +    WideCharToMultiByte(CP_ACP, 0, name, -1, tmp, len, NULL, NULL);
> +
> +    si->SizeOfStruct = sizeof(*si);
> +    si->MaxNameLen = symbol->MaxNameLen;
> +    if ((ret = SymFromName(process, tmp, si)))
> +        copy_symbolW(symbol, si);
> +
> +    HeapFree(GetProcessHeap(), 0, tmp);
> +    HeapFree(GetProcessHeap(), 0, si);
> +    return ret;
> +}
> +
>  /***********************************************************************
>   *		SymGetSymFromName64 (DBGHELP.@)
>   */




More information about the wine-devel mailing list