Zebediah Figura : xinput: Avoid calling XInputGetStateEx() in XInputGetState().
Alexandre Julliard
julliard at winehq.org
Mon Nov 19 15:59:37 CST 2018
Module: wine
Branch: master
Commit: b72da1fdef65ced62c8d7bf6813cc11ca364528c
URL: https://source.winehq.org/git/wine.git/?a=commit;h=b72da1fdef65ced62c8d7bf6813cc11ca364528c
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Sun Nov 18 13:15:40 2018 -0600
xinput: Avoid calling XInputGetStateEx() in XInputGetState().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46142
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Aric Stewart <aric at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/xinput1_3/xinput_main.c | 32 ++++++++++++++++++++------------
1 file changed, 20 insertions(+), 12 deletions(-)
diff --git a/dlls/xinput1_3/xinput_main.c b/dlls/xinput1_3/xinput_main.c
index 56bb36a..f6e3e15 100644
--- a/dlls/xinput1_3/xinput_main.c
+++ b/dlls/xinput1_3/xinput_main.c
@@ -85,13 +85,31 @@ DWORD WINAPI XInputSetState(DWORD index, XINPUT_VIBRATION* vibration)
return HID_set_state(&controllers[index], vibration);
}
+/* Some versions of SteamOverlayRenderer hot-patch XInputGetStateEx() and call
+ * XInputGetState() in the hook, so we need a wrapper. */
+static DWORD xinput_get_state(DWORD index, XINPUT_STATE *state)
+{
+ HID_find_gamepads(controllers);
+
+ if (index >= XUSER_MAX_COUNT)
+ return ERROR_BAD_ARGUMENTS;
+ if (!controllers[index].connected)
+ return ERROR_DEVICE_NOT_CONNECTED;
+
+ HID_update_state(&controllers[index]);
+ memcpy(state, &controllers[index].state, sizeof(XINPUT_STATE));
+
+ return ERROR_SUCCESS;
+}
+
+
DWORD WINAPI DECLSPEC_HOTPATCH XInputGetState(DWORD index, XINPUT_STATE* state)
{
DWORD ret;
TRACE("(index %u, state %p)!\n", index, state);
- ret = XInputGetStateEx(index, state);
+ ret = xinput_get_state(index, state);
if (ret != ERROR_SUCCESS)
return ret;
@@ -105,17 +123,7 @@ DWORD WINAPI DECLSPEC_HOTPATCH XInputGetStateEx(DWORD index, XINPUT_STATE* state
{
TRACE("(index %u, state %p)!\n", index, state);
- HID_find_gamepads(controllers);
-
- if (index >= XUSER_MAX_COUNT)
- return ERROR_BAD_ARGUMENTS;
- if (!controllers[index].connected)
- return ERROR_DEVICE_NOT_CONNECTED;
-
- HID_update_state(&controllers[index]);
- memcpy(state, &controllers[index].state, sizeof(XINPUT_STATE));
-
- return ERROR_SUCCESS;
+ return xinput_get_state(index, state);
}
DWORD WINAPI XInputGetKeystroke(DWORD index, DWORD reserved, PXINPUT_KEYSTROKE keystroke)
More information about the wine-cvs
mailing list