Signed-off-by: Alistair Leslie-Hughes leslie_alistair@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 6b97e84e41f..16f67adcdb7 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -599,6 +599,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 );
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=87105
Your paranoid android.
=== debiant2 (32 bit report) ===
msado15: msado15.c:717: Test failed: got 2 msado15.c:728: Test failed: got 3 msado15.c:741: Test failed: got 3 msado15.c:744: Test failed: got 2
=== debiant2 (32 bit French report) ===
msado15: msado15.c:717: Test failed: got 2 msado15.c:728: Test failed: got 3 msado15.c:741: Test failed: got 3 msado15.c:744: Test failed: got 2
=== debiant2 (32 bit Japanese:Japan report) ===
msado15: msado15.c:717: Test failed: got 2 msado15.c:728: Test failed: got 3 msado15.c:741: Test failed: got 3 msado15.c:744: Test failed: got 2
=== debiant2 (32 bit Chinese:China report) ===
msado15: msado15.c:717: Test failed: got 2 msado15.c:728: Test failed: got 3 msado15.c:741: Test failed: got 3 msado15.c:744: Test failed: got 2
=== debiant2 (32 bit WoW report) ===
msado15: msado15.c:717: Test failed: got 2 msado15.c:728: Test failed: got 3 msado15.c:741: Test failed: got 3 msado15.c:744: Test failed: got 2
=== debiant2 (64 bit WoW report) ===
msado15: msado15.c:717: Test failed: got 2 msado15.c:728: Test failed: got 3 msado15.c:741: Test failed: got 3 msado15.c:744: Test failed: got 2