Brendan Shanks : dinput: Fix IDirectInputEffect::SetParameters() when called with flags=0.

Alexandre Julliard julliard at winehq.org
Fri Apr 24 15:11:39 CDT 2020


Module: wine
Branch: master
Commit: 1832dc3df32f0133e695457401f6961d8d40532d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=1832dc3df32f0133e695457401f6961d8d40532d

Author: Brendan Shanks <bshanks at codeweavers.com>
Date:   Thu Apr 23 22:40:17 2020 -0700

dinput: Fix IDirectInputEffect::SetParameters() when called with flags=0.

Signed-off-by: Brendan Shanks <bshanks at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dinput/effect_linuxinput.c   | 10 +++-------
 dlls/dinput/joystick_linuxinput.c |  5 ++++-
 dlls/dinput/tests/joystick.c      |  2 --
 3 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/dlls/dinput/effect_linuxinput.c b/dlls/dinput/effect_linuxinput.c
index ef21ecaa30..ec4b00b873 100644
--- a/dlls/dinput/effect_linuxinput.c
+++ b/dlls/dinput/effect_linuxinput.c
@@ -489,15 +489,11 @@ static HRESULT WINAPI LinuxInputEffectImpl_SetParameters(
 
     TRACE("(this=%p,%p,%d)\n", This, peff, dwFlags);
 
-    if ((dwFlags & ~DIEP_NORESTART & ~DIEP_NODOWNLOAD & ~DIEP_START) == 0) {
-	/* set everything */
-	dwFlags = DIEP_AXES | DIEP_DIRECTION | DIEP_DURATION | DIEP_ENVELOPE |
-	    DIEP_GAIN | DIEP_SAMPLEPERIOD | DIEP_STARTDELAY | DIEP_TRIGGERBUTTON |
-	    DIEP_TRIGGERREPEATINTERVAL | DIEP_TYPESPECIFICPARAMS;
-    }
-
     dump_DIEFFECT(peff, &This->guid, dwFlags);
 
+    if (!dwFlags)
+        return DI_NOEFFECT;
+
     if (dwFlags & DIEP_AXES) {
 	if (!(peff->rgdwAxes))
 	    return DIERR_INVALIDPARAM;
diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c
index b5418d805c..b61913119c 100644
--- a/dlls/dinput/joystick_linuxinput.c
+++ b/dlls/dinput/joystick_linuxinput.c
@@ -1097,7 +1097,10 @@ static HRESULT WINAPI JoystickWImpl_CreateEffect(LPDIRECTINPUTDEVICE8W iface, RE
 
     if (lpeff != NULL)
     {
-        retval = IDirectInputEffect_SetParameters(new_effect->ref, lpeff, 0);
+        retval = IDirectInputEffect_SetParameters(new_effect->ref, lpeff,
+            DIEP_AXES | DIEP_DIRECTION | DIEP_DURATION | DIEP_ENVELOPE |
+            DIEP_GAIN | DIEP_SAMPLEPERIOD | DIEP_STARTDELAY | DIEP_TRIGGERBUTTON |
+            DIEP_TRIGGERREPEATINTERVAL | DIEP_TYPESPECIFICPARAMS);
 
         if (retval != DI_OK && retval != DI_DOWNLOADSKIPPED)
         {
diff --git a/dlls/dinput/tests/joystick.c b/dlls/dinput/tests/joystick.c
index 810707c02a..f082c612b0 100644
--- a/dlls/dinput/tests/joystick.c
+++ b/dlls/dinput/tests/joystick.c
@@ -663,11 +663,9 @@ static BOOL CALLBACK EnumJoysticks(const DIDEVICEINSTANCEA *lpddi, void *pvRef)
             memset(&effect_empty, 0, sizeof(effect_empty));
             effect_empty.dwSize = sizeof(effect_empty);
             hr = IDirectInputEffect_SetParameters(effect, &effect_empty, 0);
-            todo_wine
             ok(hr==DI_NOEFFECT,"IDirectInputEffect_SetParameters failed: %08x\n", hr);
             /* Start effect with SetParameters and a zeroed-out DIEFFECT. */
             hr = IDirectInputEffect_SetParameters(effect, &effect_empty, DIEP_START);
-            todo_wine
             ok(hr==DI_OK,"IDirectInputEffect_SetParameters failed: %08x\n", hr);
             hr = IDirectInputEffect_GetEffectStatus(effect, &effect_status);
             ok(hr==DI_OK,"IDirectInputEffect_GetEffectStatus() failed: %08x\n", hr);




More information about the wine-cvs mailing list