Corrected Linux joystick things, fixes assertion failure from testjoystick.
authorRyan C. Gordon <icculus@icculus.org>
Thu, 13 Dec 2012 22:26:30 -0500
changeset 6752 8de11011eb1f
parent 6751 a1f87fd7ed72
child 6753 332c36fd0fd7
Corrected Linux joystick things, fixes assertion failure from testjoystick.
src/joystick/linux/SDL_sysjoystick.c
src/joystick/linux/SDL_sysjoystick_c.h
--- a/src/joystick/linux/SDL_sysjoystick.c	Thu Dec 13 22:18:32 2012 -0500
+++ b/src/joystick/linux/SDL_sysjoystick.c	Thu Dec 13 22:26:30 2012 -0500
@@ -319,7 +319,7 @@
         if (SDL_strcmp(path, item->path) == 0) {
             const int retval = item->device_instance;
             if (item->hwdata) {
-                item->hwdata->removed = SDL_TRUE;
+                item->hwdata->item = NULL;
             }
             if (prev != NULL) {
                 prev->next = item->next;
@@ -731,7 +731,7 @@
         return (-1);
     }
     SDL_memset(joystick->hwdata, 0, sizeof(*joystick->hwdata));
-    joystick->hwdata->removed = SDL_FALSE;
+    joystick->hwdata->item = item;
     joystick->hwdata->guid = item->guid;
     joystick->hwdata->fd = fd;
     joystick->hwdata->fname = SDL_strdup(item->path);
@@ -758,7 +758,7 @@
 /* Function to determine is this joystick is attached to the system right now */
 SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick)
 {
-    return !joystick->closed && !joystick->hwdata->removed;
+    return !joystick->closed && (joystick->hwdata->item != NULL);
 }
 
 static __inline__ void
@@ -913,6 +913,9 @@
 {
     if (joystick->hwdata) {
         close(joystick->hwdata->fd);
+        if (joystick->hwdata->item) {
+            joystick->hwdata->item->hwdata = NULL;
+        }
         SDL_free(joystick->hwdata->hats);
         SDL_free(joystick->hwdata->balls);
         SDL_free(joystick->hwdata->fname);
--- a/src/joystick/linux/SDL_sysjoystick_c.h	Thu Dec 13 22:18:32 2012 -0500
+++ b/src/joystick/linux/SDL_sysjoystick_c.h	Thu Dec 13 22:26:30 2012 -0500
@@ -21,12 +21,13 @@
 
 #include <linux/input.h>
 
+struct SDL_joylist_item;
+
 /* The private structure used to keep track of a joystick */
 struct joystick_hwdata
 {
     int fd;
-    SDL_bool removed;
-
+    struct SDL_joylist_item *item;
     SDL_JoystickGUID guid;
     char *fname;                /* Used in haptic subsystem */