From aa43d24cd8ef7cfc89193a3c896a37caf3dc9051 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Tue, 21 Sep 2021 09:52:48 +0200 Subject: [PATCH] dinput: Return correct errors from HID joystick IDirectInputDevice8_GetDeviceState. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: RĂ©mi Bernon Signed-off-by: Alexandre Julliard --- dlls/dinput/joystick_hid.c | 9 +++++++-- dlls/dinput8/tests/hid.c | 2 -- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/dlls/dinput/joystick_hid.c b/dlls/dinput/joystick_hid.c index 35a85f0f3d3..45e75588aed 100644 --- a/dlls/dinput/joystick_hid.c +++ b/dlls/dinput/joystick_hid.c @@ -638,12 +638,17 @@ static HRESULT WINAPI hid_joystick_Unacquire( IDirectInputDevice8W *iface ) static HRESULT WINAPI hid_joystick_GetDeviceState( IDirectInputDevice8W *iface, DWORD len, void *ptr ) { struct hid_joystick *impl = impl_from_IDirectInputDevice8W( iface ); + HRESULT hr = DI_OK; if (!ptr) return DIERR_INVALIDPARAM; + if (len != impl->base.data_format.user_df->dwDataSize) return DIERR_INVALIDPARAM; - fill_DataFormat( ptr, len, &impl->state, &impl->base.data_format ); + EnterCriticalSection( &impl->base.crit ); + if (!impl->base.acquired) hr = DIERR_NOTACQUIRED; + else fill_DataFormat( ptr, len, &impl->state, &impl->base.data_format ); + LeaveCriticalSection( &impl->base.crit ); - return DI_OK; + return hr; } static BOOL get_object_info( struct hid_joystick *impl, struct hid_caps *caps, diff --git a/dlls/dinput8/tests/hid.c b/dlls/dinput8/tests/hid.c index cf4762ec86b..f24acfbf70d 100644 --- a/dlls/dinput8/tests/hid.c +++ b/dlls/dinput8/tests/hid.c @@ -4093,7 +4093,6 @@ static void test_simple_joystick(void) ok( hr == DI_OK, "IDirectInputDevice8_SetCooperativeLevel returned: %#x\n", hr ); hr = IDirectInputDevice8_GetDeviceState( device, sizeof(DIJOYSTATE2), &state ); - todo_wine ok( hr == DIERR_NOTACQUIRED, "IDirectInputDevice8_GetDeviceState returned: %#x\n", hr ); hr = IDirectInputDevice8_Poll( device ); @@ -4107,7 +4106,6 @@ static void test_simple_joystick(void) ok( hr == DI_NOEFFECT, "IDirectInputDevice8_Poll returned: %#x\n", hr ); hr = IDirectInputDevice8_GetDeviceState( device, sizeof(DIJOYSTATE2) + 1, &state ); - todo_wine ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_GetDeviceState returned: %#x\n", hr ); for (i = 0; i < ARRAY_SIZE(injected_input); ++i)