Module: wine Branch: master Commit: 8b861202baadc4d3d4dd7a1eda6cf12cbe9e2de1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8b861202baadc4d3d4dd7a1eda...
Author: Eric Pouech eric.pouech@wanadoo.fr Date: Wed Feb 21 21:55:30 2007 +0100
dbghelp: Implemented SymMatchFileNameW.
---
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 331764d..5abb8c9 100644 --- a/dlls/dbghelp/path.c +++ b/dlls/dbghelp/path.c @@ -32,6 +32,7 @@ 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(LPCSTR DirPath) }
/****************************************************************** + * 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, PCSTR, PSTR); 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