[PATCH] [WineDbg]: fix the way array derefs are done

Eric Pouech eric.pouech at orange.fr
Sun Mar 29 10:21:55 CDT 2009




A+
---

 programs/winedbg/types.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)


diff --git a/programs/winedbg/types.c b/programs/winedbg/types.c
index ef5469f..8d3dabc 100644
--- a/programs/winedbg/types.c
+++ b/programs/winedbg/types.c
@@ -310,26 +310,26 @@ BOOL types_array_index(const struct dbg_lvalue* lvalue, int index,
     DWORD64             length;
 
     if (!types_get_real_type(&type, &tag)) return FALSE;
+    /* Contents of array share same data (addr mode, module...) */
+    *result = *lvalue;
     switch (tag)
     {
     case SymTagArrayType:
         types_get_info(&type, TI_GET_COUNT, &count);
         if (index < 0 || index >= count) return FALSE;
-        /* fall through */
+        break;
     case SymTagPointerType:
-        /* Contents of array share same data (addr mode, module...) */
-        *result = *lvalue;
-        /*
-         * Get the base type, so we know how much to index by.
-         */
-        types_get_info(&type, TI_GET_TYPE, &result->type.id);
-        types_get_info(&result->type, TI_GET_LENGTH, &length);
         memory_read_value(lvalue, sizeof(result->addr.Offset), &result->addr.Offset);
-        result->addr.Offset += index * (DWORD)length;
         break;
     default:
         assert(FALSE);
     }
+    /*
+     * Get the base type, so we know how much to index by.
+     */
+    types_get_info(&type, TI_GET_TYPE, &result->type.id);
+    types_get_info(&result->type, TI_GET_LENGTH, &length);
+    result->addr.Offset += index * (DWORD)length;
     return TRUE;
 }
 





More information about the wine-patches mailing list