Eric Pouech : dbghelp: Implemented SymMatchString.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Dec 19 14:22:08 CST 2005


Module: wine
Branch: refs/heads/master
Commit: 17d93f9855380196c0d34f4fedea801aa6a153ea
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=17d93f9855380196c0d34f4fedea801aa6a153ea

Author: Eric Pouech <eric.pouech at wanadoo.fr>
Date:   Mon Dec 19 18:16:35 2005 +0100

dbghelp: Implemented SymMatchString.

---

 dlls/dbghelp/dbghelp.spec |    2 +-
 dlls/dbghelp/symbol.c     |   32 ++++++++++++++++++++++++++------
 include/dbghelp.h         |    2 ++
 3 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec
index 0b41cc6..9a0820e 100644
--- a/dlls/dbghelp/dbghelp.spec
+++ b/dlls/dbghelp/dbghelp.spec
@@ -81,7 +81,7 @@
 @ stdcall SymLoadModule(long long str str long long)
 @ stdcall SymLoadModuleEx(long long str str double long ptr long)
 @ stdcall SymMatchFileName(str str ptr ptr)
-@ stub SymMatchString
+@ stdcall SymMatchString(str str long)
 @ stdcall SymRegisterCallback64(long ptr double)
 @ stdcall SymRegisterCallback(long ptr ptr)
 @ stdcall SymRegisterFunctionEntryCallback64(ptr ptr double)
diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
index c47c04c..29e7d1f 100644
--- a/dlls/dbghelp/symbol.c
+++ b/dlls/dbghelp/symbol.c
@@ -81,11 +81,12 @@ static inline void re_append(char** mask
  *      +       1 or more of preceding char
  *      escapes \ on #, ?, [, ], *, +. don't work on -
  */
-static void compile_regex(const char* str, int numchar, regex_t* re)
+static void compile_regex(const char* str, int numchar, regex_t* re, BOOL _case)
 {
     char*       mask = HeapAlloc(GetProcessHeap(), 0, 1);
     unsigned    len = 1;
     BOOL        in_escape = FALSE;
+    unsigned    flags = REG_NOSUB;
 
     re_append(&mask, &len, '^');
 
@@ -118,7 +119,8 @@ static void compile_regex(const char* st
     }
     re_append(&mask, &len, '$');
     mask[len - 1] = '\0';
-    if (regcomp(re, mask, REG_NOSUB)) FIXME("Couldn't compile %s\n", mask);
+    if (_case) flags |= REG_ICASE;
+    if (regcomp(re, mask, flags)) FIXME("Couldn't compile %s\n", mask);
     HeapFree(GetProcessHeap(), 0, mask);
 }
 
@@ -733,7 +735,7 @@ static BOOL symt_enum_locals(struct proc
         BOOL            ret;
         regex_t         preg;
 
-        compile_regex(mask ? mask : "*", -1, &preg);
+        compile_regex(mask ? mask : "*", -1, &preg, FALSE);
         ret = symt_enum_locals_helper(pcs, module, &preg, EnumSymbolsCallback, 
                                       UserContext, sym_info, 
                                       &((struct symt_function*)sym)->vchildren);
@@ -780,8 +782,8 @@ BOOL WINAPI SymEnumSymbols(HANDLE hProce
 
         if (bang == Mask) return FALSE;
 
-        compile_regex(Mask, bang - Mask, &mod_regex);
-        compile_regex(bang + 1, -1, &sym_regex);
+        compile_regex(Mask, bang - Mask, &mod_regex, FALSE);
+        compile_regex(bang + 1, -1, &sym_regex, FALSE);
         
         for (module = pcs->lmodules; module; module = module->next)
         {
@@ -824,7 +826,7 @@ BOOL WINAPI SymEnumSymbols(HANDLE hProce
         Mask = bang + 1;
     }
 
-    compile_regex(Mask ? Mask : "*", -1, &sym_regex);
+    compile_regex(Mask ? Mask : "*", -1, &sym_regex, FALSE);
     symt_enum_module(module, &sym_regex, EnumSymbolsCallback, UserContext);
     regfree(&sym_regex);
 
@@ -1288,3 +1290,21 @@ DWORD WINAPI UnDecorateSymbolName(LPCSTR
         return 0;
     return strlen(UnDecoratedName);
 }
+
+/******************************************************************
+ *		SymMatchString (DBGHELP.@)
+ *
+ */
+BOOL WINAPI SymMatchString(PCSTR string, PCSTR re, BOOL _case)
+{
+    regex_t     preg;
+    BOOL        ret;
+
+    TRACE("%s %s %c\n", string, re, _case ? 'Y' : 'N');
+
+    compile_regex(re, -1, &preg, _case);
+    ret = regexec(&preg, string, 0, NULL, 0) == 0;
+    regfree(&preg);
+    return ret;
+}
+
diff --git a/include/dbghelp.h b/include/dbghelp.h
index 5cb25c7..c08e214 100644
--- a/include/dbghelp.h
+++ b/include/dbghelp.h
@@ -820,6 +820,8 @@ typedef BOOL (CALLBACK *PSYMBOL_REGISTER
 BOOL WINAPI SymRegisterCallback64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);
 BOOL WINAPI SymUnDName(PIMAGEHLP_SYMBOL, PSTR, DWORD);
 DWORD WINAPI UnDecorateSymbolName(LPCSTR, LPSTR, DWORD, DWORD);
+BOOL WINAPI SymMatchString(PCSTR string, PCSTR re, BOOL _case);
+BOOL WINAPI SymMatchStringW(PCWSTR string, PCWSTR re, BOOL _case);
 
 /*************************
  *      Source Files     *




More information about the wine-cvs mailing list