[PATCH 12/26] [DbgHelp]: implemented SymMatchFileNameW

Eric Pouech eric.pouech at wanadoo.fr
Wed Feb 21 14:55:30 CST 2007




A+
---

 dlls/dbghelp/dbghelp.spec |    2 +-
 dlls/dbghelp/path.c       |   29 +++++++++++++++++++++++++++++
 include/dbghelp.h         |    1 +
 3 files changed, 31 insertions(+), 1 deletions(-)

diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec
index a91415e..174341c 100644
--- a/dlls/dbghelp/dbghelp.spec
+++ b/dlls/dbghelp/dbghelp.spec
@@ -119,7 +119,7 @@
 @ stdcall SymLoadModuleEx(long long str str double long ptr long)
 @ stdcall SymLoadModuleExW(long long wstr wstr double long ptr long)
 @ stdcall SymMatchFileName(str str ptr ptr)
-@ stub SymMatchFileNameW
+@ stdcall SymMatchFileNameW(wstr wstr ptr ptr)
 @ stdcall SymMatchString(str str long)
 @ stub SymMatchStringA
 @ stub SymMatchStringW
diff --git a/dlls/dbghelp/path.c b/dlls/dbghelp/path.c
index cfea315..c900c2c 100644
--- a/dlls/dbghelp/path.c
+++ b/dlls/dbghelp/path.c
@@ -32,6 +32,7 @@ #include "wine/debug.h"
 WINE_DEFAULT_DEBUG_CHANNEL(dbghelp);
 
 static inline BOOL is_sep(char ch) {return ch == '/' || ch == '\\';}
+static inline BOOL is_sepW(WCHAR ch) {return ch == '/' || ch == '\\';}
 
 static inline const char* file_name(const char* str)
 {
@@ -146,6 +147,34 @@ BOOL WINAPI MakeSureDirectoryPathExists(
 }
 
 /******************************************************************
+ *		SymMatchFileNameW (DBGHELP.@)
+ *
+ */
+BOOL WINAPI SymMatchFileNameW(WCHAR* file, WCHAR* match,
+                              WCHAR** filestop, WCHAR** matchstop)
+{
+    WCHAR*      fptr;
+    WCHAR*      mptr;
+
+    TRACE("(%s %s %p %p)\n",
+          debugstr_w(file), debugstr_w(match), filestop, matchstop);
+
+    fptr = file + strlenW(file) - 1;
+    mptr = match + strlenW(match) - 1;
+
+    while (fptr >= file && mptr >= match)
+    {
+        if (toupperW(*fptr) != toupperW(*mptr) && !(is_sepW(*fptr) && is_sepW(*mptr)))
+            break;
+        fptr--; mptr--;
+    }
+    if (filestop) *filestop = fptr;
+    if (matchstop) *matchstop = mptr;
+
+    return mptr == match - 1;
+}
+
+/******************************************************************
  *		SymMatchFileName (DBGHELP.@)
  *
  */
diff --git a/include/dbghelp.h b/include/dbghelp.h
index ee3103b..ba293ed 100644
--- a/include/dbghelp.h
+++ b/include/dbghelp.h
@@ -1023,6 +1023,7 @@ BOOL WINAPI SearchTreeForFile(PCSTR, PCS
 typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(LPCSTR, PVOID);
 BOOL WINAPI EnumDirTree(HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, void*);
 BOOL WINAPI SymMatchFileName(PSTR, PSTR, PSTR*, PSTR*);
+BOOL WINAPI SymMatchFileNameW(PWSTR, PWSTR, PWSTR*, PWSTR*);
 PCHAR WINAPI SymSetHomeDirectory(HANDLE, PCSTR);
 PCHAR WINAPI SymGetHomeDirectory(DWORD, PSTR, size_t);
 #define hdBase  0



More information about the wine-patches mailing list