Bruno Jesus : dinput: Restore effect ID on error due to kernel < 3.14 bug.
Alexandre Julliard
julliard at winehq.org
Tue Aug 23 11:28:44 CDT 2016
Module: wine
Branch: master
Commit: 4d816bdbcd31ea6799e199c15804110b70309570
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4d816bdbcd31ea6799e199c15804110b70309570
Author: Bruno Jesus <00cpxxx at gmail.com>
Date: Mon Aug 22 22:06:58 2016 -0300
dinput: Restore effect ID on error due to kernel < 3.14 bug.
Based on ideas by Elias Vanderstuyft
Signed-off-by: Bruno Jesus <00cpxxx at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/dinput/effect_linuxinput.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/dinput/effect_linuxinput.c b/dlls/dinput/effect_linuxinput.c
index 642dfc0..bbcadf5 100644
--- a/dlls/dinput/effect_linuxinput.c
+++ b/dlls/dinput/effect_linuxinput.c
@@ -173,14 +173,19 @@ static HRESULT WINAPI LinuxInputEffectImpl_Download(
LPDIRECTINPUTEFFECT iface)
{
LinuxInputEffectImpl *This = impl_from_IDirectInputEffect(iface);
- int ret;
+ int ret, old_effect_id;
TRACE("(this=%p)\n", This);
ff_dump_effect(&This->effect);
+ old_effect_id = This->effect.id;
if (ioctl(*(This->fd), EVIOCSFF, &This->effect) != -1)
return DI_OK;
+ /* Linux kernel < 3.14 has a bug that incorrectly assigns an effect ID even
+ * on error, restore it here if that is the case. */
+ This->effect.id = old_effect_id;
+
switch (errno)
{
case EINVAL:
More information about the wine-cvs
mailing list