Jacek Caban : widl: Use correct bytes in write_value.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jul 30 08:55:47 CDT 2007


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sun Jul 29 21:22:20 2007 +0200

widl: Use correct bytes in write_value.

---

 tools/widl/write_msft.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c
index 358d1db..da28803 100644
--- a/tools/widl/write_msft.c
+++ b/tools/widl/write_msft.c
@@ -1160,6 +1160,20 @@ static int encode_var(
     return 0;
 }
 
+static unsigned long get_ulong_val(unsigned long val, int vt)
+{
+    switch(vt) {
+    case VT_I2:
+    case VT_BOOL:
+    case VT_UI2:
+        return val & 0xffff;
+    case VT_I1:
+    case VT_UI1:
+        return val & 0xff;
+    }
+
+    return val;
+}
 
 static void write_value(msft_typelib_t* typelib, int *out, int vt, void *value)
 {
@@ -1177,11 +1191,11 @@ static void write_value(msft_typelib_t* typelib, int *out, int vt, void *value)
     case VT_HRESULT:
     case VT_PTR:
       {
-        unsigned long *lv = value;
-        if((*lv & 0x3ffffff) == *lv) {
+        const unsigned long lv = get_ulong_val(*(unsigned long*)value, vt);
+        if((lv & 0x3ffffff) == lv) {
             *out = 0x80000000;
             *out |= vt << 26;
-            *out |= *lv;
+            *out |= lv;
         } else {
             int offset = ctl2_alloc_segment(typelib, MSFT_SEG_CUSTDATA, 8, 0);
             *((unsigned short *)&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset]) = vt;




More information about the wine-cvs mailing list