xserver-xorg-input-joystick: Changes to 'upstream-unstable'
configure.ac | 2 +-
src/backend_bsd.c | 33 ++++++++++++++-------------------
src/backend_evdev.c | 40 +++++++++++++++++-----------------------
src/backend_joystick.c | 44 +++++++++++---------------------------------
src/jstk.c | 47 ++++++++++++++++++++++++++++++++++++++++-------
src/jstk.h | 6 ++++++
src/jstk_key.c | 3 ++-
7 files changed, 91 insertions(+), 84 deletions(-)
New commits:
commit de424865ece983d8da62b7f7e3d013eabac0b8b5
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Fri Nov 18 08:58:35 2016 +1000
joystick 1.6.3
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/configure.ac b/configure.ac
index b5834a5..5c930ad 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
AC_INIT([xf86-input-joystick],
- [1.6.2],
+ [1.6.3],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
[xf86-input-joystick])
AC_CONFIG_SRCDIR([Makefile.am])
commit 60d0e9c451b3f259d524b0ddcc5c1f21a4f82293
Author: Matthieu Herrb <matthieu@herrb.eu>
Date: Sun Jul 31 12:54:14 2016 +0200
use xf86{Add,Remove}EnabledDevice()
Signed-off-by: Matthieu Herrb <matthieu@herrb.eu>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/src/jstk.c b/src/jstk.c
index 6cf0ef9..158d77a 100644
--- a/src/jstk.c
+++ b/src/jstk.c
@@ -147,7 +147,7 @@ jstkReadProc(InputInfoPtr pInfo)
xf86Msg(X_WARNING, "JOYSTICK: Read failed. Deactivating device.\n");
if (pInfo->fd >= 0)
- RemoveEnabledDevice(pInfo->fd);
+ xf86RemoveEnabledDevice(pInfo);
return;
}
@@ -414,7 +414,7 @@ jstkDeviceControlProc(DeviceIntPtr pJstk,
if (jstkOpenDevice(priv, FALSE) != -1) {
pJstk->public.on = TRUE;
pInfo->fd = priv->fd;
- AddEnabledDevice(pInfo->fd);
+ xf86AddEnabledDevice(pInfo);
} else return !Success;
break;
@@ -437,7 +437,7 @@ jstkDeviceControlProc(DeviceIntPtr pJstk,
}
if (pInfo->fd >= 0)
- RemoveEnabledDevice(pInfo->fd);
+ xf86RemoveEnabledDevice(pInfo);
if (!(pInfo->flags & XI86_SERVER_FD))
pInfo->fd = -1;
if (priv->close_proc)
@@ -772,4 +772,3 @@ _X_EXPORT XF86ModuleData joystickModuleData = {
};
/* vim: set filetype=c.doxygen ts=4 et: */
-
commit baf8bd4441d5dc6cdd687e066bf13cc1c3df1a41
Author: Hans de Goede <hdegoede@redhat.com>
Date: Thu Mar 13 14:49:53 2014 +0100
Add support for server managed fds
Keep things simple by handling server managed fds in the common parts
of the open and close paths.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/src/backend_bsd.c b/src/backend_bsd.c
index f3f501e..d8c6bac 100644
--- a/src/backend_bsd.c
+++ b/src/backend_bsd.c
@@ -91,10 +91,12 @@ jstkOpenDevice_bsd(JoystickDevPtr joystick, Bool probe)
report_desc_t rd;
struct jstk_bsd_hid_data *bsddata;
- if ((joystick->fd = open(joystick->device, O_RDWR | O_NDELAY, 0)) < 0) {
- xf86Msg(X_ERROR, "Cannot open joystick '%s' (%s)\n", joystick->device,
- strerror(errno));
- return -1;
+ if (joystick->fd == -1) {
+ if ((joystick->fd = open(joystick->device, O_RDWR | O_NDELAY, 0)) < 0) {
+ xf86Msg(X_ERROR, "Cannot open joystick '%s' (%s)\n",
+ joystick->device, strerror(errno));
+ return -1;
+ }
}
if ((rd = hid_get_report_desc(joystick->fd)) == 0) {
diff --git a/src/backend_evdev.c b/src/backend_evdev.c
index 2a7b0e2..cae4b28 100644
--- a/src/backend_evdev.c
+++ b/src/backend_evdev.c
@@ -90,10 +90,12 @@ jstkOpenDevice_evdev(JoystickDevPtr joystick, Bool probe)
unsigned long key_bits[NBITS(KEY_MAX)];
int axes, buttons, j;
- if ((joystick->fd = open(joystick->device, O_RDONLY | O_NDELAY, 0)) < 0) {
- xf86Msg(X_ERROR, "Cannot open joystick '%s' (%s)\n",
- joystick->device, strerror(errno));
- return -1;
+ if (joystick->fd == -1) {
+ if ((joystick->fd = open(joystick->device, O_RDONLY | O_NDELAY, 0)) < 0) {
+ xf86Msg(X_ERROR, "Cannot open joystick '%s' (%s)\n",
+ joystick->device, strerror(errno));
+ return -1;
+ }
}
if (ioctl(joystick->fd, EVIOCGVERSION, &driver_version) == -1) {
diff --git a/src/backend_joystick.c b/src/backend_joystick.c
index d335bc2..172ce50 100644
--- a/src/backend_joystick.c
+++ b/src/backend_joystick.c
@@ -72,10 +72,12 @@ jstkOpenDevice_joystick(JoystickDevPtr joystick, Bool probe)
unsigned char axes, buttons;
int driver_version;
- if ((joystick->fd = open(joystick->device, O_RDONLY | O_NDELAY, 0)) < 0) {
- xf86Msg(X_ERROR, "Cannot open joystick '%s' (%s)\n",
- joystick->device, strerror(errno));
- return -1;
+ if (joystick->fd == -1) {
+ if ((joystick->fd = open(joystick->device, O_RDONLY | O_NDELAY, 0)) < 0) {
+ xf86Msg(X_ERROR, "Cannot open joystick '%s' (%s)\n",
+ joystick->device, strerror(errno));
+ return -1;
+ }
}
if (ioctl(joystick->fd, JSIOCGVERSION, &driver_version) == -1) {
diff --git a/src/jstk.c b/src/jstk.c
index 211fe32..6cf0ef9 100644
--- a/src/jstk.c
+++ b/src/jstk.c
@@ -80,6 +80,9 @@ jstkOpenDevice(JoystickDevPtr priv, BOOL probe)
int fd;
fd = -1;
+ if (priv->joystick_device->flags & XI86_SERVER_FD)
+ priv->fd = priv->joystick_device->fd;
+
if (probe == FALSE && priv->open_proc)
return priv->open_proc(priv, probe);
@@ -112,7 +115,8 @@ jstkOpenDevice(JoystickDevPtr priv, BOOL probe)
void jstkCloseDevice(JoystickDevPtr priv)
{
if ((priv->fd >= 0)) {
- xf86CloseSerial(priv->fd);
+ if (!(priv->joystick_device->flags & XI86_SERVER_FD))
+ xf86CloseSerial(priv->fd);
priv->fd = -1;
}
}
@@ -434,7 +438,8 @@ jstkDeviceControlProc(DeviceIntPtr pJstk,
if (pInfo->fd >= 0)
RemoveEnabledDevice(pInfo->fd);
- pInfo->fd = -1;
+ if (!(pInfo->flags & XI86_SERVER_FD))
+ pInfo->fd = -1;
if (priv->close_proc)
priv->close_proc(priv);
pJstk->public.on = FALSE;
@@ -485,7 +490,8 @@ jstkCorePreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
pInfo->read_input = jstkReadProc;
pInfo->control_proc = NULL;
pInfo->switch_mode = NULL;
- pInfo->fd = -1;
+ if (!(pInfo->flags & XI86_SERVER_FD))
+ pInfo->fd = -1;
pInfo->dev = NULL;
pInfo->type_name = XI_JOYSTICK;
@@ -506,6 +512,7 @@ jstkCorePreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
priv->mouse_enabled = TRUE;
priv->keys_enabled = TRUE;
priv->amplify = 1.0f;
+ priv->joystick_device = pInfo;
priv->keyboard_device = keyboard_device;
priv->num_axes = MAXAXES;
priv->num_buttons = MAXBUTTONS;
@@ -682,7 +689,11 @@ _X_EXPORT InputDriverRec JOYSTICK = {
NULL,
jstkCorePreInit,
jstkCoreUnInit,
- NULL
+ NULL,
+ NULL,
+#ifdef XI86_DRV_CAP_SERVER_FD
+ XI86_DRV_CAP_SERVER_FD
+#endif
};
/*
diff --git a/src/jstk.h b/src/jstk.h
index 4955435..6421e7f 100644
--- a/src/jstk.h
+++ b/src/jstk.h
@@ -55,6 +55,9 @@
#define XI_JOYSTICK "JOYSTICK"
#endif
+#ifndef XI86_SERVER_FD
+#define XI86_SERVER_FD 0x20
+#endif
typedef enum _JOYSTICKEVENT {
EVENT_NONE=0,
@@ -106,6 +109,7 @@ typedef struct _JoystickDevRec {
jstkReadDataProc read_proc; /* Callback for reading data from the backend */
void *devicedata; /* Extra platform device dependend data */
char *device; /* Name of the device */
+ InputInfoPtr joystick_device; /* Back pointer to the joystick device */
InputInfoPtr keyboard_device; /* Slave device for keyboard events */
OsTimerPtr timer; /* Timer for axis movement */
diff --git a/src/jstk_key.c b/src/jstk_key.c
index 241b15d..5a4ed8e 100644
--- a/src/jstk_key.c
+++ b/src/jstk_key.c
@@ -200,7 +200,8 @@ int jstkKeyboardPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
pInfo->read_input = NULL;
pInfo->control_proc = NULL;
pInfo->switch_mode = NULL;
- pInfo->fd = -1;
+ if (!(pInfo->flags & XI86_SERVER_FD))
+ pInfo->fd = -1;
pInfo->type_name = XI_JOYSTICK;
/* parse keyboard-related options */
commit 341d23ceaa9d5483b5318425e7308e09f8941957
Author: Hans de Goede <hdegoede@redhat.com>
Date: Thu Mar 13 14:49:52 2014 +0100
Add a generic jstkCloseDevice helper function
This is a preparation patch for adding support for server managed fds.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/src/backend_bsd.c b/src/backend_bsd.c
index 9fa3035..f3f501e 100644
--- a/src/backend_bsd.c
+++ b/src/backend_bsd.c
@@ -209,10 +209,7 @@ jstkOpenDevice_bsd(JoystickDevPtr joystick, Bool probe)
static void
jstkCloseDevice_bsd(JoystickDevPtr joystick)
{
- if ((joystick->fd >= 0)) {
- xf86CloseSerial(joystick->fd);
- joystick->fd = -1;
- }
+ jstkCloseDevice(joystick);
if (joystick->devicedata != NULL) {
if (((struct jstk_bsd_hid_data*)joystick->devicedata)->data_buf)
free(((struct jstk_bsd_hid_data*)joystick->devicedata)->data_buf);
diff --git a/src/backend_evdev.c b/src/backend_evdev.c
index 6d6f644..2a7b0e2 100644
--- a/src/backend_evdev.c
+++ b/src/backend_evdev.c
@@ -210,10 +210,7 @@ jstkOpenDevice_evdev(JoystickDevPtr joystick, Bool probe)
static void
jstkCloseDevice_evdev(JoystickDevPtr joystick)
{
- if ((joystick->fd >= 0)) {
- xf86CloseSerial(joystick->fd);
- joystick->fd = -1;
- }
+ jstkCloseDevice(joystick);
if (joystick->devicedata) {
free(joystick->devicedata);
joystick->devicedata = NULL;
diff --git a/src/backend_joystick.c b/src/backend_joystick.c
index c84654e..d335bc2 100644
--- a/src/backend_joystick.c
+++ b/src/backend_joystick.c
@@ -49,7 +49,6 @@
#include "backend_joystick.h"
-static void jstkCloseDevice_joystick(JoystickDevPtr joystick);
static int jstkReadData_joystick(JoystickDevPtr joystick,
JOYSTICKEVENT *event,
int *number);
@@ -82,7 +81,7 @@ jstkOpenDevice_joystick(JoystickDevPtr joystick, Bool probe)
if (ioctl(joystick->fd, JSIOCGVERSION, &driver_version) == -1) {
xf86Msg(X_ERROR, "Joystick: ioctl JSIOCGVERSION on '%s' failed: %s\n",
joystick->device, strerror(errno));
- jstkCloseDevice_joystick(joystick);
+ jstkCloseDevice(joystick);
return -1;
}
if ((driver_version >> 16) < 1) {
@@ -95,21 +94,21 @@ jstkOpenDevice_joystick(JoystickDevPtr joystick, Bool probe)
if (ioctl(joystick->fd, JSIOCGAXES, &axes) == -1) {
xf86Msg(X_ERROR, "Joystick: ioctl JSIOCGAXES on '%s' failed: %s\n",
joystick->device, strerror(errno));
- jstkCloseDevice_joystick(joystick);
+ jstkCloseDevice(joystick);
return -1;
}
if (ioctl(joystick->fd, JSIOCGBUTTONS, &buttons) == -1) {
xf86Msg(X_ERROR, "Joystick: ioctl JSIOCGBUTTONS on '%s' failed: %s\n",
joystick->device, strerror(errno));
- jstkCloseDevice_joystick(joystick);
+ jstkCloseDevice(joystick);
return -1;
}
if (ioctl(joystick->fd, JSIOCGNAME(128), joy_name) == -1) {
xf86Msg(X_ERROR, "Joystick: ioctl JSIOCGNAME on '%s' failed: %s\n",
joystick->device, strerror(errno));
- jstkCloseDevice_joystick(joystick);
+ jstkCloseDevice(joystick);
return -1;
}
@@ -127,32 +126,13 @@ jstkOpenDevice_joystick(JoystickDevPtr joystick, Bool probe)
joystick->open_proc = jstkOpenDevice_joystick;
joystick->read_proc = jstkReadData_joystick;
- joystick->close_proc = jstkCloseDevice_joystick;
+ joystick->close_proc = jstkCloseDevice;
return joystick->fd;
}
/***********************************************************************
*
- * jstkCloseDevice --
- *
- * close the handle.
- *
- ***********************************************************************
- */
-
-static void
-jstkCloseDevice_joystick(JoystickDevPtr joystick)
-{
- if ((joystick->fd >= 0)) {
- xf86CloseSerial(joystick->fd);
- joystick->fd = -1;
- }
-}
-
-
-/***********************************************************************
- *
* jstkReadData --
*
* Reads data from fd and stores it in the JoystickDevRec struct
diff --git a/src/jstk.c b/src/jstk.c
index bee34fc..211fe32 100644
--- a/src/jstk.c
+++ b/src/jstk.c
@@ -34,6 +34,7 @@
#include <xf86Xinput.h>
#include <exevents.h> /* Needed for InitValuator/Proximity stuff */
#include <xf86Opt.h>
+#include <xf86_OSproc.h>
#include <math.h>
#include <xf86Module.h>
@@ -98,6 +99,23 @@ jstkOpenDevice(JoystickDevPtr priv, BOOL probe)
return fd;
}
+/*
+ ***************************************************************************
+ *
+ * jstkCloseDevice --
+ *
+ * Called to close the device specified in priv, this is a helper for
+ * backend proc_close functions
+ *
+ ***************************************************************************
+ */
+void jstkCloseDevice(JoystickDevPtr priv)
+{
+ if ((priv->fd >= 0)) {
+ xf86CloseSerial(priv->fd);
+ priv->fd = -1;
+ }
+}
/*
***************************************************************************
diff --git a/src/jstk.h b/src/jstk.h
index ed5e4a7..4955435 100644
--- a/src/jstk.h
+++ b/src/jstk.h
@@ -123,4 +123,6 @@ typedef struct _JoystickDevRec {
BUTTON button[MAXBUTTONS]; /* Configuration per button */
} JoystickDevRec;
+void jstkCloseDevice(JoystickDevPtr priv);
+
#endif
commit 6de3b75c453e4687b21f6d6acfcf87e7041c4fc5
Author: Hans de Goede <hdegoede@redhat.com>
Date: Thu Mar 13 14:49:51 2014 +0100
Use jstkCloseDevice_* on error in jstkOpenDevice_* backend functions
This is a preparation patch for adding support for server managed fds, this
also fixes a missing free() in an error handling path in the evdev back-end.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/src/backend_bsd.c b/src/backend_bsd.c
index c6ce7b4..9fa3035 100644
--- a/src/backend_bsd.c
+++ b/src/backend_bsd.c
@@ -100,29 +100,27 @@ jstkOpenDevice_bsd(JoystickDevPtr joystick, Bool probe)
if ((rd = hid_get_report_desc(joystick->fd)) == 0) {
xf86Msg(X_ERROR, "Joystick: hid_get_report_desc failed: %s\n",
strerror(errno));
- close(joystick->fd);
- joystick->fd = -1;
+ jstkCloseDevice_bsd(joystick);
return -1;
}
if (ioctl(joystick->fd, USB_GET_REPORT_ID, &report_id) < 0) {
xf86Msg(X_ERROR, "Joystick: ioctl USB_GET_REPORT_ID failed: %s\n",
strerror(errno));
- close(joystick->fd);
- joystick->fd = -1;
+ jstkCloseDevice_bsd(joystick);
return -1;
}
bsddata = (struct jstk_bsd_hid_data*)
malloc(sizeof(struct jstk_bsd_hid_data));
+ joystick->devicedata = (void*) bsddata;
+
bsddata->dlen = hid_report_size(rd, hid_input, report_id);
if ((bsddata->data_buf = malloc(bsddata->dlen)) == NULL) {
fprintf(stderr, "error: couldn't malloc %d bytes\n", bsddata->dlen);
hid_dispose_report_desc(rd);
- free(bsddata);
- close(joystick->fd);
- joystick->fd = -1;
+ jstkCloseDevice_bsd(joystick);
return -1;
}
@@ -181,14 +179,11 @@ jstkOpenDevice_bsd(JoystickDevPtr joystick, Bool probe)
if (!got_something) {
free(bsddata->data_buf);
xf86Msg(X_ERROR, "Joystick: Didn't find any usable axes.\n");
- free(bsddata);
- close(joystick->fd);
- joystick->fd = -1;
+ jstkCloseDevice_bsd(joystick);
return -1;
}
bsddata->hotdata = 0;
- joystick->devicedata = (void*) bsddata;
if (probe == TRUE) {
xf86Msg(X_INFO, "Joystick: %d buttons, %d axes\n",
joystick->num_buttons, joystick->num_axes);
@@ -222,6 +217,7 @@ jstkCloseDevice_bsd(JoystickDevPtr joystick)
if (((struct jstk_bsd_hid_data*)joystick->devicedata)->data_buf)
free(((struct jstk_bsd_hid_data*)joystick->devicedata)->data_buf);
free(joystick->devicedata);
+ joystick->devicedata = NULL;
}
}
diff --git a/src/backend_evdev.c b/src/backend_evdev.c
index ca0b2e0..6d6f644 100644
--- a/src/backend_evdev.c
+++ b/src/backend_evdev.c
@@ -99,16 +99,14 @@ jstkOpenDevice_evdev(JoystickDevPtr joystick, Bool probe)
if (ioctl(joystick->fd, EVIOCGVERSION, &driver_version) == -1) {
xf86Msg(X_ERROR, "Joystick: ioctl EVIOCGVERSION on '%s' failed: %s\n",
joystick->device, strerror(errno));
- close(joystick->fd);
- joystick->fd = -1;
+ jstkCloseDevice_evdev(joystick);
return -1;
}
if (ioctl(joystick->fd, EVIOCGID, &id) == -1) {
xf86Msg(X_ERROR, "Joystick: ioctl EVIOCGID on '%s' failed: %s\n",
joystick->device, strerror(errno));
- close(joystick->fd);
- joystick->fd = -1;
+ jstkCloseDevice_evdev(joystick);
return -1;
}
@@ -118,13 +116,14 @@ jstkOpenDevice_evdev(JoystickDevPtr joystick, Bool probe)
{
xf86Msg(X_ERROR, "Joystick: ioctl EVIOCGBIT on '%s' failed: %s\n",
joystick->device, strerror(errno));
- close(joystick->fd);
- joystick->fd = -1;
+ jstkCloseDevice_evdev(joystick);
return -1;
}
evdevdata = (struct jstk_evdev_data*)
malloc(sizeof(struct jstk_evdev_data));
+ joystick->devicedata = (void*) evdevdata;
+
for (axes=0; axes<ABS_MAX; axes++)
{
evdevdata->axis[axes].number = -1;
@@ -144,9 +143,7 @@ jstkOpenDevice_evdev(JoystickDevPtr joystick, Bool probe)
if (ioctl(joystick->fd, EVIOCGABS(j), &absinfo) == -1) {
xf86Msg(X_ERROR, "Joystick: ioctl EVIOCGABS on '%s' failed: %s\n",
joystick->device, strerror(errno));
- close(joystick->fd);
- joystick->fd = -1;
- free(evdevdata);
+ jstkCloseDevice_evdev(joystick);
return -1;
}
evdevdata->axis[j].number = axes; /* physical -> logical mapping */
@@ -163,8 +160,7 @@ jstkOpenDevice_evdev(JoystickDevPtr joystick, Bool probe)
{
xf86Msg(X_ERROR, "Joystick: ioctl EVIOCGBIT on '%s' failed: %s\n",
joystick->device, strerror(errno));
- close(joystick->fd);
- joystick->fd = -1;
+ jstkCloseDevice_evdev(joystick);
return -1;
}
buttons = 0; /* Our logical index */
@@ -191,7 +187,6 @@ jstkOpenDevice_evdev(JoystickDevPtr joystick, Bool probe)
joystick->open_proc = jstkOpenDevice_evdev;
joystick->read_proc = jstkReadData_evdev;
joystick->close_proc = jstkCloseDevice_evdev;
- joystick->devicedata = (void*) evdevdata;
if (buttons > MAXBUTTONS)
buttons = MAXBUTTONS;
@@ -217,12 +212,12 @@ jstkCloseDevice_evdev(JoystickDevPtr joystick)
{
if ((joystick->fd >= 0)) {
xf86CloseSerial(joystick->fd);
- if (joystick->devicedata) {
- free(joystick->devicedata);
- joystick->devicedata = NULL;
- }
joystick->fd = -1;
}
+ if (joystick->devicedata) {
+ free(joystick->devicedata);
+ joystick->devicedata = NULL;
+ }
}
diff --git a/src/backend_joystick.c b/src/backend_joystick.c
index e61d908..c84654e 100644
--- a/src/backend_joystick.c
+++ b/src/backend_joystick.c
@@ -82,8 +82,7 @@ jstkOpenDevice_joystick(JoystickDevPtr joystick, Bool probe)
if (ioctl(joystick->fd, JSIOCGVERSION, &driver_version) == -1) {
xf86Msg(X_ERROR, "Joystick: ioctl JSIOCGVERSION on '%s' failed: %s\n",
joystick->device, strerror(errno));
- close(joystick->fd);
- joystick->fd = -1;
+ jstkCloseDevice_joystick(joystick);
return -1;
}
if ((driver_version >> 16) < 1) {
@@ -96,24 +95,21 @@ jstkOpenDevice_joystick(JoystickDevPtr joystick, Bool probe)
if (ioctl(joystick->fd, JSIOCGAXES, &axes) == -1) {
xf86Msg(X_ERROR, "Joystick: ioctl JSIOCGAXES on '%s' failed: %s\n",
joystick->device, strerror(errno));
- close(joystick->fd);
- joystick->fd = -1;
+ jstkCloseDevice_joystick(joystick);
return -1;
}
if (ioctl(joystick->fd, JSIOCGBUTTONS, &buttons) == -1) {
xf86Msg(X_ERROR, "Joystick: ioctl JSIOCGBUTTONS on '%s' failed: %s\n",
joystick->device, strerror(errno));
- close(joystick->fd);
- joystick->fd = -1;
+ jstkCloseDevice_joystick(joystick);
return -1;
}
if (ioctl(joystick->fd, JSIOCGNAME(128), joy_name) == -1) {
xf86Msg(X_ERROR, "Joystick: ioctl JSIOCGNAME on '%s' failed: %s\n",
joystick->device, strerror(errno));
- close(joystick->fd);
- joystick->fd = -1;
+ jstkCloseDevice_joystick(joystick);
return -1;
}
commit a976a85aeff4f2511544c0385533d9387957afae
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed Jan 30 12:57:51 2013 +1000
Handle DEVICE_ABORT for input ABI 19.1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/src/jstk.c b/src/jstk.c
index b82481a..bee34fc 100644
--- a/src/jstk.c
+++ b/src/jstk.c
@@ -422,6 +422,11 @@ jstkDeviceControlProc(DeviceIntPtr pJstk,
pJstk->public.on = FALSE;
break;
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) * 100 + GET_ABI_MINOR(ABI_XINPUT_VERSION) >= 1901
+ case DEVICE_ABORT:
+ break;
+#endif
+
default:
ErrorF("unsupported mode=%d\n", what);
return BadValue;
Reply to: