dinput: Don't trace DIEFFECT members if they don't contain valid data

Lucas Fialho Zawacki lfzawacki at gmail.com
Tue Apr 10 19:57:58 CDT 2012


From: Lucas Fialho Zawacki <lfzawacki at gmail.com>

Fixes bug #21269
---
 dlls/dinput/effect_linuxinput.c |   42 +++++++++++++++++++++++++-------------
 1 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/dlls/dinput/effect_linuxinput.c b/dlls/dinput/effect_linuxinput.c
index ca43b17..0fb183f 100644
--- a/dlls/dinput/effect_linuxinput.c
+++ b/dlls/dinput/effect_linuxinput.c
@@ -173,7 +173,7 @@ static void _dump_DICUSTOMFORCE(LPCDICUSTOMFORCE frc)
     }
 }
 
-static void _dump_DIEFFECT(LPCDIEFFECT eff, REFGUID guid)
+static void _dump_DIEFFECT(LPCDIEFFECT eff, REFGUID guid, DWORD dwFlags)
 {
     unsigned int i;
     DWORD type = _typeFromGUID(guid);
@@ -188,26 +188,38 @@ static void _dump_DIEFFECT(LPCDIEFFECT eff, REFGUID guid)
     _dump_DIEFFECT_flags(eff->dwFlags); 
     TRACE("  - dwDuration: %d\n", eff->dwDuration);
     TRACE("  - dwGain: %d\n", eff->dwGain);
+
     if (eff->dwGain > 10000)
-	WARN("dwGain is out of range (>10,000)\n");
+        WARN("dwGain is out of range (>10,000)\n");
+
     TRACE("  - dwTriggerButton: %d\n", eff->dwTriggerButton);
     TRACE("  - dwTriggerRepeatInterval: %d\n", eff->dwTriggerRepeatInterval);
-    TRACE("  - cAxes: %d\n", eff->cAxes);
-    TRACE("  - rgdwAxes: %p\n", eff->rgdwAxes);
-    if (TRACE_ON(dinput) && eff->rgdwAxes) {
-	TRACE("    ");	
-	for (i = 0; i < eff->cAxes; ++i)
-	    TRACE("%d ", eff->rgdwAxes[i]);
-	TRACE("\n");
-    }
     TRACE("  - rglDirection: %p\n", eff->rglDirection);
-    TRACE("  - lpEnvelope: %p\n", eff->lpEnvelope);
     TRACE("  - cbTypeSpecificParams: %d\n", eff->cbTypeSpecificParams);
     TRACE("  - lpvTypeSpecificParams: %p\n", eff->lpvTypeSpecificParams);
+
+    /* Only trace some members if dwFlags indicates they have data */
+    if (dwFlags & DIEP_AXES) {
+        TRACE("  - cAxes: %d\n", eff->cAxes);
+        TRACE("  - rgdwAxes: %p\n", eff->rgdwAxes);
+
+        if (TRACE_ON(dinput) && eff->rgdwAxes) {
+            TRACE("    ");
+            for (i = 0; i < eff->cAxes; ++i)
+                TRACE("%d ", eff->rgdwAxes[i]);
+            TRACE("\n");
+        }
+    }
+
+    if (dwFlags & DIEP_ENVELOPE) {
+        TRACE("  - lpEnvelope: %p\n", eff->lpEnvelope);
+        if (eff->lpEnvelope != NULL)
+            _dump_DIENVELOPE(eff->lpEnvelope);
+    }
+
     if (eff->dwSize > sizeof(DIEFFECT_DX5))
-    	TRACE("  - dwStartDelay: %d\n", eff->dwStartDelay);
-    if (eff->lpEnvelope != NULL)
-	_dump_DIENVELOPE(eff->lpEnvelope);
+        TRACE("  - dwStartDelay: %d\n", eff->dwStartDelay);
+
     if (type == DIEFT_CONSTANTFORCE) {
 	if (eff->cbTypeSpecificParams != sizeof(DICONSTANTFORCE)) {
 	    WARN("Effect claims to be a constant force but the type-specific params are the wrong size!\n"); 
@@ -539,7 +551,7 @@ static HRESULT WINAPI LinuxInputEffectImpl_SetParameters(
 
     TRACE("(this=%p,%p,%d)\n", This, peff, dwFlags);
 
-    _dump_DIEFFECT(peff, &This->guid);
+    _dump_DIEFFECT(peff, &This->guid, dwFlags);
 
     if ((dwFlags & ~DIEP_NORESTART & ~DIEP_NODOWNLOAD & ~DIEP_START) == 0) {
 	/* set everything */
-- 
1.7.0.4




More information about the wine-patches mailing list