[4/5] oledb32: Implement GetConversionSize DBTYPE_VARIANT -> DBTYPE_BYTES

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Fri May 24 03:04:48 CDT 2013


Hi,
Also fixes whitespace issue.

Changelog:
      oledb32: Implement GetConversionSize DBTYPE_VARIANT -> DBTYPE_BYTES


Best Regards
   Alistair Leslie-Hughes

-------------- next part --------------
>From 698ad87175abeb6c6b85e42dd4302810e7055ff2 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Tue, 21 May 2013 20:39:09 +1000
Subject: [PATCH] Implement GetConversionSize DBTYPE_VARIANT -> DBTYPE_BYTES
To: wine-patches <wine-patches at winehq.org>

---
 dlls/oledb32/convert.c       | 23 ++++++++++++++++++++++-
 dlls/oledb32/tests/convert.c | 16 ++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
index beca387..fd98b31 100644
--- a/dlls/oledb32/convert.c
+++ b/dlls/oledb32/convert.c
@@ -121,7 +121,7 @@ static int get_length(DBTYPE type)
     case DBTYPE_UI2:
         return 2;
     case DBTYPE_BOOL:
-	return sizeof(VARIANT_BOOL);
+        return sizeof(VARIANT_BOOL);
     case DBTYPE_I4:
     case DBTYPE_UI4:
     case DBTYPE_R4:
@@ -143,6 +143,7 @@ static int get_length(DBTYPE type)
         return sizeof(FILETIME);
     case DBTYPE_GUID:
         return sizeof(GUID);
+    case DBTYPE_BYTES:
     case DBTYPE_WSTR:
     case DBTYPE_STR:
     case DBTYPE_BYREF | DBTYPE_WSTR:
@@ -1378,6 +1379,26 @@ static HRESULT WINAPI convert_GetConversionSize(IDataConvert* iface,
         }
     }
     break;
+    case DBTYPE_BYTES:
+    {
+        switch (src_type)
+        {
+        case DBTYPE_VARIANT:
+        {
+            if(V_VT((VARIANT*)src) == VT_BSTR)
+                *dst_len = (SysStringLen(V_BSTR((VARIANT*)src))) / sizeof(WCHAR);
+            else
+                WARN("DBTYPE_BYTES->DBTYPE_VARIANT(%d) unimplemented\n", V_VT((VARIANT*)src));
+
+            return S_OK;
+        }
+        break;
+        default:
+            FIXME("unimplemented for %04x -> DBTYPE_BYTES\n", src_type);
+            return E_NOTIMPL;
+        }
+    }
+    break;
     default:
         FIXME("unimplemented for conversion %d->%d\n", src_type, dst_type);
         return E_NOTIMPL;
diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c
index aee27b8..3a25777 100644
--- a/dlls/oledb32/tests/convert.c
+++ b/dlls/oledb32/tests/convert.c
@@ -2469,6 +2469,22 @@ static void test_getconversionsize(void)
     todo_wine ok(dst_len == 110, "%ld\n", dst_len);
     VariantClear(&var);
 
+    dst_len = 0;
+    src_len = 20;
+    V_VT(&var) = VT_BSTR;
+    V_BSTR(&var) = SysAllocString(strW);
+    hr = IDataConvert_GetConversionSize(convert, DBTYPE_VARIANT, DBTYPE_BYTES, &src_len, &dst_len, &var);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(dst_len == 2, "%ld\n", dst_len);
+    VariantClear(&var);
+
+    dst_len = 0;
+    src_len = 20;
+    V_VT(&var) = VT_NULL;
+    hr = IDataConvert_GetConversionSize(convert, DBTYPE_VARIANT, DBTYPE_BYTES, &src_len, &dst_len, &var);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    todo_wine ok(dst_len == 110, "%ld\n", dst_len);
+    VariantClear(&var);
 }
 
 static void test_converttobytes(void)
-- 
1.8.1.2




More information about the wine-patches mailing list