Peter Oberndorfer : winedbg: Do not write over const char * parameter.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 8 07:17:03 CST 2007


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

Author: Peter Oberndorfer <kumbayo84 at arcor.de>
Date:   Wed Mar  7 22:04:21 2007 +0100

winedbg: Do not write over const char * parameter.

Also pass the right string to SymEnumSymbols and check for _ in symbol
name, instead of beginning of string.

---

 programs/winedbg/symbol.c |   32 ++++++++++++++++++--------------
 1 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/programs/winedbg/symbol.c b/programs/winedbg/symbol.c
index 90508f4..15e7093 100644
--- a/programs/winedbg/symbol.c
+++ b/programs/winedbg/symbol.c
@@ -239,23 +239,27 @@ enum sym_get_lval symbol_get_lvalue(const char* name, const int lineno,
     SymSetOptions((opt = SymGetOptions()) | 0x40000000);
     SymEnumSymbols(dbg_curr_process->handle, 0, buffer, sgv_cb, (void*)&sgv);
 
-    if (!sgv.num && (name[0] != '_'))
+    if (!sgv.num)
     {
-        char*   ptr = strchr(name, '!');
-
-        if (ptr++)
-        {
-            memmove(ptr + 1, ptr, strlen(ptr));
-            *ptr = '_';
-        }
-        else
+        const char*   ptr = strchr(name, '!');
+        if ((ptr && ptr[1] != '_') || (!ptr && *name != '_'))
         {
-            buffer[0] = '*';
-            buffer[1] = '!';
-            buffer[2] = '_';
-            strcpy(&buffer[3], name);
+            if (ptr)
+            {
+                int offset = ptr - name;
+                memcpy(buffer, name, offset + 1);
+                buffer[offset + 1] = '_';
+                strcpy(&buffer[offset + 2], ptr + 1);
+            }
+            else
+            {
+                buffer[0] = '*';
+                buffer[1] = '!';
+                buffer[2] = '_';
+                strcpy(&buffer[3], name);
+            }
+            SymEnumSymbols(dbg_curr_process->handle, 0, buffer, sgv_cb, (void*)&sgv);
         }
-        SymEnumSymbols(dbg_curr_process->handle, 0, buffer, sgv_cb, (void*)&sgv);
     }
     SymSetOptions(opt);
 




More information about the wine-cvs mailing list