Vincent Povirk : propsys: Use integer conversion functions in PropVariantCompareEx.

Alexandre Julliard julliard at winehq.org
Fri Sep 14 10:54:20 CDT 2012


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

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Thu Sep 13 17:16:26 2012 -0500

propsys: Use integer conversion functions in PropVariantCompareEx.

---

 dlls/propsys/propvar.c       |   72 ++++++++++++++++++++++++++++++++++++++++++
 dlls/propsys/tests/propsys.c |    4 +-
 2 files changed, 74 insertions(+), 2 deletions(-)

diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c
index 28100a0..69b2e60 100644
--- a/dlls/propsys/propvar.c
+++ b/dlls/propsys/propvar.c
@@ -215,9 +215,81 @@ HRESULT WINAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret)
 HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc,
                                      PROPVAR_CHANGE_FLAGS flags, VARTYPE vt)
 {
+    HRESULT hr;
+
     FIXME("(%p, %p, %d, %d, %d): semi-stub!\n", ppropvarDest, propvarSrc,
           propvarSrc->vt, flags, vt);
 
+    switch (vt)
+    {
+    case VT_I2:
+    {
+        SHORT res;
+        hr = PropVariantToInt16(propvarSrc, &res);
+        if (SUCCEEDED(hr))
+        {
+            ppropvarDest->vt = VT_I2;
+            ppropvarDest->u.iVal = res;
+        }
+        return hr;
+    }
+    case VT_UI2:
+    {
+        USHORT res;
+        hr = PropVariantToUInt16(propvarSrc, &res);
+        if (SUCCEEDED(hr))
+        {
+            ppropvarDest->vt = VT_UI2;
+            ppropvarDest->u.uiVal = res;
+        }
+        return hr;
+    }
+    case VT_I4:
+    {
+        LONG res;
+        hr = PropVariantToInt32(propvarSrc, &res);
+        if (SUCCEEDED(hr))
+        {
+            ppropvarDest->vt = VT_I4;
+            ppropvarDest->u.lVal = res;
+        }
+        return hr;
+    }
+    case VT_UI4:
+    {
+        ULONG res;
+        hr = PropVariantToUInt32(propvarSrc, &res);
+        if (SUCCEEDED(hr))
+        {
+            ppropvarDest->vt = VT_UI4;
+            ppropvarDest->u.ulVal = res;
+        }
+        return hr;
+    }
+    case VT_I8:
+    {
+        LONGLONG res;
+        hr = PropVariantToInt64(propvarSrc, &res);
+        if (SUCCEEDED(hr))
+        {
+            ppropvarDest->vt = VT_I8;
+            ppropvarDest->u.hVal.QuadPart = res;
+        }
+        return hr;
+    }
+    case VT_UI8:
+    {
+        ULONGLONG res;
+        hr = PropVariantToUInt64(propvarSrc, &res);
+        if (SUCCEEDED(hr))
+        {
+            ppropvarDest->vt = VT_UI8;
+            ppropvarDest->u.uhVal.QuadPart = res;
+        }
+        return hr;
+    }
+    }
+
     switch (propvarSrc->vt)
     {
         case VT_FILETIME:
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c
index c9df1c9..a18d6b1 100644
--- a/dlls/propsys/tests/propsys.c
+++ b/dlls/propsys/tests/propsys.c
@@ -716,13 +716,13 @@ static void test_PropVariantCompare(void)
     ok(res == -1, "res=%i\n", res);
 
     res = PropVariantCompareEx(&i4_large, &i2_0, 0, 0);
-    todo_wine ok(res == 1, "res=%i\n", res);
+    ok(res == 1, "res=%i\n", res);
 
     res = PropVariantCompareEx(&i4_largeneg, &i2_0, 0, 0);
     ok(res == -1, "res=%i\n", res);
 
     res = PropVariantCompareEx(&i2_2, &i4_2, 0, 0);
-    todo_wine ok(res == 0, "res=%i\n", res);
+    ok(res == 0, "res=%i\n", res);
 
     res = PropVariantCompareEx(&i2_2, &str_2, 0, 0);
     todo_wine ok(res == 0, "res=%i\n", res);




More information about the wine-cvs mailing list