PATCH: Coercing without flags
Marcus Meissner
marcus at jet.franken.de
Sat Aug 18 10:49:19 CDT 2001
Hi,
While debugging my cellphone access app I came across a failing
VariantChangeTypeEx call, which has a flag of 0x00000002, which passes
it down to VarBstrFromDate(), which is way more confused after this.
Judging from the MSDN documentation the wFlags should not be passed
down to the lowlevel conversion functions.
Ciao, Marcus
Changelog:
Do not pass the highlevel wFlags from VariantChangeType* down
to lowlevel Variant conversion functions.
Index: variant.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/variant.c,v
retrieving revision 1.21
diff -u -r1.21 variant.c
--- variant.c 2001/08/16 18:01:41 1.21
+++ variant.c 2001/08/18 15:49:22
@@ -871,12 +871,16 @@
*
* This function dispatches execution to the proper conversion API
* to do the necessary coercion.
+ *
+ * FIXME: Passing down dwFlags to the conversion functions is wrong, this
+ * is a different flagmask. Check MSDN.
*/
static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, VARTYPE vt )
{
HRESULT res = S_OK;
unsigned short vtFrom = 0;
vtFrom = ps->vt & VT_TYPEMASK;
+
/* Note: Since "long" and "int" values both have 4 bytes and are
* both signed integers "int" will be treated as "long" in the
@@ -941,7 +945,7 @@
res = VarI1FromBool( ps->u.boolVal, &(pd->u.cVal) );
break;
case( VT_BSTR ):
- res = VarI1FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.cVal) );
+ res = VarI1FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.cVal) );
break;
case( VT_CY ):
res = VarI1FromCy( ps->u.cyVal, &(pd->u.cVal) );
@@ -994,7 +998,7 @@
res = VarI2FromBool( ps->u.boolVal, &(pd->u.iVal) );
break;
case( VT_BSTR ):
- res = VarI2FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.iVal) );
+ res = VarI2FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.iVal) );
break;
case( VT_CY ):
res = VarI2FromCy( ps->u.cyVal, &(pd->u.iVal) );
@@ -1048,7 +1052,7 @@
res = VarI4FromBool( ps->u.boolVal, &(pd->u.lVal) );
break;
case( VT_BSTR ):
- res = VarI4FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.lVal) );
+ res = VarI4FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.lVal) );
break;
case( VT_CY ):
res = VarI4FromCy( ps->u.cyVal, &(pd->u.lVal) );
@@ -1101,7 +1105,7 @@
res = VarUI1FromBool( ps->u.boolVal, &(pd->u.bVal) );
break;
case( VT_BSTR ):
- res = VarUI1FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.bVal) );
+ res = VarUI1FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.bVal) );
break;
case( VT_CY ):
res = VarUI1FromCy( ps->u.cyVal, &(pd->u.bVal) );
@@ -1154,7 +1158,7 @@
res = VarUI2FromBool( ps->u.boolVal, &(pd->u.uiVal) );
break;
case( VT_BSTR ):
- res = VarUI2FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.uiVal) );
+ res = VarUI2FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.uiVal) );
break;
case( VT_CY ):
res = VarUI2FromCy( ps->u.cyVal, &(pd->u.uiVal) );
@@ -1207,7 +1211,7 @@
res = VarUI4FromBool( ps->u.boolVal, &(pd->u.ulVal) );
break;
case( VT_BSTR ):
- res = VarUI4FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.ulVal) );
+ res = VarUI4FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.ulVal) );
break;
case( VT_CY ):
res = VarUI4FromCy( ps->u.cyVal, &(pd->u.ulVal) );
@@ -1260,7 +1264,7 @@
res = VarR4FromBool( ps->u.boolVal, &(pd->u.fltVal) );
break;
case( VT_BSTR ):
- res = VarR4FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.fltVal) );
+ res = VarR4FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.fltVal) );
break;
case( VT_CY ):
res = VarR4FromCy( ps->u.cyVal, &(pd->u.fltVal) );
@@ -1313,7 +1317,7 @@
res = VarR8FromBool( ps->u.boolVal, &(pd->u.dblVal) );
break;
case( VT_BSTR ):
- res = VarR8FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.dblVal) );
+ res = VarR8FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.dblVal) );
break;
case( VT_CY ):
res = VarR8FromCy( ps->u.cyVal, &(pd->u.dblVal) );
@@ -1370,7 +1374,7 @@
res = VarDateFromBool( ps->u.boolVal, &(pd->u.date) );
break;
case( VT_BSTR ):
- res = VarDateFromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.date) );
+ res = VarDateFromStr( ps->u.bstrVal, lcid, 0, &(pd->u.date) );
break;
case( VT_CY ):
res = VarDateFromCy( ps->u.cyVal, &(pd->u.date) );
@@ -1427,7 +1431,7 @@
res = VariantCopy( pd, ps );
break;
case( VT_BSTR ):
- res = VarBoolFromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.boolVal) );
+ res = VarBoolFromStr( ps->u.bstrVal, lcid, 0, &(pd->u.boolVal) );
break;
case( VT_CY ):
res = VarBoolFromCy( ps->u.cyVal, &(pd->u.boolVal) );
@@ -1454,51 +1458,51 @@
res = E_OUTOFMEMORY;
break;
case( VT_I1 ):
- res = VarBstrFromI1( ps->u.cVal, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromI1( ps->u.cVal, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_I2 ):
- res = VarBstrFromI2( ps->u.iVal, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromI2( ps->u.iVal, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_INT ):
- res = VarBstrFromInt( ps->u.intVal, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromInt( ps->u.intVal, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_I4 ):
- res = VarBstrFromI4( ps->u.lVal, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromI4( ps->u.lVal, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_UI1 ):
- res = VarBstrFromUI1( ps->u.bVal, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromUI1( ps->u.bVal, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_UI2 ):
- res = VarBstrFromUI2( ps->u.uiVal, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromUI2( ps->u.uiVal, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_UINT ):
- res = VarBstrFromUint( ps->u.uintVal, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromUint( ps->u.uintVal, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_UI4 ):
- res = VarBstrFromUI4( ps->u.ulVal, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromUI4( ps->u.ulVal, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_R4 ):
- res = VarBstrFromR4( ps->u.fltVal, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromR4( ps->u.fltVal, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_R8 ):
- res = VarBstrFromR8( ps->u.dblVal, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromR8( ps->u.dblVal, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_DATE ):
- res = VarBstrFromDate( ps->u.date, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromDate( ps->u.date, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_BOOL ):
- res = VarBstrFromBool( ps->u.boolVal, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromBool( ps->u.boolVal, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_BSTR ):
res = VariantCopy( pd, ps );
break;
case( VT_CY ):
- res = VarBstrFromCy( ps->u.cyVal, lcid, dwFlags, &(pd->u.bstrVal) );
+ res = VarBstrFromCy( ps->u.cyVal, lcid, 0, &(pd->u.bstrVal) );
break;
case( VT_DISPATCH ):
- /*res = VarBstrFromDisp( ps->u.pdispVal, lcid, dwFlags, &(pd->u.bstrVal) );*/
+ /*res = VarBstrFromDisp( ps->u.pdispVal, lcid, 0, &(pd->u.bstrVal) );*/
case( VT_DECIMAL ):
- /*res = VarBstrFromDec( ps->u.deiVal, lcid, dwFlags, &(pd->u.bstrVal) );*/
+ /*res = VarBstrFromDec( ps->u.deiVal, lcid, 0, &(pd->u.bstrVal) );*/
case( VT_UNKNOWN ):
default:
res = DISP_E_TYPEMISMATCH;
@@ -1550,7 +1554,7 @@
res = VariantCopy( pd, ps );
break;
case( VT_BSTR ):
- res = VarCyFromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.cyVal) );
+ res = VarCyFromStr( ps->u.bstrVal, lcid, 0, &(pd->u.cyVal) );
break;
case( VT_DISPATCH ):
/*res = VarCyFromDisp( ps->u.pdispVal, lcid, &(pd->u.cyVal) );*/
More information about the wine-patches
mailing list