Jacek Caban : winedump: Improved TLB custom data handling.

Alexandre Julliard julliard at winehq.org
Thu Aug 29 13:18:14 CDT 2013


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Aug 29 15:06:53 2013 +0200

winedump: Improved TLB custom data handling.

---

 tools/winedump/tlb.c |   38 ++++++++++++++++++++++++++++++++------
 1 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/tools/winedump/tlb.c b/tools/winedump/tlb.c
index 4ed3162..d12831e 100644
--- a/tools/winedump/tlb.c
+++ b/tools/winedump/tlb.c
@@ -390,6 +390,15 @@ static int dump_msft_namehashtab(seg_t *seg)
     return -1;
 }
 
+static void dump_string(int len, int align_off)
+{
+    printf("\"");
+    fwrite(tlb_read(len), len, 1, stdout);
+    printf("\" ");
+    while((len++ + align_off) & 3)
+        printf("\\%2.2x", tlb_read_byte());
+}
+
 static void dump_msft_name(int base, int n)
 {
     int len;
@@ -401,11 +410,8 @@ static void dump_msft_name(int base, int n)
     len = print_hex("namelen")&0xff;
 
     print_offset();
-    printf("name = \"");
-    fwrite(tlb_read(len), len, 1, stdout);
-    printf("\" ");
-    while(len++ & 3)
-        printf("\\%2.2x", tlb_read_byte());
+    printf("name = ");
+    dump_string(len, 0);
     printf("\n");
 
     print_end_block();
@@ -470,9 +476,29 @@ static int dump_msft_arraydescs(seg_t *seg)
 
 static int dump_msft_custdata(seg_t *seg)
 {
+    unsigned short vt;
+    unsigned i, n;
+
     print_begin_block("CustData");
 
-    dump_binary(seg->length); /* FIXME */
+    for(i=0; offset < seg->offset+seg->length; i++) {
+        print_offset();
+
+        vt = tlb_read_short();
+        printf("vt %d", vt);
+        n = tlb_read_int();
+
+        switch(vt) {
+        case 8 /* VT_BSTR */:
+            printf(" len %d: ", n);
+            dump_string(n, 2);
+            printf("\n");
+            break;
+        default:
+            printf(": %x ", n);
+            printf("\\%2.2x \\%2.2x\n", tlb_read_byte(), tlb_read_byte());
+        }
+    }
 
     print_end_block();
     return -1;




More information about the wine-cvs mailing list