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>
This commit is contained in:
Bruno Jesus 2016-08-22 22:06:58 -03:00 committed by Alexandre Julliard
parent 327897992b
commit 4d816bdbcd
1 changed files with 6 additions and 1 deletions

View File

@ -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: