[PATCH v2 2/3] msado15: Support VT_I4/I2 for Fields Item property

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Wed Mar 17 22:16:12 CDT 2021


Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
 dlls/msado15/recordset.c     | 16 ++++++++++++++++
 dlls/msado15/tests/msado15.c | 17 +++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c
index 2e684542828..b21385bd860 100644
--- a/dlls/msado15/recordset.c
+++ b/dlls/msado15/recordset.c
@@ -593,6 +593,22 @@ static HRESULT map_index( struct fields *fields, VARIANT *index, ULONG *ret )
 {
     ULONG i;
 
+    if (V_VT( index ) == VT_I4 || V_VT( index ) == VT_I2)
+    {
+        if (V_VT( index ) == VT_I4)
+            i = V_I4 ( index );
+        else
+            i = V_I2 ( index );
+
+        if (i < fields->count)
+        {
+            *ret = i;
+            return S_OK;
+        }
+
+        return MAKE_ADO_HRESULT(adErrItemNotFound);
+    }
+
     if (V_VT( index ) != VT_BSTR)
     {
         FIXME( "variant type %u not supported\n", V_VT( index ) );
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index bc9b4a24761..2d226ac027f 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -169,6 +169,23 @@ static void test_Recordset(void)
     hr = Fields__Append( fields, name, adInteger, 4, adFldUnspecified );
     ok( hr == S_OK, "got %08x\n", hr );
 
+    V_VT( &index ) = VT_I4;
+    V_I4( &index ) = 1000;
+    hr = Fields_get_Item( fields, index, &field );
+    ok( hr == MAKE_ADO_HRESULT(adErrItemNotFound), "got %08x\n", hr );
+
+    V_VT( &index ) = VT_I4;
+    V_I4( &index ) = 0;
+    hr = Fields_get_Item( fields, index, &field );
+    ok( hr == S_OK, "got %08x\n", hr );
+    Field_Release(field);
+
+    V_VT( &index ) = VT_I2;
+    V_I4( &index ) = 0;
+    hr = Fields_get_Item( fields, index, &field );
+    ok( hr == S_OK, "got %08x\n", hr );
+    Field_Release(field);
+
     V_VT( &index ) = VT_BSTR;
     V_BSTR( &index ) = name;
     hr = Fields_get_Item( fields, index, &field );
-- 
2.30.1




More information about the wine-devel mailing list