Eric Pouech : dbghelp: Internal search routines can now be case sensitive/insensitive.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Dec 26 11:46:02 CST 2005


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

Author: Eric Pouech <eric.pouech at wanadoo.fr>
Date:   Mon Dec 26 12:57:26 2005 +0100

dbghelp: Internal search routines can now be case sensitive/insensitive.
- Now handling option SYMOPT_CASE_INSENSITIVE for symbol search.
- Quick implementation of SymSearch on top of SymEnumSymbols (should
  be the other way around).

---

 dlls/dbghelp/dbghelp.spec |    2 +-
 dlls/dbghelp/symbol.c     |   51 +++++++++++++++++++++++++++++++++++++++++----
 include/dbghelp.h         |    5 ++++
 3 files changed, 53 insertions(+), 5 deletions(-)

diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec
index 0d7106b..92ccd49 100644
--- a/dlls/dbghelp/dbghelp.spec
+++ b/dlls/dbghelp/dbghelp.spec
@@ -86,7 +86,7 @@
 @ stdcall SymRegisterCallback(long ptr ptr)
 @ stdcall SymRegisterFunctionEntryCallback64(ptr ptr double)
 @ stdcall SymRegisterFunctionEntryCallback(ptr ptr ptr)
-@ stub SymSearch
+@ stdcall SymSearch(long double long long str double ptr ptr long)
 @ stdcall SymSetContext(long ptr ptr)
 @ stdcall SymSetOptions(long)
 @ stdcall SymSetParentWindow(long)
diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c
index 74634d1..2e840e2 100644
--- a/dlls/dbghelp/symbol.c
+++ b/dlls/dbghelp/symbol.c
@@ -738,7 +738,8 @@ static BOOL symt_enum_locals(struct proc
         BOOL            ret;
         regex_t         preg;
 
-        compile_regex(mask ? mask : "*", -1, &preg, FALSE);
+        compile_regex(mask ? mask : "*", -1, &preg,
+                      dbghelp_options & SYMOPT_CASE_INSENSITIVE);
         ret = symt_enum_locals_helper(pcs, module, &preg, EnumSymbolsCallback, 
                                       UserContext, sym_info, 
                                       &((struct symt_function*)sym)->vchildren);
@@ -785,8 +786,10 @@ BOOL WINAPI SymEnumSymbols(HANDLE hProce
 
         if (bang == Mask) return FALSE;
 
-        compile_regex(Mask, bang - Mask, &mod_regex, FALSE);
-        compile_regex(bang + 1, -1, &sym_regex, FALSE);
+        compile_regex(Mask, bang - Mask, &mod_regex, 
+                      dbghelp_options & SYMOPT_CASE_INSENSITIVE);
+        compile_regex(bang + 1, -1, &sym_regex, 
+                      dbghelp_options & SYMOPT_CASE_INSENSITIVE);
         
         for (module = pcs->lmodules; module; module = module->next)
         {
@@ -829,7 +832,8 @@ BOOL WINAPI SymEnumSymbols(HANDLE hProce
         Mask = bang + 1;
     }
 
-    compile_regex(Mask ? Mask : "*", -1, &sym_regex, FALSE);
+    compile_regex(Mask ? Mask : "*", -1, &sym_regex, 
+                      dbghelp_options & SYMOPT_CASE_INSENSITIVE);
     symt_enum_module(module, &sym_regex, EnumSymbolsCallback, UserContext);
     regfree(&sym_regex);
 
@@ -1311,3 +1315,42 @@ BOOL WINAPI SymMatchString(PCSTR string,
     return ret;
 }
 
+/******************************************************************
+ *		SymSearch (DBGHELP.@)
+ */
+BOOL WINAPI SymSearch(HANDLE hProcess, ULONG64 BaseOfDll, DWORD Index,
+                      DWORD SymTag, PCSTR Mask, DWORD64 Address,
+                      PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
+                      PVOID UserContext, DWORD Options)
+{
+    TRACE("(%p %s %lu %lu %s %s %p %p %lx)\n",
+          hProcess, wine_dbgstr_longlong(BaseOfDll), Index, SymTag, Mask, 
+          wine_dbgstr_longlong(Address), EnumSymbolsCallback,
+          UserContext, Options);
+
+    if (Index != 0)
+    {
+        FIXME("Unsupported searching for a given Index (%lu)\n", Index);
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+    if (SymTag != 0)
+    {
+        FIXME("Unsupported searching for a given SymTag (%lu)\n", SymTag);
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+    if (Address != 0)
+    {
+        FIXME("Unsupported searching for a given Address (%s)\n", wine_dbgstr_longlong(Address));
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+    if (Options != SYMSEARCH_GLOBALSONLY)
+    {
+        FIXME("Unsupported searching with options (%lx)\n", Options);
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+    return SymEnumSymbols(hProcess, BaseOfDll, Mask, EnumSymbolsCallback, UserContext);
+}
diff --git a/include/dbghelp.h b/include/dbghelp.h
index c08e214..dd2aad8 100644
--- a/include/dbghelp.h
+++ b/include/dbghelp.h
@@ -800,6 +800,10 @@ typedef struct _TI_FINDCHILDREN_PARAMS 
 #define UNDNAME_NO_ARGUMENTS             (0x2000)
 #define UNDNAME_NO_SPECIAL_SYMS          (0x4000)
 
+#define SYMSEARCH_MASKOBJS              0x01
+#define SYMSEARCH_RECURSE               0x02
+#define SYMSEARCH_GLOBALSONLY           0x04
+
 BOOL WINAPI SymGetTypeInfo(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID);
 typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID);
 BOOL WINAPI SymEnumTypes(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
@@ -822,6 +826,7 @@ BOOL WINAPI SymUnDName(PIMAGEHLP_SYMBOL,
 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);
+BOOL WINAPI SymSearch(HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD);
 
 /*************************
  *      Source Files     *




More information about the wine-cvs mailing list