Commit 37f4eb53797a7050cde6a1616dd0b4ee79b5713e

Ryan C. Gordon 2015-05-26T12:47:03

Darwin haptic: Fixed a static analysis warning if axes==0.

diff --git a/src/haptic/darwin/SDL_syshaptic.c b/src/haptic/darwin/SDL_syshaptic.c
index ff31cd4..4482682 100644
--- a/src/haptic/darwin/SDL_syshaptic.c
+++ b/src/haptic/darwin/SDL_syshaptic.c
@@ -771,18 +771,18 @@ static int
 SDL_SYS_ToFFEFFECT(SDL_Haptic * haptic, FFEFFECT * dest, SDL_HapticEffect * src)
 {
     int i;
-    FFCONSTANTFORCE *constant;
-    FFPERIODIC *periodic;
-    FFCONDITION *condition;     /* Actually an array of conditions - one per axis. */
-    FFRAMPFORCE *ramp;
-    FFCUSTOMFORCE *custom;
-    FFENVELOPE *envelope;
-    SDL_HapticConstant *hap_constant;
-    SDL_HapticPeriodic *hap_periodic;
-    SDL_HapticCondition *hap_condition;
-    SDL_HapticRamp *hap_ramp;
-    SDL_HapticCustom *hap_custom;
-    DWORD *axes;
+    FFCONSTANTFORCE *constant = NULL;
+    FFPERIODIC *periodic = NULL;
+    FFCONDITION *condition = NULL;     /* Actually an array of conditions - one per axis. */
+    FFRAMPFORCE *ramp = NULL;
+    FFCUSTOMFORCE *custom = NULL;
+    FFENVELOPE *envelope = NULL;
+    SDL_HapticConstant *hap_constant = NULL;
+    SDL_HapticPeriodic *hap_periodic = NULL;
+    SDL_HapticCondition *hap_condition = NULL;
+    SDL_HapticRamp *hap_ramp = NULL;
+    SDL_HapticCustom *hap_custom = NULL;
+    DWORD *axes = NULL;
 
     /* Set global stuff. */
     SDL_memset(dest, 0, sizeof(FFEFFECT));
@@ -911,26 +911,29 @@ SDL_SYS_ToFFEFFECT(SDL_Haptic * haptic, FFEFFECT * dest, SDL_HapticEffect * src)
     case SDL_HAPTIC_DAMPER:
     case SDL_HAPTIC_INERTIA:
     case SDL_HAPTIC_FRICTION:
-        hap_condition = &src->condition;
-        condition = SDL_malloc(sizeof(FFCONDITION) * dest->cAxes);
-        if (condition == NULL) {
-            return SDL_OutOfMemory();
+        if (dest->cAxes > 0) {
+            hap_condition = &src->condition;
+            condition = SDL_malloc(sizeof(FFCONDITION) * dest->cAxes);
+            if (condition == NULL) {
+                return SDL_OutOfMemory();
+            }
+            SDL_memset(condition, 0, sizeof(FFCONDITION));
+
+            /* Specifics */
+            for (i = 0; i < dest->cAxes; i++) {
+                condition[i].lOffset = CONVERT(hap_condition->center[i]);
+                condition[i].lPositiveCoefficient =
+                    CONVERT(hap_condition->right_coeff[i]);
+                condition[i].lNegativeCoefficient =
+                    CONVERT(hap_condition->left_coeff[i]);
+                condition[i].dwPositiveSaturation =
+                    CCONVERT(hap_condition->right_sat[i] / 2);
+                condition[i].dwNegativeSaturation =
+                    CCONVERT(hap_condition->left_sat[i] / 2);
+                condition[i].lDeadBand = CCONVERT(hap_condition->deadband[i] / 2);
+            }
         }
-        SDL_memset(condition, 0, sizeof(FFCONDITION));
 
-        /* Specifics */
-        for (i = 0; i < dest->cAxes; i++) {
-            condition[i].lOffset = CONVERT(hap_condition->center[i]);
-            condition[i].lPositiveCoefficient =
-                CONVERT(hap_condition->right_coeff[i]);
-            condition[i].lNegativeCoefficient =
-                CONVERT(hap_condition->left_coeff[i]);
-            condition[i].dwPositiveSaturation =
-                CCONVERT(hap_condition->right_sat[i] / 2);
-            condition[i].dwNegativeSaturation =
-                CCONVERT(hap_condition->left_sat[i] / 2);
-            condition[i].lDeadBand = CCONVERT(hap_condition->deadband[i] / 2);
-        }
         dest->cbTypeSpecificParams = sizeof(FFCONDITION) * dest->cAxes;
         dest->lpvTypeSpecificParams = condition;