From 012291752c4d3ae9be0271b49c4cc0eafe6059be Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 13 Dec 2012 22:26:30 -0500 Subject: [PATCH] Corrected Linux joystick things, fixes assertion failure from testjoystick. --- src/joystick/linux/SDL_sysjoystick.c | 9 ++++++--- src/joystick/linux/SDL_sysjoystick_c.h | 5 +++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/joystick/linux/SDL_sysjoystick.c b/src/joystick/linux/SDL_sysjoystick.c index 992eff671..2d2d8545d 100644 --- a/src/joystick/linux/SDL_sysjoystick.c +++ b/src/joystick/linux/SDL_sysjoystick.c @@ -319,7 +319,7 @@ MaybeRemoveDevice(const char *path) 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 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) 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 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) /* 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 @@ SDL_SYS_JoystickClose(SDL_Joystick * joystick) { 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); diff --git a/src/joystick/linux/SDL_sysjoystick_c.h b/src/joystick/linux/SDL_sysjoystick_c.h index 083cd4fe7..cf34c851f 100644 --- a/src/joystick/linux/SDL_sysjoystick_c.h +++ b/src/joystick/linux/SDL_sysjoystick_c.h @@ -21,12 +21,13 @@ #include +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 */