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