Procházet zdrojové kódy

Fixed crash if RAWINPUT is not initialized

We shouldn't be doing any of this work in that case

(cherry picked from commit dfc5e6964eca0a0813768518d08cf1c80136e896)
(cherry picked from commit 9117b2e3000da4d9066dd5f2cfb1c9cbbbee6861)
Sam Lantinga před 2 roky
rodič
revize
11022c23b2
1 změnil soubory, kde provedl 15 přidání a 2 odebrání
  1. 15 2
      src/joystick/windows/SDL_rawinputjoystick.c

+ 15 - 2
src/joystick/windows/SDL_rawinputjoystick.c

@@ -1102,8 +1102,13 @@ static void RAWINPUT_PostUpdate(void)
 
 
 static void RAWINPUT_JoystickDetect(void)
 static void RAWINPUT_JoystickDetect(void)
 {
 {
-    SDL_bool remote_desktop = GetSystemMetrics(SM_REMOTESESSION) ? SDL_TRUE : SDL_FALSE;
+    SDL_bool remote_desktop;
 
 
+    if (!SDL_RAWINPUT_inited) {
+        return;
+    }
+
+    remote_desktop = GetSystemMetrics(SM_REMOTESESSION) ? SDL_TRUE : SDL_FALSE;
     if (remote_desktop != SDL_RAWINPUT_remote_desktop) {
     if (remote_desktop != SDL_RAWINPUT_remote_desktop) {
         SDL_RAWINPUT_remote_desktop = remote_desktop;
         SDL_RAWINPUT_remote_desktop = remote_desktop;
 
 
@@ -2008,8 +2013,12 @@ static void RAWINPUT_JoystickClose(SDL_Joystick *joystick)
 
 
 SDL_bool RAWINPUT_RegisterNotifications(HWND hWnd)
 SDL_bool RAWINPUT_RegisterNotifications(HWND hWnd)
 {
 {
-    RAWINPUTDEVICE rid[SDL_arraysize(subscribed_devices)];
     int i;
     int i;
+    RAWINPUTDEVICE rid[SDL_arraysize(subscribed_devices)];
+
+    if (!SDL_RAWINPUT_inited) {
+        return SDL_TRUE;
+    }
 
 
     for (i = 0; i < SDL_arraysize(subscribed_devices); i++) {
     for (i = 0; i < SDL_arraysize(subscribed_devices); i++) {
         rid[i].usUsagePage = USB_USAGEPAGE_GENERIC_DESKTOP;
         rid[i].usUsagePage = USB_USAGEPAGE_GENERIC_DESKTOP;
@@ -2030,6 +2039,10 @@ void RAWINPUT_UnregisterNotifications()
     int i;
     int i;
     RAWINPUTDEVICE rid[SDL_arraysize(subscribed_devices)];
     RAWINPUTDEVICE rid[SDL_arraysize(subscribed_devices)];
 
 
+    if (!SDL_RAWINPUT_inited) {
+        return SDL_TRUE;
+    }
+
     for (i = 0; i < SDL_arraysize(subscribed_devices); i++) {
     for (i = 0; i < SDL_arraysize(subscribed_devices); i++) {
         rid[i].usUsagePage = USB_USAGEPAGE_GENERIC_DESKTOP;
         rid[i].usUsagePage = USB_USAGEPAGE_GENERIC_DESKTOP;
         rid[i].usUsage = subscribed_devices[i];
         rid[i].usUsage = subscribed_devices[i];