Added patch to implement dbghelp.UnDecorateSymbolNameW.

This commit is contained in:
Sebastian Lackner 2015-07-28 23:00:22 +02:00
parent d96eed9e17
commit 8ccce27f89
5 changed files with 150 additions and 14 deletions

View File

@ -39,7 +39,7 @@ Wine. All those differences are also documented on the
Included bug fixes and improvements
-----------------------------------
**Bug fixes and features included in the next upcoming release [15]:**
**Bug fixes and features included in the next upcoming release [16]:**
* Add stub for D3DXTessellateNPatches
* Add stubs for D3DCompile2 and D3DCompileFromFile
@ -52,6 +52,7 @@ Included bug fixes and improvements
* Fix security cookie handling for UPX compressed executables ([Wine Bug #38949](https://bugs.winehq.org/show_bug.cgi?id=38949))
* Forward exitcode from child process when in wineconsole
* Implement AMStream GetMultiMediaStream functions ([Wine Bug #37090](https://bugs.winehq.org/show_bug.cgi?id=37090))
* Implement dbghelp.UnDecorateSymbolNameW ([Wine Bug #38828](https://bugs.winehq.org/show_bug.cgi?id=38828))
* Return dummy ID3DXSkinInfo interface when skinning info not present ([Wine Bug #33904](https://bugs.winehq.org/show_bug.cgi?id=33904))
* Share source of d3dx9_36 with d3dx9_33 to avoid Wine DLL forwards ([Wine Bug #21817](https://bugs.winehq.org/show_bug.cgi?id=21817))
* Silence repeated LocaleNameToLCID/LCIDToLocaleName unsupported flags FIXMEs ([Wine Bug #30076](https://bugs.winehq.org/show_bug.cgi?id=30076))

3
debian/changelog vendored
View File

@ -1,4 +1,4 @@
wine-staging (1.7.48) UNRELEASED; urgency=low
ine-staging (1.7.48) UNRELEASED; urgency=low
* Update patches for d3dx9_36.D3DXGetShader{Input,Output}Semantics and add
additional tests.
* Update patchset to query GPU infos with GLX_MESA_query_renderer extension
@ -21,6 +21,7 @@ wine-staging (1.7.48) UNRELEASED; urgency=low
* Added patch to implement AMStream GetMultiMediaStream functions.
* Added patch with stub for D3DXTessellateNPatches.
* Added patch with stubs for D3DCompile2 and D3DCompileFromFile.
* Added patch to implement dbghelp.UnDecorateSymbolNameW.
* Removed patch to allow to enable/disable InsertMode in wineconsole settings
(accepted upstream).
* Removed patch to improve IoGetDeviceObjectPointer stub to appease SecuROM

View File

@ -0,0 +1,114 @@
From 03999c58b169eac57f724f830e147f095a99989c Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Tue, 28 Jul 2015 22:58:03 +0200
Subject: dbghelp: Implement UnDecorateSymbolNameW.
---
dlls/dbghelp/dbghelp.spec | 4 ++--
dlls/dbghelp/symbol.c | 61 +++++++++++++++++++++++++++++++++++++----------
2 files changed, 50 insertions(+), 15 deletions(-)
diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec
index 4772358..6004f95 100644
--- a/dlls/dbghelp/dbghelp.spec
+++ b/dlls/dbghelp/dbghelp.spec
@@ -183,8 +183,8 @@
@ stdcall SymUnDName64(ptr str long)
@ stdcall SymUnloadModule(long long)
@ stdcall SymUnloadModule64(long int64)
-@ stdcall UnDecorateSymbolName(str str long long)
-@ stub UnDecorateSymbolNameW
+@ stdcall UnDecorateSymbolName(str ptr long long)
+@ stdcall UnDecorateSymbolNameW(wstr ptr long long)
@ stdcall UnmapDebugInformation(ptr)
@ stdcall WinDbgExtensionDllInit(ptr long long)
#@ stub block
diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
index cbe232b..d4624ae 100644
--- a/dlls/dbghelp/symbol.c
+++ b/dlls/dbghelp/symbol.c
@@ -1751,21 +1751,13 @@ BOOL WINAPI SymUnDName64(PIMAGEHLP_SYMBOL64 sym, PSTR UnDecName, DWORD UnDecName
static void * CDECL und_alloc(size_t len) { return HeapAlloc(GetProcessHeap(), 0, len); }
static void CDECL und_free (void* ptr) { HeapFree(GetProcessHeap(), 0, ptr); }
-
-/***********************************************************************
- * UnDecorateSymbolName (DBGHELP.@)
- */
-DWORD WINAPI UnDecorateSymbolName(PCSTR DecoratedName, PSTR UnDecoratedName,
- DWORD UndecoratedLength, DWORD Flags)
+static char * CDECL und_name(char *buffer, const char *mangled, int buflen, unsigned short int flags)
{
/* undocumented from msvcrt */
static HANDLE hMsvcrt;
static char* (CDECL *p_undname)(char*, const char*, int, void* (CDECL*)(size_t), void (CDECL*)(void*), unsigned short);
static const WCHAR szMsvcrt[] = {'m','s','v','c','r','t','.','d','l','l',0};
- TRACE("(%s, %p, %d, 0x%08x)\n",
- debugstr_a(DecoratedName), UnDecoratedName, UndecoratedLength, Flags);
-
if (!p_undname)
{
if (!hMsvcrt) hMsvcrt = LoadLibraryW(szMsvcrt);
@@ -1773,11 +1765,54 @@ DWORD WINAPI UnDecorateSymbolName(PCSTR DecoratedName, PSTR UnDecoratedName,
if (!p_undname) return 0;
}
- if (!UnDecoratedName) return 0;
- if (!p_undname(UnDecoratedName, DecoratedName, UndecoratedLength,
- und_alloc, und_free, Flags))
+ return p_undname(buffer, mangled, buflen, und_alloc, und_free, flags);
+}
+
+/***********************************************************************
+ * UnDecorateSymbolName (DBGHELP.@)
+ */
+DWORD WINAPI UnDecorateSymbolName(PCSTR decorated_name, PSTR undecorated_name,
+ DWORD undecorated_length, DWORD flags)
+{
+ TRACE("(%s, %p, %d, 0x%08x)\n",
+ debugstr_a(decorated_name), undecorated_name, undecorated_length, flags);
+
+ if (!undecorated_name)
+ return 0;
+ if (!und_name(undecorated_name, decorated_name, undecorated_length, flags))
return 0;
- return strlen(UnDecoratedName);
+ return strlen(undecorated_name);
+}
+
+/***********************************************************************
+ * UnDecorateSymbolNameW (DBGHELP.@)
+ */
+DWORD WINAPI UnDecorateSymbolNameW(PCWSTR decorated_name, PWSTR undecorated_name,
+ DWORD undecorated_length, DWORD flags)
+{
+ char *buf, *ptr;
+ int len;
+
+ TRACE("(%s, %p, %d, 0x%08x)\n",
+ debugstr_w(decorated_name), undecorated_name, undecorated_length, flags);
+
+ if (!undecorated_name)
+ return 0;
+
+ len = WideCharToMultiByte(CP_ACP, 0, decorated_name, -1, NULL, 0, NULL, NULL);
+ if (!(buf = HeapAlloc(GetProcessHeap(), 0, len)))
+ return 0;
+ WideCharToMultiByte(CP_ACP, 0, decorated_name, -1, buf, len, NULL, NULL);
+
+ ptr = und_name(NULL, buf, 0, flags);
+ HeapFree(GetProcessHeap(), 0, buf);
+ if (!ptr)
+ return 0;
+
+ MultiByteToWideChar(CP_ACP, 0, ptr, -1, undecorated_name, undecorated_length);
+ undecorated_name[undecorated_length - 1] = 0;
+ HeapFree(GetProcessHeap(), 0, ptr);
+ return strlenW(undecorated_name);
}
#define WILDCHAR(x) (-(x))
--
2.4.5

View File

@ -0,0 +1 @@
Fixes: [38828] Implement dbghelp.UnDecorateSymbolNameW

View File

@ -109,6 +109,7 @@ patch_enable_all ()
enable_d3dx9_36_Texture_Align="$1"
enable_d3dx9_36_UpdateSkinnedMesh="$1"
enable_dbghelp_Debug_Symbols="$1"
enable_dbghelp_UnDecorateSymbolNameW="$1"
enable_ddraw_EnumSurfaces="$1"
enable_ddraw_IDirect3DTexture2_Load="$1"
enable_ddraw_d3d_execute_buffer="$1"
@ -404,6 +405,9 @@ patch_enable ()
dbghelp-Debug_Symbols)
enable_dbghelp_Debug_Symbols="$2"
;;
dbghelp-UnDecorateSymbolNameW)
enable_dbghelp_UnDecorateSymbolNameW="$2"
;;
ddraw-EnumSurfaces)
enable_ddraw_EnumSurfaces="$2"
;;
@ -2519,6 +2523,21 @@ if test "$enable_dbghelp_Debug_Symbols" -eq 1; then
) >> "$patchlist"
fi
# Patchset dbghelp-UnDecorateSymbolNameW
# |
# | This patchset fixes the following Wine bugs:
# | * [#38828] Implement dbghelp.UnDecorateSymbolNameW
# |
# | Modified files:
# | * dlls/dbghelp/dbghelp.spec, dlls/dbghelp/symbol.c
# |
if test "$enable_dbghelp_UnDecorateSymbolNameW" -eq 1; then
patch_apply dbghelp-UnDecorateSymbolNameW/0001-dbghelp-Implement-UnDecorateSymbolNameW.patch
(
echo '+ { "Sebastian Lackner", "dbghelp: Implement UnDecorateSymbolNameW.", 1 },';
) >> "$patchlist"
fi
# Patchset ddraw-EnumSurfaces
# |
# | This patchset fixes the following Wine bugs:
@ -4896,6 +4915,18 @@ if test "$enable_wined3d_CSMT_Helper" -eq 1; then
) >> "$patchlist"
fi
# Patchset wined3d-wined3d_swapchain_present
# |
# | Modified files:
# | * dlls/wined3d/swapchain.c
# |
if test "$enable_wined3d_wined3d_swapchain_present" -eq 1; then
patch_apply wined3d-wined3d_swapchain_present/0001-wined3d-Silence-repeated-wined3d_swapchain_present-F.patch
(
echo '+ { "Sebastian Lackner", "wined3d: Silence repeated wined3d_swapchain_present FIXME.", 1 },';
) >> "$patchlist"
fi
# Patchset wined3d-MESA_GPU_Info
# |
# | Modified files:
@ -4980,18 +5011,6 @@ if test "$enable_wined3d_resource_check_usage" -eq 1; then
) >> "$patchlist"
fi
# Patchset wined3d-wined3d_swapchain_present
# |
# | Modified files:
# | * dlls/wined3d/swapchain.c
# |
if test "$enable_wined3d_wined3d_swapchain_present" -eq 1; then
patch_apply wined3d-wined3d_swapchain_present/0001-wined3d-Silence-repeated-wined3d_swapchain_present-F.patch
(
echo '+ { "Sebastian Lackner", "wined3d: Silence repeated wined3d_swapchain_present FIXME.", 1 },';
) >> "$patchlist"
fi
# Patchset wined3d-CSMT_Main
# |
# | This patchset fixes the following Wine bugs: