[PATCH 1/2] oledb32: Implement support for converting to DBTYPE_I1.

Owen Rudge <[email protected]> Wed, 29 May 2019 23:41:36 +0100
Newsgroups gmane.comp.emulators.wine.patches
Organization CodeWeavers
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------29A67CE19F0E3CF62A230910
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

Signed-off-by: Owen Rudge <[email protected]>
---
  dlls/oledb32/convert.c | 31 +++++++++++++++++++++++++++++++
  1 file changed, 31 insertions(+)



--------------29A67CE19F0E3CF62A230910
Content-Type: text/x-patch;
 name="0001-oledb32-Implement-support-for-converting-to-DBTYPE_I.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename*0="0001-oledb32-Implement-support-for-converting-to-DBTYPE_I.pa";
 filename*1="tch"

diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
index f18c756f4c..566171acc9 100644
--- a/dlls/oledb32/convert.c
+++ b/dlls/oledb32/convert.c
@@ -249,6 +249,37 @@ static HRESULT WINAPI convert_DataConvert(IDataConvert* iface,
 
     switch(dst_type)
     {
+    case DBTYPE_I1:
+    {
+        signed char *d = dst;
+        switch(src_type)
+        {
+        case DBTYPE_EMPTY:       *d = 0; hr = S_OK;                              break;
+        case DBTYPE_I1:          *d = *(signed char*)src; hr = S_OK;             break;
+        case DBTYPE_I2:          hr = VarI1FromI2(*(signed short*)src, d); hr = S_OK; break;
+        case DBTYPE_I4:          hr = VarI1FromI4(*(signed int*)src, d);         break;
+        case DBTYPE_R4:          hr = VarI1FromR4(*(FLOAT*)src, d);              break;
+        case DBTYPE_R8:          hr = VarI1FromR8(*(double*)src, d);             break;
+        case DBTYPE_CY:          hr = VarI1FromCy(*(CY*)src, d);                 break;
+        case DBTYPE_DATE:        hr = VarI1FromDate(*(DATE*)src, d);             break;
+        case DBTYPE_BSTR:        hr = VarI1FromStr(*(WCHAR**)src, LOCALE_USER_DEFAULT, 0, d); break;
+        case DBTYPE_BOOL:        hr = VarI1FromBool(*(VARIANT_BOOL*)src, d);     break;
+        case DBTYPE_DECIMAL:     hr = VarI1FromDec((DECIMAL*)src, d);            break;
+        case DBTYPE_UI1:         hr = VarI1FromUI1(*(BYTE*)src, d);              break;
+        case DBTYPE_UI2:         hr = VarI1FromUI2(*(WORD*)src, d);              break;
+        case DBTYPE_UI4:         hr = VarI1FromUI4(*(DWORD*)src, d);             break;
+        case DBTYPE_I8:          hr = VarI1FromI8(*(LONGLONG*)src, d);           break;
+        case DBTYPE_UI8:         hr = VarI1FromUI8(*(ULONGLONG*)src, d);         break;
+        case DBTYPE_VARIANT:
+            VariantInit(&tmp);
+            if ((hr = VariantChangeType(&tmp, (VARIANT*)src, 0, VT_I1)) == S_OK)
+                *d = V_I1(&tmp);
+            break;
+        default: FIXME("Unimplemented conversion %04x -> I1\n", src_type); return E_NOTIMPL;
+        }
+        break;
+    }
+
     case DBTYPE_I2:
     {
         signed short *d = dst;


--------------29A67CE19F0E3CF62A230910
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

Cg==

--------------29A67CE19F0E3CF62A230910--