Module: wine Branch: master Commit: 4d816bdbcd31ea6799e199c15804110b70309570 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4d816bdbcd31ea6799e199c158...
Author: Bruno Jesus 00cpxxx@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@gmail.com Signed-off-by: Alexandre Julliard julliard@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: