Module: wine Branch: master Commit: 0fe64ce339e2b47ff2c7369a6463b61cbffbe713 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0fe64ce339e2b47ff2c7369a64...
Author: Alistair Leslie-Hughes leslie_alistair@hotmail.com Date: Tue May 21 20:39:09 2013 +1000
oledb32: Implement GetConversionSize DBTYPE_VARIANT -> DBTYPE_BYTES.
---
dlls/oledb32/convert.c | 23 ++++++++++++++++++++++- dlls/oledb32/tests/convert.c | 15 +++++++++++++++ 2 files changed, 37 insertions(+), 1 deletions(-)
diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c index 490685b..9550e52 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: @@ -1363,6 +1364,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 089b28c..a3884dc 100644 --- a/dlls/oledb32/tests/convert.c +++ b/dlls/oledb32/tests/convert.c @@ -2464,6 +2464,21 @@ 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); + VariantClear(&var); }
static void test_converttobytes(void)