[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-input-joystick: Changes to 'debian-unstable'



 ChangeLog                           |   61 ++++++++++++++++++++++++++++++++++++
 configure.ac                        |    2 -
 debian/changelog                    |    8 ++++
 debian/patches/series               |    1 
 debian/patches/support-new-api.diff |   58 ----------------------------------
 debian/upstream/signing-key.asc     |   23 +++++++++++++
 debian/watch                        |    1 
 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 +
 13 files changed, 184 insertions(+), 143 deletions(-)

New commits:
commit 082690d87aa872a7c03e9b73469334f5c255f30c
Author: Andreas Boll <andreas.boll.dev@gmail.com>
Date:   Fri Nov 18 11:14:54 2016 +0100

    Let uscan verify tarball signatures.

diff --git a/debian/changelog b/debian/changelog
index c178059..c86406c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,7 @@ xserver-xorg-input-joystick (1:1.6.3-1) UNRELEASED; urgency=medium
 
   * New upstream release.
   * Drop support-new-api.diff, upstream in 1.6.3.
+  * Let uscan verify tarball signatures.
 
  -- Andreas Boll <andreas.boll.dev@gmail.com>  Fri, 18 Nov 2016 11:05:47 +0100
 
diff --git a/debian/upstream/signing-key.asc b/debian/upstream/signing-key.asc
new file mode 100644
index 0000000..767d86a
--- /dev/null
+++ b/debian/upstream/signing-key.asc
@@ -0,0 +1,23 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGiBD8b0wYRBACph9kRJmP+4+JGsCgFlFoy4vFO0DCG+jmkQN0n1wdInt/N/UtA
+sZToO72AUmfmYizA+IEbzBrx0UnUo3w3BDmHxUWf/akZiPUz9AA/YFY4xC3MY2OK
+VN2Jz6YSce4zJ5jd2ZRobHm4HuIf/8yqSCcsv7FNfrLaTNIFRs5gYYsqZwCgwmkp
+RSLRc8WAnHrTWNQDaEFM2rUEAKTjrTjMN8+KGd0BxNX7HiTSqQP++nXNwAYs1oWB
+Yt82YHj9SvRCqCzD1pzJQivYnlNoWDza1VeMnfdAvkdia8z4lYbO/RunXZJvra3Z
+VDm+izq+uwUAyvFuEYnNz09VSqwXKT6+XW0Xtz2vHq52r6DS6mK8cGJHZ5OhrRjq
+UEYxA/9STh+QfA98xtNoRcf52E/46r7IpCj440oRVc9lMfxQZrLGQNqp7sPdIhGQ
+CCo2NUII5hkhdAG71kpbfSXU4Sh32p1cU1KYCAkDFfb49bKuAs+Pff8v6FGZxTdd
+AinPZr4BbsYJatk818aTCnu0+s7L8jL5GPfeyuyEMKwzVBx2mLQpUGV0ZXIgSHV0
+dGVyZXIgKFdoby1UKSA8b2ZmaWNlQHdoby10Lm5ldD6IWQQTEQIAGQUCPxvTBgQL
+BwMCAxUCAwMWAgECHgECF4AACgkQ4jt+cLRn8L/0RACfWo3KTMUg+uPRqA6RXxk0
+4CWjXaMAoJeIxOpZLB3RBltPnSi7PyVQIkHFuQENBD8b0wgQBACTnqOYOWYVR8O1
+D73J6nbdAeZCbXrUkyXIuyqBOdKmX/0QJmSs7Wfsa+hPfDhj6ai0Gs2C8Qg/0Pzk
+86b4p9DLkf0M6RaYjUtCJBpS59xrsV6nz6xZzQa4RRdf1YJmw2tia1MMXzxbwQU2
+bKpYEm8NsGaBURMGd02EvsMN2wI2uwADBQP/e9MjVr/85XDzAlUBN8HwYW5szTyP
+8ZVcQOqOmNebkTWGLvkPrBdXmxpzrWjxPolO1WcWQjUL0bN/rbdqefT65iVHJHJZ
+/cpTtgGlCPhL5JTA50ltd0I13CABYWLFmswonXES/6tcglf4rr3Nri2sOrY5HggP
+ipEzOo5vdKOow/qIRgQYEQIABgUCPxvTCAAKCRDiO35wtGfwv68jAKCDvL2gkrg1
+4NfV7rNc057K1nL2GgCeKApWRgGVzaOkAp0P5tQulaDD6zM=
+=7uBX
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/debian/watch b/debian/watch
index 4ecc980..bd68fbd 100644
--- a/debian/watch
+++ b/debian/watch
@@ -1,3 +1,4 @@
 #git=git://anongit.freedesktop.org/xorg/driver/xf86-input-joystick
 version=3
+opts="pgpsigurlmangle=s/$/.sig/" \
 https://xorg.freedesktop.org/releases/individual/driver/ xf86-input-joystick-(.*)\.tar\.gz

commit f8402d7500f28585b96887c99b8ec6a222e1b72f
Author: Andreas Boll <andreas.boll.dev@gmail.com>
Date:   Fri Nov 18 11:11:53 2016 +0100

    Drop support-new-api.diff, upstream in 1.6.3.

diff --git a/debian/changelog b/debian/changelog
index 8dc43ea..c178059 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
 xserver-xorg-input-joystick (1:1.6.3-1) UNRELEASED; urgency=medium
 
   * New upstream release.
+  * Drop support-new-api.diff, upstream in 1.6.3.
 
  -- Andreas Boll <andreas.boll.dev@gmail.com>  Fri, 18 Nov 2016 11:05:47 +0100
 
diff --git a/debian/patches/series b/debian/patches/series
index 258f787..f047877 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1 @@
 0001-Fix-includes-for-kfreebsd.diff
-support-new-api.diff
diff --git a/debian/patches/support-new-api.diff b/debian/patches/support-new-api.diff
deleted file mode 100644
index 1b2356c..0000000
--- a/debian/patches/support-new-api.diff
+++ /dev/null
@@ -1,58 +0,0 @@
---- a/src/jstk.c
-+++ b/src/jstk.c
-@@ -61,6 +61,10 @@
-     char debug_level = 0;
- #endif
- 
-+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 23
-+#define HAVE_THREADED_INPUT	1
-+#endif
-+
- /*
-  ***************************************************************************
-  *
-@@ -124,8 +128,13 @@ jstkReadProc(InputInfoPtr pInfo)
-             ((r=priv->read_proc(priv, &event, &number))==0)) {
-             xf86Msg(X_WARNING, "JOYSTICK: Read failed. Deactivating device.\n");
- 
--            if (pInfo->fd >= 0)
--                RemoveEnabledDevice(pInfo->fd);
-+            if (pInfo->fd >= 0) {
-+#if HAVE_THREADED_INPUT
-+                xf86RemoveEnabledDevice(pInfo);
-+#else
-+                RemoveEnabledDevice(pInfo->fd);
-+#endif
-+	    }
-             return;
-         }
- 
-@@ -392,7 +401,11 @@ jstkDeviceControlProc(DeviceIntPtr
-         if (jstkOpenDevice(priv, FALSE) != -1) {
-             pJstk->public.on = TRUE;
-             pInfo->fd = priv->fd;
--            AddEnabledDevice(pInfo->fd);
-+#if HAVE_THREADED_INPUT
-+            xf86AddEnabledDevice(pInfo);
-+#else
-+            AddEnabledDevice(pInfo->fd);
-+#endif
-         } else return !Success;
-         break;
- 
-@@ -414,8 +427,13 @@ jstkDeviceControlProc(DeviceIntPtr
-             TimerCancel(priv->axis[i].timer);
-         }
- 
--        if (pInfo->fd >= 0)
--            RemoveEnabledDevice(pInfo->fd);
-+        if (pInfo->fd >= 0) {
-+#if HAVE_THREADED_INPUT
-+            xf86RemoveEnabledDevice(pInfo);
-+#else
-+            RemoveEnabledDevice(pInfo->fd);
-+#endif
-+	}
-         pInfo->fd = -1;
-         if (priv->close_proc)
-             priv->close_proc(priv);

commit 3f2379d607c5819ae49b5829b96fb948ef5afae1
Author: Andreas Boll <andreas.boll.dev@gmail.com>
Date:   Fri Nov 18 11:06:12 2016 +0100

    Bump changelogs

diff --git a/ChangeLog b/ChangeLog
index 7a98074..91d70fd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,64 @@
+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>
+
+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>
+
+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>
+
+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>
+
+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>
+
+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>
+
 commit 426c3aa3c8a2385f17e37ae73c1e78f072656027
 Author: Sascha Hlusiak <saschahlusiak@arcor.de>
 Date:   Wed Jan 16 10:52:12 2013 +0100
diff --git a/debian/changelog b/debian/changelog
index 0f9a13d..8dc43ea 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+xserver-xorg-input-joystick (1:1.6.3-1) UNRELEASED; urgency=medium
+
+  * New upstream release.
+
+ -- Andreas Boll <andreas.boll.dev@gmail.com>  Fri, 18 Nov 2016 11:05:47 +0100
+
 xserver-xorg-input-joystick (1:1.6.2-2) unstable; urgency=medium
 
   * support-new-api.diff: Fix build with xserver 1.19.

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: