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