Corrected Linux joystick things, fixes assertion failure from testjoystick.
--- 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 */