Fix in Variant's coerce function

Francois Gouget fgouget at free.fr
Thu May 17 21:19:04 CDT 2001


   Why is it that in the handling of VT_CY we were doing the conversion
just to return DISP_E_TYPEMISMATCH right after?
   It seemed wrong, as did the 32 suffixes, and leaving all the
xxxFromDisp functions commented out. The xxxFromDec functions must
remain commented out unfortunately. Changing that will be a job for
whoever fixes #181 (hint, hint).
   (http://wine.codeweavers.com/bugzilla/show_bug.cgi?id=181)

   Also, since there doesn't seem possible to convert VT_UNKNOWN to
something else, I just moved these cases next to the 'default:'.


Changelog:

 * include/oleauto.h,
   dlls/oleaut32/variant.c

   Fixed handling of VT_CY and VT_DISPATCH
   Removed some more 32 suffixes


   (these don't count, they're not in the include directory ;-)

--
Francois Gouget         fgouget at free.fr        http://fgouget.free.fr/
        War doesn't determine who's right.  War determines who's left.

-------------- next part --------------
Index: include/oleauto.h
===================================================================
RCS file: /home/cvs/wine/wine/include/oleauto.h,v
retrieving revision 1.36
diff -u -r1.36 oleauto.h
--- include/oleauto.h	2001/05/07 18:15:38	1.36
+++ include/oleauto.h	2001/05/18 00:24:21
@@ -316,7 +316,6 @@
 HRESULT WINAPI VarBstrFromI4(LONG lIn, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
 HRESULT WINAPI VarBstrFromR4(FLOAT fltIn, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
 HRESULT WINAPI VarBstrFromR8(double dblIn, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
-HRESULT WINAPI VarBstrFromCy(CY cyIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut);
 HRESULT WINAPI VarBstrFromDate(DATE dateIn, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
 HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, BSTR* pbstrOut);
 HRESULT WINAPI VarBstrFromI1(CHAR cIn, LCID lcid, ULONG dwFlags, BSTR*pbstrOut);
Index: dlls/oleaut32/variant.c
===================================================================
RCS file: /home/cvs/wine/wine/dlls/oleaut32/variant.c,v
retrieving revision 1.13
diff -u -r1.13 variant.c
--- dlls/oleaut32/variant.c	2001/02/28 05:31:03	1.13
+++ dlls/oleaut32/variant.c	2001/05/18 00:24:17
@@ -945,12 +945,13 @@
 			break;
 		case( VT_CY ):
 	     res = VarI1FromCy( ps->u.cyVal, &(pd->u.cVal) );
+			break;
 		case( VT_DISPATCH ):
-			/*res = VarI1FromDisp32( ps->u.pdispVal, lcid, &(pd->u.cVal) );*/
-		case( VT_UNKNOWN ):
-			/*res = VarI1From32( ps->u.lVal, &(pd->u.cVal) );*/
+			res = VarI1FromDisp( ps->u.pdispVal, lcid, &(pd->u.cVal) );
+			break;
 		case( VT_DECIMAL ):
-			/*res = VarI1FromDec32( ps->u.decVal, &(pd->u.cVal) );*/
+			/*res = VarI1FromDec( ps->u.decVal, &(pd->u.cVal) );*/
+		case( VT_UNKNOWN ):
 		default:
 			res = DISP_E_TYPEMISMATCH;
 			FIXME("Coercion from %d to %d\n", vtFrom, vt );
@@ -998,12 +999,13 @@
 			break;
 		case( VT_CY ):
 	     res = VarI2FromCy( ps->u.cyVal, &(pd->u.iVal) );
+			break;
 		case( VT_DISPATCH ):
-			/*res = VarI2FromDisp32( ps->u.pdispVal, lcid, &(pd->u.iVal) );*/
-		case( VT_UNKNOWN ):
-			/*res = VarI2From32( ps->u.lVal, &(pd->u.iVal) );*/
+			res = VarI2FromDisp( ps->u.pdispVal, lcid, &(pd->u.iVal) );
+			break;
 		case( VT_DECIMAL ):
-			/*res = VarI2FromDec32( ps->u.deiVal, &(pd->u.iVal) );*/
+			/*res = VarI2FromDec( ps->u.deiVal, &(pd->u.iVal) );*/
+		case( VT_UNKNOWN ):
 		default:
 			res = DISP_E_TYPEMISMATCH;
 			FIXME("Coercion from %d to %d\n", vtFrom, vt );
@@ -1052,12 +1054,13 @@
 			break;
 		case( VT_CY ):
 	     res = VarI4FromCy( ps->u.cyVal, &(pd->u.lVal) );
+			break;
 		case( VT_DISPATCH ):
-			/*res = VarI4FromDisp32( ps->u.pdispVal, lcid, &(pd->u.lVal) );*/
-		case( VT_UNKNOWN ):
-			/*res = VarI4From32( ps->u.lVal, &(pd->u.lVal) );*/
+			res = VarI4FromDisp( ps->u.pdispVal, lcid, &(pd->u.lVal) );
+			break;
 		case( VT_DECIMAL ):
-			/*res = VarI4FromDec32( ps->u.deiVal, &(pd->u.lVal) );*/
+			/*res = VarI4FromDec( ps->u.deiVal, &(pd->u.lVal) );*/
+		case( VT_UNKNOWN ):
 		default:
 			res = DISP_E_TYPEMISMATCH;
 			FIXME("Coercion from %d to %d\n", vtFrom, vt );
@@ -1105,12 +1108,13 @@
 			break;
 		case( VT_CY ):
 	     res = VarUI1FromCy( ps->u.cyVal, &(pd->u.bVal) );
+			break;
 		case( VT_DISPATCH ):
-			/*res = VarUI1FromDisp32( ps->u.pdispVal, lcid, &(pd->u.bVal) );*/
-		case( VT_UNKNOWN ):
-			/*res = VarUI1From32( ps->u.lVal, &(pd->u.bVal) );*/
+			res = VarUI1FromDisp( ps->u.pdispVal, lcid, &(pd->u.bVal) );
+			break;
 		case( VT_DECIMAL ):
-			/*res = VarUI1FromDec32( ps->u.deiVal, &(pd->u.bVal) );*/
+			/*res = VarUI1FromDec( ps->u.deiVal, &(pd->u.bVal) );*/
+		case( VT_UNKNOWN ):
 		default:
 			res = DISP_E_TYPEMISMATCH;
 			FIXME("Coercion from %d to %d\n", vtFrom, vt );
@@ -1158,12 +1162,13 @@
 			break;
 		case( VT_CY ):
 	     res = VarUI2FromCy( ps->u.cyVal, &(pd->u.uiVal) );
+			break;
 		case( VT_DISPATCH ):
-			/*res = VarUI2FromDisp32( ps->u.pdispVal, lcid, &(pd->u.uiVal) );*/
-		case( VT_UNKNOWN ):
-			/*res = VarUI2From32( ps->u.lVal, &(pd->u.uiVal) );*/
+			res = VarUI2FromDisp( ps->u.pdispVal, lcid, &(pd->u.uiVal) );
+			break;
 		case( VT_DECIMAL ):
-			/*res = VarUI2FromDec32( ps->u.deiVal, &(pd->u.uiVal) );*/
+			/*res = VarUI2FromDec( ps->u.deiVal, &(pd->u.uiVal) );*/
+		case( VT_UNKNOWN ):
 		default:
 			res = DISP_E_TYPEMISMATCH;
 			FIXME("Coercion from %d to %d\n", vtFrom, vt );
@@ -1211,12 +1216,13 @@
 			break;
 		case( VT_CY ):
 	     res = VarUI4FromCy( ps->u.cyVal, &(pd->u.ulVal) );
+			break;
 		case( VT_DISPATCH ):
-			/*res = VarUI4FromDisp32( ps->u.pdispVal, lcid, &(pd->u.ulVal) );*/
-		case( VT_UNKNOWN ):
-			/*res = VarUI4From32( ps->u.lVal, &(pd->u.ulVal) );*/
+			res = VarUI4FromDisp( ps->u.pdispVal, lcid, &(pd->u.ulVal) );
+			break;
 		case( VT_DECIMAL ):
-			/*res = VarUI4FromDec32( ps->u.deiVal, &(pd->u.ulVal) );*/
+			/*res = VarUI4FromDec( ps->u.deiVal, &(pd->u.ulVal) );*/
+		case( VT_UNKNOWN ):
 		default:
 			res = DISP_E_TYPEMISMATCH;
 			FIXME("Coercion from %d to %d\n", vtFrom, vt );
@@ -1264,12 +1270,13 @@
 			break;
 		case( VT_CY ):
 	     res = VarR4FromCy( ps->u.cyVal, &(pd->u.fltVal) );
+			break;
 		case( VT_DISPATCH ):
-			/*res = VarR4FromDisp32( ps->u.pdispVal, lcid, &(pd->u.fltVal) );*/
-		case( VT_UNKNOWN ):
-			/*res = VarR4From32( ps->u.lVal, &(pd->u.fltVal) );*/
+			res = VarR4FromDisp( ps->u.pdispVal, lcid, &(pd->u.fltVal) );
+			break;
 		case( VT_DECIMAL ):
-			/*res = VarR4FromDec32( ps->u.deiVal, &(pd->u.fltVal) );*/
+			/*res = VarR4FromDec( ps->u.deiVal, &(pd->u.fltVal) );*/
+		case( VT_UNKNOWN ):
 		default:
 			res = DISP_E_TYPEMISMATCH;
 			FIXME("Coercion from %d to %d\n", vtFrom, vt );
@@ -1317,12 +1324,13 @@
 			break;
 		case( VT_CY ):
 	     res = VarR8FromCy( ps->u.cyVal, &(pd->u.dblVal) );
+			break;
 		case( VT_DISPATCH ):
-			/*res = VarR8FromDisp32( ps->u.pdispVal, lcid, &(pd->u.dblVal) );*/
-		case( VT_UNKNOWN ):
-			/*res = VarR8From32( ps->u.lVal, &(pd->u.dblVal) );*/
+			res = VarR8FromDisp( ps->u.pdispVal, lcid, &(pd->u.dblVal) );
+			break;
 		case( VT_DECIMAL ):
-			/*res = VarR8FromDec32( ps->u.deiVal, &(pd->u.dblVal) );*/
+			/*res = VarR8FromDec( ps->u.deiVal, &(pd->u.dblVal) );*/
+		case( VT_UNKNOWN ):
 		default:
 			res = DISP_E_TYPEMISMATCH;
 			FIXME("Coercion from %d to %d\n", vtFrom, vt );
@@ -1374,12 +1382,13 @@
 			break;
 		case( VT_CY ):
 	     res = VarDateFromCy( ps->u.cyVal, &(pd->u.date) );
+			break;
 		case( VT_DISPATCH ):
-			/*res = VarDateFromDisp32( ps->u.pdispVal, lcid, &(pd->u.date) );*/
-		case( VT_UNKNOWN ):
-			/*res = VarDateFrom32( ps->u.lVal, &(pd->u.date) );*/
+			res = VarDateFromDisp( ps->u.pdispVal, lcid, &(pd->u.date) );
+			break;
 		case( VT_DECIMAL ):
-			/*res = VarDateFromDec32( ps->u.deiVal, &(pd->u.date) );*/
+			/*res = VarDateFromDec( ps->u.deiVal, &(pd->u.date) );*/
+		case( VT_UNKNOWN ):
 		default:
 			res = DISP_E_TYPEMISMATCH;
 			FIXME("Coercion from %d to %d\n", vtFrom, vt );
@@ -1431,12 +1440,13 @@
 			break;
 		case( VT_CY ):
 	     res = VarBoolFromCy( ps->u.cyVal, &(pd->u.boolVal) );
+			break;
 		case( VT_DISPATCH ):
-			/*res = VarBoolFromDisp32( ps->u.pdispVal, lcid, &(pd->u.boolVal) );*/
-		case( VT_UNKNOWN ):
-			/*res = VarBoolFrom32( ps->u.lVal, &(pd->u.boolVal) );*/
+			res = VarBoolFromDisp( ps->u.pdispVal, lcid, &(pd->u.boolVal) );
+			break;
 		case( VT_DECIMAL ):
-			/*res = VarBoolFromDec32( ps->u.deiVal, &(pd->u.boolVal) );*/
+			/*res = VarBoolFromDec( ps->u.deiVal, &(pd->u.boolVal) );*/
+		case( VT_UNKNOWN ):
 		default:
 			res = DISP_E_TYPEMISMATCH;
 			FIXME("Coercion from %d to %d\n", vtFrom, vt );
@@ -1493,13 +1503,14 @@
             res = VariantCopy( pd, ps );
             break;
 		case( VT_CY ):
-	     /*res = VarBstrFromCy32( ps->u.cyVal, lcid, dwFlags, &(pd->u.bstrVal) );*/
+	     res = VarBstrFromCy( ps->u.cyVal, lcid, dwFlags, &(pd->u.bstrVal) );
+			break;
 		case( VT_DISPATCH ):
-			/*res = VarBstrFromDisp32( ps->u.pdispVal, lcid, lcid, dwFlags, &(pd->u.bstrVal) );*/
-		case( VT_UNKNOWN ):
-			/*res = VarBstrFrom32( ps->u.lVal, lcid, dwFlags, &(pd->u.bstrVal) );*/
+			res = VarBstrFromDisp( ps->u.pdispVal, lcid, dwFlags, &(pd->u.bstrVal) );
+			break;
 		case( VT_DECIMAL ):
-			/*res = VarBstrFromDec32( ps->u.deiVal, lcid, dwFlags, &(pd->u.bstrVal) );*/
+			/*res = VarBstrFromDec( ps->u.deiVal, lcid, dwFlags, &(pd->u.bstrVal) );*/
+		case( VT_UNKNOWN ):
 		default:
 			res = DISP_E_TYPEMISMATCH;
 			FIXME("Coercion from %d to %d\n", vtFrom, vt );
@@ -1550,13 +1561,15 @@
 	     res = VariantCopy( pd, ps );
 	     break;
 	  case( VT_BSTR ):
-	     /*res = VarCyFromStr32( ps->u.bstrVal, lcid, dwFlags, &(pd->u.cyVal) );*/
+	     res = VarCyFromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.cyVal) );
+	     break;
 	  case( VT_DISPATCH ):
-	     /*res = VarCyFromDisp32( ps->u.pdispVal, lcid, &(pd->u.boolVal) );*/
-	  case( VT_UNKNOWN ):
-	     /*res = VarCyFrom32( ps->u.lVal, &(pd->u.boolVal) );*/
+	     res = VarCyFromDisp( ps->u.pdispVal, lcid, &(pd->u.cyVal) );
+	     break;
 	  case( VT_DECIMAL ):
-	     /*res = VarCyFromDec32( ps->u.deiVal, &(pd->u.boolVal) );*/
+	     /*res = VarCyFromDec( ps->u.deiVal, &(pd->u.cyVal) );*/
+	     break;
+	  case( VT_UNKNOWN ):
 	  default:
 	     res = DISP_E_TYPEMISMATCH;
 	     FIXME("Coercion from %d to %d\n", vtFrom, vt );


More information about the wine-patches mailing list