From 40fcf6675284dbf757cbf105dcbda6ffede08281 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Thu, 30 May 2013 10:06:11 +1000 Subject: [PATCH] oledb32: Implement GetConversionSize, DBTYPE_VARIANT(VT_ARRAY|VT_UI1)->DBTYPE_BYTES. --- dlls/oledb32/convert.c | 19 ++++++++++++++++++- dlls/oledb32/tests/convert.c | 15 +++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c index ef2019cccd5..a784897b013 100644 --- a/dlls/oledb32/convert.c +++ b/dlls/oledb32/convert.c @@ -1364,7 +1364,24 @@ static HRESULT WINAPI convert_GetConversionSize(IDataConvert* iface, if(V_VT((VARIANT*)src) == VT_BSTR) *dst_len = (SysStringLen(V_BSTR((VARIANT*)src))) / sizeof(WCHAR); else - WARN("DBTYPE_VARIANT(%d)->DBTYPE_BYTES unimplemented\n", V_VT((VARIANT*)src)); + { + switch(V_VT((VARIANT*)src)) + { + case VT_UI1 | VT_ARRAY: + { + LONG l; + + hr = SafeArrayGetUBound(V_ARRAY((VARIANT*)src), 1, &l); + if(FAILED(hr)) + return hr; + *dst_len = l+1; + + break; + } + default: + WARN("DBTYPE_VARIANT(%d)->DBTYPE_BYTES unimplemented\n", V_VT((VARIANT*)src)); + } + } break; default: FIXME("unimplemented for %04x -> DBTYPE_BYTES\n", src_type); diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c index 49d8be0cbeb..b6bf4be35d1 100644 --- a/dlls/oledb32/tests/convert.c +++ b/dlls/oledb32/tests/convert.c @@ -2382,6 +2382,8 @@ static void test_getconversionsize(void) static WCHAR strW[] = {'t','e','s','t',0}; static char strTest[] = "test"; VARIANT var; + SAFEARRAY *psa = NULL; + SAFEARRAYBOUND rgsabound[1]; /* same way as CanConvert fails here */ dst_len = 0; @@ -2478,6 +2480,19 @@ static void test_getconversionsize(void) hr = IDataConvert_GetConversionSize(convert, DBTYPE_VARIANT, DBTYPE_BYTES, &src_len, &dst_len, &var); ok(hr == S_OK, "got 0x%08x\n", hr); VariantClear(&var); + + dst_len = 0; + src_len = 20; + rgsabound[0].lLbound = 0; + rgsabound[0].cElements = 1802; + psa = SafeArrayCreate(VT_UI1,1,rgsabound); + + V_VT(&var) = VT_ARRAY|VT_UI1; + V_ARRAY(&var) = psa; + 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 == 1802, "%ld\n", dst_len); + VariantClear(&var); } static void test_converttobytes(void) -- 2.11.4.GIT