Browse Source

Fixed crash trying to open HIDAPI controller as a haptics device on Windows

Sam Lantinga 7 years ago
parent
commit
f1bc1c1274
1 changed files with 11 additions and 4 deletions
  1. 11 4
      Android.mk

+ 11 - 4
Android.mk

@@ -157,7 +157,7 @@ SDL_SYS_HapticMouse(void)
 
     /* Grab the first mouse haptic device we find. */
     for (item = SDL_hapticlist; item != NULL; item = item->next) {
-        if (item->capabilities.dwDevType == DI8DEVCLASS_POINTER ) {
+        if (item->capabilities.dwDevType == DI8DEVCLASS_POINTER) {
             return index;
         }
         ++index;
@@ -173,14 +173,16 @@ SDL_SYS_HapticMouse(void)
 int
 SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick)
 {
-    const struct joystick_hwdata *hwdata = joystick->hwdata;
+    if (joystick->driver != &SDL_WINDOWS_JoystickDriver) {
+        return 0;
+    }
 #if SDL_HAPTIC_XINPUT
-    if (hwdata->bXInputHaptic) {
+    if (joystick->hwdata->bXInputHaptic) {
         return 1;
     }
 #endif
 #if SDL_HAPTIC_DINPUT
-    if (hwdata->Capabilities.dwFlags & DIDC_FORCEFEEDBACK) {
+    if (joystick->hwdata->Capabilities.dwFlags & DIDC_FORCEFEEDBACK) {
         return 1;
     }
 #endif
@@ -193,6 +195,9 @@ SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick)
 int
 SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick)
 {
+    if (joystick->driver != &SDL_WINDOWS_JoystickDriver) {
+        return 0;
+    }
     if (joystick->hwdata->bXInputHaptic != haptic->hwdata->bXInputHaptic) {
         return 0;  /* one is XInput, one is not; not the same device. */
     } else if (joystick->hwdata->bXInputHaptic) {
@@ -208,6 +213,8 @@ SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick)
 int
 SDL_SYS_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick)
 {
+    SDL_assert(joystick->driver == &SDL_WINDOWS_JoystickDriver);
+
     if (joystick->hwdata->bXInputDevice) {
         return SDL_XINPUT_HapticOpenFromJoystick(haptic, joystick);
     } else {