Browse Source

Don't fail joystick initialization if udev isn't available

(cherry picked from commit 5fff9bc1e3089ab4b33faf8b734fab7e2689b536)
Sam Lantinga 1 year ago
parent
commit
d33b28c9fe
1 changed files with 15 additions and 12 deletions
  1. 15 12
      src/joystick/linux/SDL_sysjoystick.c

+ 15 - 12
src/joystick/linux/SDL_sysjoystick.c

@@ -1036,21 +1036,24 @@ static int LINUX_JoystickInit(void)
     }
 
     if (enumeration_method == ENUMERATION_LIBUDEV) {
-        if (SDL_UDEV_Init() < 0) {
-            return SDL_SetError("Could not initialize UDEV");
-        }
+        if (SDL_UDEV_Init() == 0) {
+            /* Set up the udev callback */
+            if (SDL_UDEV_AddCallback(joystick_udev_callback) < 0) {
+                SDL_UDEV_Quit();
+                return SDL_SetError("Could not set up joystick <-> udev callback");
+            }
 
-        /* Set up the udev callback */
-        if (SDL_UDEV_AddCallback(joystick_udev_callback) < 0) {
-            SDL_UDEV_Quit();
-            return SDL_SetError("Could not set up joystick <-> udev callback");
+            /* Force a scan to build the initial device list */
+            SDL_UDEV_Scan();
+        } else {
+            SDL_LogDebug(SDL_LOG_CATEGORY_INPUT,
+                         "udev init failed, disabling udev integration");
+            enumeration_method = ENUMERATION_FALLBACK;
         }
-
-        /* Force a scan to build the initial device list */
-        SDL_UDEV_Scan();
-    } else
+    }
 #endif
-    {
+
+    if (enumeration_method != ENUMERATION_LIBUDEV) {
 #if defined(HAVE_INOTIFY)
         inotify_fd = SDL_inotify_init1();