From 157528eb0f826f1008488097e361ffc2872d640f Mon Sep 17 00:00:00 2001 From: Vitaliy Margolen Date: Thu, 13 Oct 2011 21:22:26 -0600 Subject: [PATCH] dinput: GetDeviceData always succeeds regardless if buffering is enabled or device is acquired. --- dlls/dinput/device.c | 4 +--- dlls/dinput/tests/device.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c index a4052ea4e24..83740c57057 100644 --- a/dlls/dinput/device.c +++ b/dlls/dinput/device.c @@ -1286,10 +1286,8 @@ HRESULT WINAPI IDirectInputDevice2WImpl_GetDeviceData(LPDIRECTINPUTDEVICE8W ifac TRACE("(%p) %p -> %p(%d) x%d, 0x%08x\n", This, dod, entries, entries ? *entries : 0, dodsize, flags); - if (!This->acquired) - return DIERR_NOTACQUIRED; if (!This->queue_len) - return DIERR_NOTBUFFERED; + return DI_OK; if (dodsize < sizeof(DIDEVICEOBJECTDATA_DX3)) return DIERR_INVALIDPARAM; diff --git a/dlls/dinput/tests/device.c b/dlls/dinput/tests/device.c index e79c56429f6..2e4e4f8da86 100644 --- a/dlls/dinput/tests/device.c +++ b/dlls/dinput/tests/device.c @@ -103,6 +103,9 @@ static void test_object_info(LPDIRECTINPUTDEVICE device, HWND hwnd) hr = IDirectInputDevice_GetObjectInfo(device, &obj_info, 16, DIPH_BYOFFSET); if (SUCCEEDED(hr)) { + DWORD cnt; + DIDEVICEOBJECTDATA buffer[5]; + /* No device supports per axis relative/absolute mode */ memset(&dp, 0, sizeof(dp)); dp.diph.dwSize = sizeof(DIPROPDWORD); @@ -119,9 +122,28 @@ static void test_object_info(LPDIRECTINPUTDEVICE device, HWND hwnd) hr = IDirectInputDevice_SetProperty(device, DIPROP_AXISMODE, &dp.diph); ok(hr == DI_OK, "SetProperty() failed: %08x\n", hr); + dp.dwData = 0; + hr = IDirectInputDevice_SetProperty(device, DIPROP_BUFFERSIZE, (LPCDIPROPHEADER)&dp.diph); + ok(hr == DI_OK, "SetProperty() failed: %08x\n", hr); + + cnt = 5; + hr = IDirectInputDevice_GetDeviceData(device, sizeof(buffer), buffer, &cnt, 0); + ok(hr == DI_OK && cnt == 5, "GetDeviceData() failed: %08x cnt: %d\n", hr, cnt); + + dp.dwData = 20; + hr = IDirectInputDevice_SetProperty(device, DIPROP_BUFFERSIZE, (LPCDIPROPHEADER)&dp.diph); + ok(hr == DI_OK, "SetProperty() failed: %08x\n", hr); + + cnt = 1; + hr = IDirectInputDevice_GetDeviceData(device, sizeof(buffer), buffer, &cnt, 0); + ok(hr == DI_OK, "GetDeviceData() failed: %08x\n", hr); + /* Cannot change mode while acquired */ hr = IDirectInputDevice_Acquire(device); ok(hr == DI_OK, "Acquire() failed: %08x\n", hr); + cnt = 1; + hr = IDirectInputDevice_GetDeviceData(device, sizeof(buffer), buffer, &cnt, 0); + ok(hr == DI_OK, "GetDeviceData() failed: %08x\n", hr); hr = IDirectInputDevice_SetProperty(device, DIPROP_AXISMODE, &dp.diph); ok(hr == DIERR_ACQUIRED, "SetProperty() returned: %08x\n", hr); hr = IDirectInputDevice_Unacquire(device); -- 2.11.4.GIT