Alex Villacís Lasso : oleaut32: Fix VarMod( VT_DECIMAL) test by properly initializing the DECIMAL to use.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Dec 26 06:49:32 CST 2006


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

Author: Alex Villacís Lasso <a_villacis at palosanto.com>
Date:   Sun Dec 24 16:08:35 2006 -0500

oleaut32: Fix VarMod(VT_DECIMAL) test by properly initializing the DECIMAL to use.

Fix Wine handling of VT_DECIMAL in VarMod.

---

 dlls/oleaut32/tests/vartest.c |   34 ++++++++++++++++++++++++----------
 dlls/oleaut32/variant.c       |   20 +++++++-------------
 2 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/dlls/oleaut32/tests/vartest.c b/dlls/oleaut32/tests/vartest.c
index 554c96f..845e433 100644
--- a/dlls/oleaut32/tests/vartest.c
+++ b/dlls/oleaut32/tests/vartest.c
@@ -2261,12 +2261,12 @@ static void test_VarMod(void)
 	case VT_BOOL:
 	case VT_DATE:
 	case VT_CY:
+	case VT_DECIMAL:
 	  hexpected = S_OK;
 	  break;
 	case VT_ERROR:
 	case VT_VARIANT:
 	case VT_UNKNOWN:
-	case VT_DECIMAL:
 	case VT_RECORD:
 	  lValid = FALSE;
 	  break;
@@ -2296,13 +2296,13 @@ static void test_VarMod(void)
 	case VT_R8:
 	case VT_BOOL:
 	case VT_DATE:
+	case VT_DECIMAL:
 	case VT_CY:
 	  hexpected = S_OK;
 	  break;
 	case VT_ERROR:
 	case VT_VARIANT:
 	case VT_UNKNOWN:
-	case VT_DECIMAL:
 	case VT_RECORD:
 	  rValid = FALSE;
 	  break;
@@ -2341,18 +2341,18 @@ static void test_VarMod(void)
       } else if((l == VT_NULL) && (r == VT_RECORD))
       {
 	hexpected = DISP_E_TYPEMISMATCH;
-      } else if((l == VT_NULL) && (r == VT_DECIMAL))
+      } else if((l == VT_I8) && (r == VT_DECIMAL))
       {
-	hexpected = E_INVALIDARG;
+	hexpected = S_OK;
+      } else if((l == VT_DECIMAL) && (r == VT_I8))
+      {
+	hexpected = S_OK;
       } else if((l == VT_UNKNOWN) || ((r == VT_UNKNOWN) && lFound && lValid))
       {
 	hexpected = DISP_E_TYPEMISMATCH;
       } else if((l == VT_NULL) && rFound)
       {
 	hexpected = S_OK;
-      } else if((l == VT_DECIMAL) || ((r == VT_DECIMAL) && lFound && lValid))
-      {
-	hexpected = E_INVALIDARG;
       } else if(l == VT_RECORD)
       {
 	hexpected = DISP_E_TYPEMISMATCH;
@@ -2399,8 +2399,16 @@ static void test_VarMod(void)
 	V_R8(&v1) = 100;
       else if(l == VT_UI8)
 	V_UI8(&v1) = 100;
+      else if(l == VT_I8)
+	V_I8(&v1) = 100;
       else if(l == VT_DATE)
 	V_DATE(&v1) = 1000;
+      else if (l == VT_DECIMAL)
+      {
+	V_DECIMAL(&v1).Hi32 = 0;
+	V_DECIMAL(&v1).Lo64 = 100;
+	V_DECIMAL(&v1).signscale = 0;
+      }
       else
 	V_I4(&v1) = 10000;
 
@@ -2412,8 +2420,16 @@ static void test_VarMod(void)
 	V_R8(&v2) = 100;
       else if(r == VT_UI8)
 	V_UI8(&v2) = 100;
+      else if(r == VT_I8)
+	V_I8(&v2) = 100;
       else if(r == VT_DATE)
 	V_DATE(&v2) = 1000;
+      else if (r == VT_DECIMAL)
+      {
+	V_DECIMAL(&v2).Hi32 = 0;
+	V_DECIMAL(&v2).Lo64 = 100;
+	V_DECIMAL(&v2).signscale = 0;
+      }
       else
 	V_I4(&v2) = 10000;
 
@@ -2478,7 +2494,6 @@ static void test_VarMod(void)
      "VarMod: expected 0x%x,%d,%d, got 0x%X,%d,%d\n", S_OK, VT_I4, 0, hres, V_VT(&vDst), V_I4(&vDst));
 
   /* some decimals */
-  todo_wine {
   V_VT(&v1) = VT_DECIMAL;
   V_VT(&v2) = VT_DECIMAL;
   VarDecFromI4(100, &V_DECIMAL(&v1));
@@ -2494,7 +2509,6 @@ static void test_VarMod(void)
   hres = pVarMod(&v1,&v2,&vDst);
   ok(hres == S_OK && V_VT(&vDst) == VT_I4 && V_I4(&vDst) == 0,
      "VarMod: expected 0x%x,%d,%d, got 0x%X,%d,%d\n", S_OK, VT_I4, 0, hres, V_VT(&vDst), V_I4(&vDst));
-  }
 
   VARMOD2(UINT,I4,100,10,I4,0,S_OK);
 
@@ -5170,7 +5184,7 @@ static void test_VarCat(void)
     hres = VarCat(&left,&right,&result);
     ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres);
     ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ,
-        "VarCat: VT_INT concat with VT_BOOL (TRUE) returned inncorrect result\n");
+        "VarCat: VT_INT concat with VT_BOOL (TRUE) returned incorrect result\n");
 
     VariantClear(&left);
     VariantClear(&right);
diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c
index 66c3d07..f586d8a 100644
--- a/dlls/oleaut32/variant.c
+++ b/dlls/oleaut32/variant.c
@@ -5032,14 +5032,12 @@ HRESULT WINAPI VarMod(LPVARIANT left, LP
     case VT_EMPTY:
     case VT_DATE :
     case VT_BSTR :
+    case VT_DECIMAL:
       break;
     case VT_VARIANT:
     case VT_UNKNOWN:
       V_VT(result) = VT_EMPTY;
       return DISP_E_TYPEMISMATCH;
-    case VT_DECIMAL:
-      V_VT(result) = VT_EMPTY;
-      return E_INVALIDARG;
     case VT_ERROR:
       return DISP_E_TYPEMISMATCH;
     case VT_RECORD:
@@ -5086,6 +5084,12 @@ HRESULT WINAPI VarMod(LPVARIANT left, LP
       }
     case VT_EMPTY:
     case VT_DATE :
+    case VT_DECIMAL:
+      if(V_VT(left) == VT_ERROR)
+      {
+	V_VT(result) = VT_EMPTY;
+	return DISP_E_TYPEMISMATCH;
+      }
     case VT_BSTR:
       if(V_VT(left) == VT_NULL)
       {
@@ -5116,16 +5120,6 @@ HRESULT WINAPI VarMod(LPVARIANT left, LP
     case VT_UNKNOWN:
       V_VT(result) = VT_EMPTY;
       return DISP_E_TYPEMISMATCH;
-    case VT_DECIMAL:
-      if(V_VT(left) == VT_ERROR)
-      {
-	V_VT(result) = VT_EMPTY;
-	return DISP_E_TYPEMISMATCH;
-      } else
-      {
-	V_VT(result) = VT_EMPTY;
-        return E_INVALIDARG;
-      }
     case VT_ERROR:
       return DISP_E_TYPEMISMATCH;
     case VT_RECORD:




More information about the wine-cvs mailing list