Hello community,

here is the log from the commit of package xf86-input-wacom for 
openSUSE:Factory checked in at 2013-12-11 17:40:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xf86-input-wacom (Old)
 and      /work/SRC/openSUSE:Factory/.xf86-input-wacom.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "xf86-input-wacom"

Changes:
--------
--- /work/SRC/openSUSE:Factory/xf86-input-wacom/xf86-input-wacom.changes        
2013-08-19 10:53:16.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.xf86-input-wacom.new/xf86-input-wacom.changes   
2013-12-11 17:40:19.000000000 +0100
@@ -1,0 +2,10 @@
+Sat Dec  7 23:03:46 UTC 2013 - [email protected]
+
+- Update to version 0.23.0:
+  + Correct return value of special_map_button.
+  + Fix buffer overflows in 'special_map_*'.
+  + Add support for Intuos Pro series.
+  + strdup the option key/values in our input_option_new.
+  + Print list of supported models on wcmPlug.
+
+-------------------------------------------------------------------

Old:
----
  xf86-input-wacom-0.22.1.tar.bz2

New:
----
  xf86-input-wacom-0.23.0.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ xf86-input-wacom.spec ++++++
--- /var/tmp/diff_new_pack.Aye3PB/_old  2013-12-11 17:40:20.000000000 +0100
+++ /var/tmp/diff_new_pack.Aye3PB/_new  2013-12-11 17:40:20.000000000 +0100
@@ -23,7 +23,7 @@
 %endif
 
 Name:           xf86-input-wacom
-Version:        0.22.1
+Version:        0.23.0
 Release:        0
 Summary:        Wacom input driver for the Xorg X server
 License:        GPL-2.0+

++++++ xf86-input-wacom-0.22.1.tar.bz2 -> xf86-input-wacom-0.23.0.tar.bz2 ++++++
++++ 2073 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-input-wacom-0.22.1/ChangeLog new/xf86-input-wacom-0.23.0/ChangeLog
--- old/xf86-input-wacom-0.22.1/ChangeLog       2013-07-15 19:06:35.000000000 
+0200
+++ new/xf86-input-wacom-0.23.0/ChangeLog       2013-09-28 01:43:04.000000000 
+0200
@@ -1,3 +1,137 @@
+commit 5395d18c4bbaa0d9ea96617ad41bd94848fb05e9
+Author: Jason Gerecke <[email protected]>
+Date:   Fri Sep 27 16:42:39 2013 -0700
+
+    wacom 0.23.0
+    
+    Signed-off-by: Jason Gerecke <[email protected]>
+
+commit eef947af1447df58099a005834de394edb4b03d0
+Author: Jason Gerecke <[email protected]>
+Date:   Thu Sep 19 17:08:13 2013 -0700
+
+    wacom 0.22.99.1
+    
+    Signed-off-by: Jason Gerecke <[email protected]>
+
+commit 6cadaf2eabb91e47963054e1628374861fea6209
+Author: Jason Gerecke <[email protected]>
+Date:   Wed Sep 11 09:55:46 2013 -0700
+
+    Correct return value of special_map_button
+    
+    The 'special_map_*' functions called by 'parse_actions' are expected
+    to return a count of the number of words of input they have consumed.
+    The 'special_map_buttom' function errounously returns the number of
+    actions added instead, causing the program to potentially skip over
+    requested actions which follow a list of "button" actions.
+    
+    Signed-off-by: Jason Gerecke <[email protected]>
+
+commit cde2718ac432f5d745b9ff5ccf6d4f8c2f4fc499
+Author: Jason Gerecke <[email protected]>
+Date:   Wed Sep 11 09:30:37 2013 -0700
+
+    Fix buffer overflows in 'special_map_*'
+    
+    Each of the 'special_map_*' functions is given free reign to write
+    to the end of a buffer, but is never given the size of the buffer
+    itself. It is trivial to trigger an overflow simply by feeding the
+    program more actions to perform than space to store them.
+    
+    This patch adds an argument to each function which contains the
+    buffer's size. The functions check for sufficient space before
+    writing to the buffer and will print out an error message if
+    it isn't available.
+    
+    Signed-off-by: Jason Gerecke <[email protected]>
+
+commit 59086ba4f5caf4cf6f52f80b5ca36144a882daa5
+Author: Ping Cheng <[email protected]>
+Date:   Tue Sep 10 16:42:22 2013 -0700
+
+    Add support for Intuos Pro series
+    
+    Reviewed-by: Peter Hutterer <[email protected]>
+    Signed-off-by: Ping Cheng <[email protected]>
+    Signed-off-by: Peter Hutterer <[email protected]>
+
+commit cb14924a2a5be21c8525ca70932ab8b5f0f99752
+Author: Peter Hutterer <[email protected]>
+Date:   Wed Sep 4 17:04:13 2013 +1000
+
+    strdup the option key/values in our input_option_new
+    
+    This is a interface for servers with ABI < 14 (up to server 1.11).
+    The server version of it strdups the values, so we must do the same.
+    
+    Otherwise the values assigned to the InputOption list in
+    wcmOptionDupConvert are freed during xf86OptionListFree().
+    
+    That later causes a SIGABORT when NewInputDeviceRequest starts using
+    those options.
+    
+    https://sourceforge.net/p/linuxwacom/bugs/233/
+    
+    Signed-off-by: Peter Hutterer <[email protected]>
+    Acked-by: Ping Cheng <[email protected]>
+
+commit 39c4c7fca7db19ac550332fa53d0d4f58a26f67f
+Author: Peter Hutterer <[email protected]>
+Date:   Sat Aug 31 14:35:58 2013 +1000
+
+    Print list of supported models on wcmPlug
+    
+    When the driver starts, print the list of supported models. This should
+    help with any questions like "does my driver support this or that model".
+    
+    For those models that don't have a defined name, print "usb:1234:5678"
+    instead, so users can at least try to match the usb IDs.
+    
+    Sample log output:
+    [ 25950.166] (II) wacom: Driver for Wacom graphics tablets: PenPartner, 
PenPartner,
+            Graphire, Graphire2 4x5, Graphire2 5x7, Graphire3 4x5, Graphire3 
6x8,
+            Graphire4 4x5, Graphire4 6x8, BambooFun 4x5, BambooFun 6x8,
+            Bamboo1 Medium, Graphire4 6x8 BlueTooth, CTL-460, CTH-461, CTL-660,
+            CTL-461/S, Bamboo Touch, CTH-460/K, CTH-461/S, CTH-661/S1, 
CTH-461/L,
+            CTH-661/L, Intuos 4x5, Intuos 6x8, Intuos 9x12, Intuos 12x12,
+            Intuos 12x18, PTU600, PL400, PL500, PL600, PL600SX, PL550, PL800,
+            PL700, PL510, PL710, DTI520, DTF720, DTF720a, DTF521, DTU1931,
+            DTU2231, DTU1631, Intuos2 4x5, Intuos2 6x8, Intuos2 9x12,
+            Intuos2 12x12, Intuos2 12x18, Intuos2 6x8 , Volito, PenStation,
+            Volito2 4x5, Volito2 2x3, PenPartner2, Bamboo, Bamboo1, Bamboo1 
4x6,
+            Bamboo1 5x8, Intuos3 4x5, Intuos3 6x8, Intuos3 9x12, Intuos3 12x12,
+            Intuos3 12x19, Intuos3 6x11, Intuos3 4x6, Intuos4 4x6, Intuos4 6x9,
+            Intuos4 8x13, Intuos4 12x19, Intuos4 WL USB Endpoint,
+            Intuos4 WL Bluetooth Endpoint, Intuos5 touch S, Intuos5 touch M,
+            Intuos5 touch L, Intuos5 S, Intuos5 M, Cintiq 21UX, Cintiq 20WSX,
+            Cintiq 12WX, Cintiq 21UX2, Cintiq 24HD, Cintiq 22HD,
+            Cintiq 24HD touch (EMR digitizer), Cintiq 13HD, DTK2241, DTH2242,
+            Cintiq 22HDT, TabletPC 0x90, TabletPC 0x93, TabletPC 0x97,
+            TabletPC 0x9A, CapPlus  0x9F, TabletPC 0xE2, TabletPC 0xE3,
+            TabletPC 0xE5, TabletPC 0xE6, TabletPC 0xEC, TabletPC 0xED,
+            TabletPC 0xEF, TabletPC 0x100, TabletPC 0x101, TabletPC 0x10D,
+            TabletPC 0x4001, usb:172f:0024, usb:172f:0025, usb:172f:0026,
+            usb:172f:0027, usb:172f:0028, usb:172f:0030, usb:172f:0031,
+            usb:172f:0032, usb:172f:0033, usb:172f:0034, usb:172f:0035,
+            usb:172f:0036, usb:172f:0037, usb:172f:0038, usb:172f:0039,
+            usb:172f:0051, usb:172f:0052, usb:172f:0053, usb:172f:0054,
+            usb:172f:0055, usb:172f:0056, usb:172f:0057, usb:172f:0058,
+            usb:172f:0500, usb:172f:0501, usb:172f:0502, usb:172f:0503,
+            usb:1b96:0001, usb:17ef:6004
+    [ 25950.167] (II) Using input driver 'wacom' for 'Wacom Intuos4 6x9'
+    
+    Signed-off-by: Peter Hutterer <[email protected]>
+    Acked-by: Ping Cheng <[email protected]>
+
+commit 3f95c4c58afd25e7c8a3ab18dad936f615cfd189
+Author: Jason Gerecke <[email protected]>
+Date:   Mon Jul 15 10:09:40 2013 -0700
+
+    wacom 0.22.1
+    
+    Signed-off-by: Jason Gerecke <[email protected]>
+
 commit b25eb646c36d19a46c561b3c091adb5c86c563df
 Author: Peter Hutterer <[email protected]>
 Date:   Fri Jul 12 10:28:08 2013 +1000
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-input-wacom-0.22.1/configure.ac 
new/xf86-input-wacom-0.23.0/configure.ac
--- old/xf86-input-wacom-0.22.1/configure.ac    2013-07-15 19:04:34.000000000 
+0200
+++ new/xf86-input-wacom-0.23.0/configure.ac    2013-09-28 01:41:45.000000000 
+0200
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-input-wacom],
-        [0.22.1],
+        [0.23.0],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-input-wacom])
 AC_CONFIG_MACRO_DIR([m4])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-input-wacom-0.22.1/src/wcmConfig.c 
new/xf86-input-wacom-0.23.0/src/wcmConfig.c
--- old/xf86-input-wacom-0.22.1/src/wcmConfig.c 2013-07-15 19:01:59.000000000 
+0200
+++ new/xf86-input-wacom-0.23.0/src/wcmConfig.c 2013-09-20 02:05:07.000000000 
+0200
@@ -659,6 +659,9 @@
                int* errmin)
 {
        xf86AddInputDriver(&WACOM, module, 0);
+
+       usbListModels();
+
        return module;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-input-wacom-0.22.1/src/wcmUSB.c 
new/xf86-input-wacom-0.23.0/src/wcmUSB.c
--- old/xf86-input-wacom-0.22.1/src/wcmUSB.c    2013-07-15 19:01:59.000000000 
+0200
+++ new/xf86-input-wacom-0.23.0/src/wcmUSB.c    2013-09-20 02:05:07.000000000 
+0200
@@ -97,6 +97,7 @@
 DEFINE_MODEL(usbIntuos3,       "USB Intuos3",          5);
 DEFINE_MODEL(usbIntuos4,       "USB Intuos4",          5);
 DEFINE_MODEL(usbIntuos5,       "USB Intuos5",          5);
+DEFINE_MODEL(usbIntuosPro,     "USB Intuos Pro",       5);
 DEFINE_MODEL(usbVolito,                "USB Volito",           4);
 DEFINE_MODEL(usbVolito2,       "USB Volito2",          4);
 DEFINE_MODEL(usbCintiqV5,      "USB CintiqV5",         5);
@@ -172,172 +173,218 @@
        BTN_SIDE, BTN_EXTRA
 };
 
-static struct
+static struct WacomModelDesc
 {
        const unsigned int vendor_id;
        const unsigned int model_id;
        int yRes; /* tablet Y resolution in units/meter */
        int xRes; /* tablet X resolution in units/meter */
        WacomModelPtr model;
+       const char *name;
 } WacomModelDesc [] =
 {
-       { WACOM_VENDOR_ID, 0x00,  39370,  39370, &usbPenPartner }, /* 
PenPartner */
-       { WACOM_VENDOR_ID, 0x10,  80000,  80000, &usbGraphire   }, /* Graphire 
*/
-       { WACOM_VENDOR_ID, 0x11,  80000,  80000, &usbGraphire2  }, /* Graphire2 
4x5 */
-       { WACOM_VENDOR_ID, 0x12,  80000,  80000, &usbGraphire2  }, /* Graphire2 
5x7 */
-       { WACOM_VENDOR_ID, 0x13,  80000,  80000, &usbGraphire3  }, /* Graphire3 
4x5 */
-       { WACOM_VENDOR_ID, 0x14,  80000,  80000, &usbGraphire3  }, /* Graphire3 
6x8 */
-       { WACOM_VENDOR_ID, 0x15,  80000,  80000, &usbGraphire4  }, /* Graphire4 
4x5 */
-       { WACOM_VENDOR_ID, 0x16,  80000,  80000, &usbGraphire4  }, /* Graphire4 
6x8 */
-       { WACOM_VENDOR_ID, 0x17, 100000, 100000, &usbBambooFun  }, /* BambooFun 
4x5 */
-       { WACOM_VENDOR_ID, 0x18, 100000, 100000, &usbBambooFun  }, /* BambooFun 
6x8 */
-       { WACOM_VENDOR_ID, 0x19,  80000,  80000, &usbBamboo1    }, /* Bamboo1 
Medium*/
-       { WACOM_VENDOR_ID, 0x81,  80000,  80000, &usbGraphire4  }, /* Graphire4 
6x8 BlueTooth */
-
-       { WACOM_VENDOR_ID, 0xD1, 100000, 100000, &usbBamboo     }, /* CTL-460 */
-       { WACOM_VENDOR_ID, 0xD4, 100000, 100000, &usbBamboo     }, /* CTH-461 */
-       { WACOM_VENDOR_ID, 0xD3, 100000, 100000, &usbBamboo     }, /* CTL-660 */
-       { WACOM_VENDOR_ID, 0xD2, 100000, 100000, &usbBamboo     }, /* CTL-461/S 
*/
-       { WACOM_VENDOR_ID, 0xD0, 100000, 100000, &usbBamboo     }, /* Bamboo 
Touch */
-       { WACOM_VENDOR_ID, 0xD6, 100000, 100000, &usbBamboo     }, /* CTH-460/K 
*/
-       { WACOM_VENDOR_ID, 0xD7, 100000, 100000, &usbBamboo     }, /* CTH-461/S 
*/
-       { WACOM_VENDOR_ID, 0xD8, 100000, 100000, &usbBamboo     }, /* 
CTH-661/S1 */
-       { WACOM_VENDOR_ID, 0xDA, 100000, 100000, &usbBamboo     }, /* CTH-461/L 
*/
-       { WACOM_VENDOR_ID, 0xDB, 100000, 100000, &usbBamboo     }, /* CTH-661/L 
*/
-
-       { WACOM_VENDOR_ID, 0x20, 100000, 100000, &usbIntuos     }, /* Intuos 
4x5 */
-       { WACOM_VENDOR_ID, 0x21, 100000, 100000, &usbIntuos     }, /* Intuos 
6x8 */
-       { WACOM_VENDOR_ID, 0x22, 100000, 100000, &usbIntuos     }, /* Intuos 
9x12 */
-       { WACOM_VENDOR_ID, 0x23, 100000, 100000, &usbIntuos     }, /* Intuos 
12x12 */
-       { WACOM_VENDOR_ID, 0x24, 100000, 100000, &usbIntuos     }, /* Intuos 
12x18 */
-
-       { WACOM_VENDOR_ID, 0x03,  20000,  20000, &usbCintiqPartner }, /* PTU600 
*/
-
-       { WACOM_VENDOR_ID, 0x30,  20000,  20000, &usbCintiq     }, /* PL400 */
-       { WACOM_VENDOR_ID, 0x31,  20000,  20000, &usbCintiq     }, /* PL500 */
-       { WACOM_VENDOR_ID, 0x32,  20000,  20000, &usbCintiq     }, /* PL600 */
-       { WACOM_VENDOR_ID, 0x33,  20000,  20000, &usbCintiq     }, /* PL600SX */
-       { WACOM_VENDOR_ID, 0x34,  20000,  20000, &usbCintiq     }, /* PL550 */
-       { WACOM_VENDOR_ID, 0x35,  20000,  20000, &usbCintiq     }, /* PL800 */
-       { WACOM_VENDOR_ID, 0x37,  20000,  20000, &usbCintiq     }, /* PL700 */
-       { WACOM_VENDOR_ID, 0x38,  20000,  20000, &usbCintiq     }, /* PL510 */
-       { WACOM_VENDOR_ID, 0x39,  20000,  20000, &usbCintiq     }, /* PL710 */
-       { WACOM_VENDOR_ID, 0x3A,  20000,  20000, &usbCintiq     }, /* DTI520 */
-       { WACOM_VENDOR_ID, 0xC0,  20000,  20000, &usbCintiq     }, /* DTF720 */
-       { WACOM_VENDOR_ID, 0xC2,  20000,  20000, &usbCintiq     }, /* DTF720a */
-       { WACOM_VENDOR_ID, 0xC4,  20000,  20000, &usbCintiq     }, /* DTF521 */
-       { WACOM_VENDOR_ID, 0xC7, 100000, 100000, &usbCintiq     }, /* DTU1931 */
-       { WACOM_VENDOR_ID, 0xCE, 100000, 100000, &usbCintiq     }, /* DTU2231 */
-       { WACOM_VENDOR_ID, 0xF0, 100000, 100000, &usbCintiq     }, /* DTU1631 */
-
-       { WACOM_VENDOR_ID, 0x41, 100000, 100000, &usbIntuos2    }, /* Intuos2 
4x5 */
-       { WACOM_VENDOR_ID, 0x42, 100000, 100000, &usbIntuos2    }, /* Intuos2 
6x8 */
-       { WACOM_VENDOR_ID, 0x43, 100000, 100000, &usbIntuos2    }, /* Intuos2 
9x12 */
-       { WACOM_VENDOR_ID, 0x44, 100000, 100000, &usbIntuos2    }, /* Intuos2 
12x12 */
-       { WACOM_VENDOR_ID, 0x45, 100000, 100000, &usbIntuos2    }, /* Intuos2 
12x18 */
-       { WACOM_VENDOR_ID, 0x47, 100000, 100000, &usbIntuos2    }, /* Intuos2 
6x8  */
-
-       { WACOM_VENDOR_ID, 0x60,  50000,  50000, &usbVolito     }, /* Volito */
-
-       { WACOM_VENDOR_ID, 0x61,  50000,  50000, &usbVolito2    }, /* 
PenStation */
-       { WACOM_VENDOR_ID, 0x62,  50000,  50000, &usbVolito2    }, /* Volito2 
4x5 */
-       { WACOM_VENDOR_ID, 0x63,  50000,  50000, &usbVolito2    }, /* Volito2 
2x3 */
-       { WACOM_VENDOR_ID, 0x64,  50000,  50000, &usbVolito2    }, /* 
PenPartner2 */
-
-       { WACOM_VENDOR_ID, 0x65, 100000, 100000, &usbBamboo     }, /* Bamboo */
-       { WACOM_VENDOR_ID, 0x69,  39842,  39842, &usbBamboo1    }, /* Bamboo1 */
-       { WACOM_VENDOR_ID, 0x6A, 100000, 100000, &usbBamboo1    }, /* Bamboo1 
4x6 */
-       { WACOM_VENDOR_ID, 0x6B, 100000, 100000, &usbBamboo1    }, /* Bamboo1 
5x8 */
-
-       { WACOM_VENDOR_ID, 0xB0, 200000, 200000, &usbIntuos3    }, /* Intuos3 
4x5 */
-       { WACOM_VENDOR_ID, 0xB1, 200000, 200000, &usbIntuos3    }, /* Intuos3 
6x8 */
-       { WACOM_VENDOR_ID, 0xB2, 200000, 200000, &usbIntuos3    }, /* Intuos3 
9x12 */
-       { WACOM_VENDOR_ID, 0xB3, 200000, 200000, &usbIntuos3    }, /* Intuos3 
12x12 */
-       { WACOM_VENDOR_ID, 0xB4, 200000, 200000, &usbIntuos3    }, /* Intuos3 
12x19 */
-       { WACOM_VENDOR_ID, 0xB5, 200000, 200000, &usbIntuos3    }, /* Intuos3 
6x11 */
-       { WACOM_VENDOR_ID, 0xB7, 200000, 200000, &usbIntuos3    }, /* Intuos3 
4x6 */
-
-       { WACOM_VENDOR_ID, 0xB8, 200000, 200000, &usbIntuos4    }, /* Intuos4 
4x6 */
-       { WACOM_VENDOR_ID, 0xB9, 200000, 200000, &usbIntuos4    }, /* Intuos4 
6x9 */
-       { WACOM_VENDOR_ID, 0xBA, 200000, 200000, &usbIntuos4    }, /* Intuos4 
8x13 */
-       { WACOM_VENDOR_ID, 0xBB, 200000, 200000, &usbIntuos4    }, /* Intuos4 
12x19*/
-       { WACOM_VENDOR_ID, 0xBC, 200000, 200000, &usbIntuos4    }, /* Intuos4 
WL USB Endpoint */
-       { WACOM_VENDOR_ID, 0xBD, 200000, 200000, &usbIntuos4    }, /* Intuos4 
WL Bluetooth Endpoint */
-
-       { WACOM_VENDOR_ID, 0x26, 200000, 200000, &usbIntuos5    }, /* Intuos5 
touch S */
-       { WACOM_VENDOR_ID, 0x27, 200000, 200000, &usbIntuos5    }, /* Intuos5 
touch M */
-       { WACOM_VENDOR_ID, 0x28, 200000, 200000, &usbIntuos5    }, /* Intuos5 
touch L */
-       { WACOM_VENDOR_ID, 0x29, 200000, 200000, &usbIntuos5    }, /* Intuos5 S 
*/
-       { WACOM_VENDOR_ID, 0x2A, 200000, 200000, &usbIntuos5    }, /* Intuos5 M 
*/
-
-       { WACOM_VENDOR_ID, 0x3F, 200000, 200000, &usbCintiqV5   }, /* Cintiq 
21UX */
-       { WACOM_VENDOR_ID, 0xC5, 200000, 200000, &usbCintiqV5   }, /* Cintiq 
20WSX */
-       { WACOM_VENDOR_ID, 0xC6, 200000, 200000, &usbCintiqV5   }, /* Cintiq 
12WX */
-       { WACOM_VENDOR_ID, 0xCC, 200000, 200000, &usbCintiqV5   }, /* Cintiq 
21UX2 */
-       { WACOM_VENDOR_ID, 0xF4, 200000, 200000, &usbCintiqV5   }, /* Cintiq 
24HD */
-       { WACOM_VENDOR_ID, 0xFA, 200000, 200000, &usbCintiqV5   }, /* Cintiq 
22HD */
-       { WACOM_VENDOR_ID, 0xF8, 200000, 200000, &usbCintiqV5   }, /* Cintiq 
24HD touch (EMR digitizer) */
-       { WACOM_VENDOR_ID, 0x304,200000, 200000, &usbCintiqV5   }, /* Cintiq 
13HD */
-       { WACOM_VENDOR_ID, 0x57, 200000, 200000, &usbCintiqV5   }, /* DTK2241 */
-       { WACOM_VENDOR_ID, 0x59, 200000, 200000, &usbCintiqV5   }, /* DTH2242 */
-       { WACOM_VENDOR_ID, 0x5B, 200000, 200000, &usbCintiqV5   }, /* Cintiq 
22HDT */
-
-       { WACOM_VENDOR_ID, 0x90, 100000, 100000, &usbTabletPC   }, /* TabletPC 
0x90 */
-       { WACOM_VENDOR_ID, 0x93, 100000, 100000, &usbTabletPC   }, /* TabletPC 
0x93 */
-       { WACOM_VENDOR_ID, 0x97, 100000, 100000, &usbTabletPC   }, /* TabletPC 
0x97 */
-       { WACOM_VENDOR_ID, 0x9A, 100000, 100000, &usbTabletPC   }, /* TabletPC 
0x9A */
-       { WACOM_VENDOR_ID, 0x9F, 100000, 100000, &usbTabletPC   }, /* CapPlus  
0x9F */
-       { WACOM_VENDOR_ID, 0xE2, 100000, 100000, &usbTabletPC   }, /* TabletPC 
0xE2 */
-       { WACOM_VENDOR_ID, 0xE3, 100000, 100000, &usbTabletPC   }, /* TabletPC 
0xE3 */
-       { WACOM_VENDOR_ID, 0xE5, 100000, 100000, &usbTabletPC   }, /* TabletPC 
0xE5 */
-       { WACOM_VENDOR_ID, 0xE6, 100000, 100000, &usbTabletPC   }, /* TabletPC 
0xE6 */
-       { WACOM_VENDOR_ID, 0xEC, 100000, 100000, &usbTabletPC   }, /* TabletPC 
0xEC */
-       { WACOM_VENDOR_ID, 0xED, 100000, 100000, &usbTabletPC   }, /* TabletPC 
0xED */
-       { WACOM_VENDOR_ID, 0xEF, 100000, 100000, &usbTabletPC   }, /* TabletPC 
0xEF */
-       { WACOM_VENDOR_ID, 0x100,100000, 100000, &usbTabletPC   }, /* TabletPC 
0x100 */
-       { WACOM_VENDOR_ID, 0x101,100000, 100000, &usbTabletPC   }, /* TabletPC 
0x101 */
-       { WACOM_VENDOR_ID, 0x10D,100000, 100000, &usbTabletPC   }, /* TabletPC 
0x10D */
-       { WACOM_VENDOR_ID, 0x4001,100000, 100000, &usbTabletPC   }, /* TabletPC 
0x4001 */
+       { WACOM_VENDOR_ID, 0x00,  39370,  39370, &usbPenPartner, "PenPartner"   
        },
+       { WACOM_VENDOR_ID, 0x10,  80000,  80000, &usbGraphire,   "Graphire"     
        },
+       { WACOM_VENDOR_ID, 0x11,  80000,  80000, &usbGraphire2,  "Graphire2 
4x5"        },
+       { WACOM_VENDOR_ID, 0x12,  80000,  80000, &usbGraphire2,  "Graphire2 
5x7"        },
+       { WACOM_VENDOR_ID, 0x13,  80000,  80000, &usbGraphire3,  "Graphire3 
4x5"        },
+       { WACOM_VENDOR_ID, 0x14,  80000,  80000, &usbGraphire3,  "Graphire3 
6x8"        },
+       { WACOM_VENDOR_ID, 0x15,  80000,  80000, &usbGraphire4,  "Graphire4 
4x5"        },
+       { WACOM_VENDOR_ID, 0x16,  80000,  80000, &usbGraphire4,  "Graphire4 
6x8"        },
+       { WACOM_VENDOR_ID, 0x17, 100000, 100000, &usbBambooFun,  "BambooFun 
4x5"        },
+       { WACOM_VENDOR_ID, 0x18, 100000, 100000, &usbBambooFun,  "BambooFun 
6x8"        },
+       { WACOM_VENDOR_ID, 0x19,  80000,  80000, &usbBamboo1,    "Bamboo1 
Medium"       },
+       { WACOM_VENDOR_ID, 0x81,  80000,  80000, &usbGraphire4,  "Graphire4 6x8 
BlueTooth" },
+
+       { WACOM_VENDOR_ID, 0xD1, 100000, 100000, &usbBamboo,     "CTL-460"      
        },
+       { WACOM_VENDOR_ID, 0xD4, 100000, 100000, &usbBamboo,     "CTH-461"      
        },
+       { WACOM_VENDOR_ID, 0xD3, 100000, 100000, &usbBamboo,     "CTL-660"      
        },
+       { WACOM_VENDOR_ID, 0xD2, 100000, 100000, &usbBamboo,     "CTL-461/S"    
        },
+       { WACOM_VENDOR_ID, 0xD0, 100000, 100000, &usbBamboo,     "Bamboo Touch" 
        },
+       { WACOM_VENDOR_ID, 0xD6, 100000, 100000, &usbBamboo,     "CTH-460/K"    
        },
+       { WACOM_VENDOR_ID, 0xD7, 100000, 100000, &usbBamboo,     "CTH-461/S"    
        },
+       { WACOM_VENDOR_ID, 0xD8, 100000, 100000, &usbBamboo,     "CTH-661/S1"   
        },
+       { WACOM_VENDOR_ID, 0xDA, 100000, 100000, &usbBamboo,     "CTH-461/L"    
        },
+       { WACOM_VENDOR_ID, 0xDB, 100000, 100000, &usbBamboo,     "CTH-661/L"    
        },
+
+       { WACOM_VENDOR_ID, 0x20, 100000, 100000, &usbIntuos,     "Intuos 4x5"   
        },
+       { WACOM_VENDOR_ID, 0x21, 100000, 100000, &usbIntuos,     "Intuos 6x8"   
        },
+       { WACOM_VENDOR_ID, 0x22, 100000, 100000, &usbIntuos,     "Intuos 9x12"  
        },
+       { WACOM_VENDOR_ID, 0x23, 100000, 100000, &usbIntuos,     "Intuos 12x12" 
        },
+       { WACOM_VENDOR_ID, 0x24, 100000, 100000, &usbIntuos,     "Intuos 12x18" 
        },
+
+       { WACOM_VENDOR_ID, 0x03,  20000,  20000, &usbCintiqPartner, "PTU600"    
        },
+
+       { WACOM_VENDOR_ID, 0x30,  20000,  20000, &usbCintiq,     "PL400"        
        },
+       { WACOM_VENDOR_ID, 0x31,  20000,  20000, &usbCintiq,     "PL500"        
        },
+       { WACOM_VENDOR_ID, 0x32,  20000,  20000, &usbCintiq,     "PL600"        
        },
+       { WACOM_VENDOR_ID, 0x33,  20000,  20000, &usbCintiq,     "PL600SX"      
        },
+       { WACOM_VENDOR_ID, 0x34,  20000,  20000, &usbCintiq,     "PL550"        
        },
+       { WACOM_VENDOR_ID, 0x35,  20000,  20000, &usbCintiq,     "PL800"        
        },
+       { WACOM_VENDOR_ID, 0x37,  20000,  20000, &usbCintiq,     "PL700"        
        },
+       { WACOM_VENDOR_ID, 0x38,  20000,  20000, &usbCintiq,     "PL510"        
        },
+       { WACOM_VENDOR_ID, 0x39,  20000,  20000, &usbCintiq,     "PL710"        
        },
+       { WACOM_VENDOR_ID, 0x3A,  20000,  20000, &usbCintiq,     "DTI520"       
        },
+       { WACOM_VENDOR_ID, 0xC0,  20000,  20000, &usbCintiq,     "DTF720"       
        },
+       { WACOM_VENDOR_ID, 0xC2,  20000,  20000, &usbCintiq,     "DTF720a"      
        },
+       { WACOM_VENDOR_ID, 0xC4,  20000,  20000, &usbCintiq,     "DTF521"       
        },
+       { WACOM_VENDOR_ID, 0xC7, 100000, 100000, &usbCintiq,     "DTU1931"      
        },
+       { WACOM_VENDOR_ID, 0xCE, 100000, 100000, &usbCintiq,     "DTU2231"      
        },
+       { WACOM_VENDOR_ID, 0xF0, 100000, 100000, &usbCintiq,     "DTU1631"      
        },
+
+       { WACOM_VENDOR_ID, 0x41, 100000, 100000, &usbIntuos2,    "Intuos2 4x5"  
        },
+       { WACOM_VENDOR_ID, 0x42, 100000, 100000, &usbIntuos2,    "Intuos2 6x8"  
        },
+       { WACOM_VENDOR_ID, 0x43, 100000, 100000, &usbIntuos2,    "Intuos2 9x12" 
        },
+       { WACOM_VENDOR_ID, 0x44, 100000, 100000, &usbIntuos2,    "Intuos2 
12x12"        },
+       { WACOM_VENDOR_ID, 0x45, 100000, 100000, &usbIntuos2,    "Intuos2 
12x18"        },
+       { WACOM_VENDOR_ID, 0x47, 100000, 100000, &usbIntuos2,    "Intuos2 6x8 " 
        },
+
+       { WACOM_VENDOR_ID, 0x60,  50000,  50000, &usbVolito,     "Volito"       
        },
+
+       { WACOM_VENDOR_ID, 0x61,  50000,  50000, &usbVolito2,    "PenStation"   
        },
+       { WACOM_VENDOR_ID, 0x62,  50000,  50000, &usbVolito2,    "Volito2 4x5"  
        },
+       { WACOM_VENDOR_ID, 0x63,  50000,  50000, &usbVolito2,    "Volito2 2x3"  
        },
+       { WACOM_VENDOR_ID, 0x64,  50000,  50000, &usbVolito2,    "PenPartner2"  
        },
+
+       { WACOM_VENDOR_ID, 0x65, 100000, 100000, &usbBamboo,     "Bamboo"       
        },
+       { WACOM_VENDOR_ID, 0x69,  39842,  39842, &usbBamboo1,    "Bamboo1"      
        },
+       { WACOM_VENDOR_ID, 0x6A, 100000, 100000, &usbBamboo1,    "Bamboo1 4x6"  
        },
+       { WACOM_VENDOR_ID, 0x6B, 100000, 100000, &usbBamboo1,    "Bamboo1 5x8"  
        },
+
+       { WACOM_VENDOR_ID, 0xB0, 200000, 200000, &usbIntuos3,    "Intuos3 4x5"  
        },
+       { WACOM_VENDOR_ID, 0xB1, 200000, 200000, &usbIntuos3,    "Intuos3 6x8"  
        },
+       { WACOM_VENDOR_ID, 0xB2, 200000, 200000, &usbIntuos3,    "Intuos3 9x12" 
        },
+       { WACOM_VENDOR_ID, 0xB3, 200000, 200000, &usbIntuos3,    "Intuos3 
12x12"        },
+       { WACOM_VENDOR_ID, 0xB4, 200000, 200000, &usbIntuos3,    "Intuos3 
12x19"        },
+       { WACOM_VENDOR_ID, 0xB5, 200000, 200000, &usbIntuos3,    "Intuos3 6x11" 
        },
+       { WACOM_VENDOR_ID, 0xB7, 200000, 200000, &usbIntuos3,    "Intuos3 4x6"  
        },
+
+       { WACOM_VENDOR_ID, 0xB8, 200000, 200000, &usbIntuos4,    "Intuos4 4x6"  
        },
+       { WACOM_VENDOR_ID, 0xB9, 200000, 200000, &usbIntuos4,    "Intuos4 6x9"  
        },
+       { WACOM_VENDOR_ID, 0xBA, 200000, 200000, &usbIntuos4,    "Intuos4 8x13" 
        },
+       { WACOM_VENDOR_ID, 0xBB, 200000, 200000, &usbIntuos4,    "Intuos4 
12x19"        },
+       { WACOM_VENDOR_ID, 0xBC, 200000, 200000, &usbIntuos4,    "Intuos4 WL 
USB Endpoint"      },
+       { WACOM_VENDOR_ID, 0xBD, 200000, 200000, &usbIntuos4,    "Intuos4 WL 
Bluetooth Endpoint"},
+
+       { WACOM_VENDOR_ID, 0x26, 200000, 200000, &usbIntuos5,    "Intuos5 touch 
S"      },
+       { WACOM_VENDOR_ID, 0x27, 200000, 200000, &usbIntuos5,    "Intuos5 touch 
M"      },
+       { WACOM_VENDOR_ID, 0x28, 200000, 200000, &usbIntuos5,    "Intuos5 touch 
L"      },
+       { WACOM_VENDOR_ID, 0x29, 200000, 200000, &usbIntuos5,    "Intuos5 S"    
        },
+       { WACOM_VENDOR_ID, 0x2A, 200000, 200000, &usbIntuos5,    "Intuos5 M"    
        },
+       { WACOM_VENDOR_ID, 0x314,200000, 200000, &usbIntuosPro,  "Intuos Pro S" 
        },
+       { WACOM_VENDOR_ID, 0x315,200000, 200000, &usbIntuosPro,  "Intuos Pro M" 
        },
+       { WACOM_VENDOR_ID, 0x317,200000, 200000, &usbIntuosPro,  "Intuos Pro L" 
        },
+
+       { WACOM_VENDOR_ID, 0x3F, 200000, 200000, &usbCintiqV5,   "Cintiq 21UX"  
        },
+       { WACOM_VENDOR_ID, 0xC5, 200000, 200000, &usbCintiqV5,   "Cintiq 20WSX" 
        },
+       { WACOM_VENDOR_ID, 0xC6, 200000, 200000, &usbCintiqV5,   "Cintiq 12WX"  
        },
+       { WACOM_VENDOR_ID, 0xCC, 200000, 200000, &usbCintiqV5,   "Cintiq 21UX2" 
        },
+       { WACOM_VENDOR_ID, 0xF4, 200000, 200000, &usbCintiqV5,   "Cintiq 24HD"  
        },
+       { WACOM_VENDOR_ID, 0xFA, 200000, 200000, &usbCintiqV5,   "Cintiq 22HD"  
        },
+       { WACOM_VENDOR_ID, 0xF8, 200000, 200000, &usbCintiqV5,   "Cintiq 24HD 
touch (EMR digitizer)" },
+       { WACOM_VENDOR_ID, 0x304,200000, 200000, &usbCintiqV5,   "Cintiq 13HD"  
        },
+       { WACOM_VENDOR_ID, 0x57, 200000, 200000, &usbCintiqV5,   "DTK2241"      
        },
+       { WACOM_VENDOR_ID, 0x59, 200000, 200000, &usbCintiqV5,   "DTH2242"      
        },
+       { WACOM_VENDOR_ID, 0x5B, 200000, 200000, &usbCintiqV5,   "Cintiq 22HDT" 
        },
+
+       { WACOM_VENDOR_ID, 0x90, 100000, 100000, &usbTabletPC,   "TabletPC 
0x90"        },
+       { WACOM_VENDOR_ID, 0x93, 100000, 100000, &usbTabletPC,   "TabletPC 
0x93"        },
+       { WACOM_VENDOR_ID, 0x97, 100000, 100000, &usbTabletPC,   "TabletPC 
0x97"        },
+       { WACOM_VENDOR_ID, 0x9A, 100000, 100000, &usbTabletPC,   "TabletPC 
0x9A"        },
+       { WACOM_VENDOR_ID, 0x9F, 100000, 100000, &usbTabletPC,   "CapPlus  
0x9F"        },
+       { WACOM_VENDOR_ID, 0xE2, 100000, 100000, &usbTabletPC,   "TabletPC 
0xE2"        },
+       { WACOM_VENDOR_ID, 0xE3, 100000, 100000, &usbTabletPC,   "TabletPC 
0xE3"        },
+       { WACOM_VENDOR_ID, 0xE5, 100000, 100000, &usbTabletPC,   "TabletPC 
0xE5"        },
+       { WACOM_VENDOR_ID, 0xE6, 100000, 100000, &usbTabletPC,   "TabletPC 
0xE6"        },
+       { WACOM_VENDOR_ID, 0xEC, 100000, 100000, &usbTabletPC,   "TabletPC 
0xEC"        },
+       { WACOM_VENDOR_ID, 0xED, 100000, 100000, &usbTabletPC,   "TabletPC 
0xED"        },
+       { WACOM_VENDOR_ID, 0xEF, 100000, 100000, &usbTabletPC,   "TabletPC 
0xEF"        },
+       { WACOM_VENDOR_ID, 0x100,100000, 100000, &usbTabletPC,   "TabletPC 
0x100"       },
+       { WACOM_VENDOR_ID, 0x101,100000, 100000, &usbTabletPC,   "TabletPC 
0x101"       },
+       { WACOM_VENDOR_ID, 0x10D,100000, 100000, &usbTabletPC,   "TabletPC 
0x10D"       },
+       { WACOM_VENDOR_ID, 0x4001,100000, 100000, &usbTabletPC,  "TabletPC 
0x4001"      },
 
        /* IDs from Waltop's driver, available 
http://www.waltop.com.tw/download.asp?lv=0&id=2.
           Accessed 8 Apr 2010, driver release date 2009/08/11, fork of 
linuxwacom 0.8.4.
           Some more info would be nice for the ID's below... */
-       { WALTOP_VENDOR_ID, 0x24,  80000,  80000, &usbGraphire   },
-       { WALTOP_VENDOR_ID, 0x25,  80000,  80000, &usbGraphire2  },
-       { WALTOP_VENDOR_ID, 0x26,  80000,  80000, &usbGraphire2  },
-       { WALTOP_VENDOR_ID, 0x27,  80000,  80000, &usbGraphire3  },
-       { WALTOP_VENDOR_ID, 0x28,  80000,  80000, &usbGraphire3  },
-       { WALTOP_VENDOR_ID, 0x30,  80000,  80000, &usbGraphire4  },
-       { WALTOP_VENDOR_ID, 0x31,  80000,  80000, &usbGraphire4  },
-       { WALTOP_VENDOR_ID, 0x32, 100000, 100000, &usbBambooFun  },
-       { WALTOP_VENDOR_ID, 0x33, 100000, 100000, &usbBambooFun  },
-       { WALTOP_VENDOR_ID, 0x34,  80000,  80000, &usbBamboo1    },
-       { WALTOP_VENDOR_ID, 0x35,  80000,  80000, &usbGraphire4  },
-       { WALTOP_VENDOR_ID, 0x36,  80000,  80000, &usbGraphire4  },
-       { WALTOP_VENDOR_ID, 0x37,  80000,  80000, &usbGraphire4  },
-       { WALTOP_VENDOR_ID, 0x38, 100000, 100000, &usbBambooFun  },
-       { WALTOP_VENDOR_ID, 0x39, 100000, 100000, &usbBambooFun  },
-       { WALTOP_VENDOR_ID, 0x51, 100000, 100000, &usbBamboo     },
-       { WALTOP_VENDOR_ID, 0x52, 100000, 100000, &usbBamboo     },
-
-       { WALTOP_VENDOR_ID, 0x53,  100000, 100000, &usbBamboo    },
-       { WALTOP_VENDOR_ID, 0x54,  100000, 100000, &usbBamboo    },
-       { WALTOP_VENDOR_ID, 0x55,  100000, 100000, &usbBamboo    },
-       { WALTOP_VENDOR_ID, 0x56,  100000, 100000, &usbBamboo    },
-       { WALTOP_VENDOR_ID, 0x57,  100000, 100000, &usbBamboo    },
-       { WALTOP_VENDOR_ID, 0x58,  100000, 100000, &usbBamboo    },
-       { WALTOP_VENDOR_ID, 0x500, 100000, 100000, &usbBamboo    },
-       { WALTOP_VENDOR_ID, 0x501, 100000, 100000, &usbBamboo    },
-       { WALTOP_VENDOR_ID, 0x502, 200000, 200000, &usbIntuos4   },
-       { WALTOP_VENDOR_ID, 0x503, 200000, 200000, &usbIntuos4   },
+       { WALTOP_VENDOR_ID, 0x24,  80000,  80000, &usbGraphire,   NULL          
        },
+       { WALTOP_VENDOR_ID, 0x25,  80000,  80000, &usbGraphire2,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x26,  80000,  80000, &usbGraphire2,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x27,  80000,  80000, &usbGraphire3,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x28,  80000,  80000, &usbGraphire3,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x30,  80000,  80000, &usbGraphire4,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x31,  80000,  80000, &usbGraphire4,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x32, 100000, 100000, &usbBambooFun,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x33, 100000, 100000, &usbBambooFun,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x34,  80000,  80000, &usbBamboo1,    NULL          
        },
+       { WALTOP_VENDOR_ID, 0x35,  80000,  80000, &usbGraphire4,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x36,  80000,  80000, &usbGraphire4,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x37,  80000,  80000, &usbGraphire4,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x38, 100000, 100000, &usbBambooFun,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x39, 100000, 100000, &usbBambooFun,  NULL          
        },
+       { WALTOP_VENDOR_ID, 0x51, 100000, 100000, &usbBamboo,     NULL          
        },
+       { WALTOP_VENDOR_ID, 0x52, 100000, 100000, &usbBamboo,     NULL          
        },
+
+       { WALTOP_VENDOR_ID, 0x53,  100000, 100000, &usbBamboo,    NULL          
        },
+       { WALTOP_VENDOR_ID, 0x54,  100000, 100000, &usbBamboo,    NULL          
        },
+       { WALTOP_VENDOR_ID, 0x55,  100000, 100000, &usbBamboo,    NULL          
        },
+       { WALTOP_VENDOR_ID, 0x56,  100000, 100000, &usbBamboo,    NULL          
        },
+       { WALTOP_VENDOR_ID, 0x57,  100000, 100000, &usbBamboo,    NULL          
        },
+       { WALTOP_VENDOR_ID, 0x58,  100000, 100000, &usbBamboo,    NULL          
        },
+       { WALTOP_VENDOR_ID, 0x500, 100000, 100000, &usbBamboo,    NULL          
        },
+       { WALTOP_VENDOR_ID, 0x501, 100000, 100000, &usbBamboo,    NULL          
        },
+       { WALTOP_VENDOR_ID, 0x502, 200000, 200000, &usbIntuos4,   NULL          
        },
+       { WALTOP_VENDOR_ID, 0x503, 200000, 200000, &usbIntuos4,   NULL          
        },
 
        /* N-Trig devices */
-       { NTRIG_VENDOR_ID,  0x01, 44173, 36772, &usbTabletPC    },
+       { NTRIG_VENDOR_ID,  0x01, 44173, 36772, &usbTabletPC,     NULL          
        },
 
        /* Add in Lenovo W700 Palmrest digitizer */
-       { LENOVO_VENDOR_ID, 0x6004, 100000, 100000, &usbTabletPC } /* Pen-only 
*/
+       { LENOVO_VENDOR_ID, 0x6004, 100000, 100000, &usbTabletPC, NULL          
        } /* Pen-only */
 };
 
+void usbListModels(void)
+{
+       int i;
+       char *usbnames[ARRAY_SIZE(WacomModelDesc)] = {0};
+       SymTabRec models[ARRAY_SIZE(WacomModelDesc) + 1];
+
+       for (i = 0; i < ARRAY_SIZE(WacomModelDesc); i++)
+       {
+               struct WacomModelDesc *m = &WacomModelDesc[i];
+
+               models[i].token = i;
+               if (m->name)
+                       models[i].name = m->name;
+               else {
+                       /* SymTabRec has a const char *name so we can't free
+                          without compiler warnings. keep allocated stuff
+                          in separate array.
+                        */
+                       usbnames[i] = malloc(64);
+                       if (!usbnames[i]) {
+                               /* if malloc fails, xf86PrintChipsets() 
terminates
+                                  here because models->name is NULL. then 
again,
+                                  malloc failed, so the rest is academic. */
+                               models[i].name = NULL;
+                               break;
+                       }
+                       sprintf(usbnames[i], "usb:%04x:%04x", m->vendor_id, 
m->model_id);
+                       models[i].name = usbnames[i];
+               }
+       }
+
+       models[ARRAY_SIZE(models) - 1].name = NULL;
+
+       xf86PrintChipsets("wacom",
+                         "Driver for Wacom graphics tablets",
+                         models);
+
+       for (i = 0; i < ARRAY_SIZE(usbnames); i++)
+               free(usbnames[i]);
+}
+
+
 static Bool usbWcmInit(InputInfoPtr pInfo, char* id, float *version)
 {
        int i;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-input-wacom-0.22.1/src/wcmValidateDevice.c 
new/xf86-input-wacom-0.23.0/src/wcmValidateDevice.c
--- old/xf86-input-wacom-0.22.1/src/wcmValidateDevice.c 2013-07-15 
19:01:59.000000000 +0200
+++ new/xf86-input-wacom-0.23.0/src/wcmValidateDevice.c 2013-09-20 
01:12:33.000000000 +0200
@@ -202,6 +202,9 @@
                        TabletSetFeature(priv->common, WCM_DUALRING | WCM_LCD);
                        /* fall through */
 
+               case 0x314: /* Intuos Pro S */
+               case 0x315: /* Intuos Pro M */
+               case 0x317: /* Intuos Pro L */
                case 0x26:  /* I5 */
                case 0x27:  /* I5 */
                case 0x28:  /* I5 */
@@ -345,8 +348,8 @@
        InputOption *new;
 
        new = calloc(1, sizeof(InputOption));
-       new->key = key;
-       new->value = value;
+       new->key = strdup(key);
+       new->value = strdup(value);
        new->next = list;
        return new;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-input-wacom-0.22.1/src/xf86Wacom.h 
new/xf86-input-wacom-0.23.0/src/xf86Wacom.h
--- old/xf86-input-wacom-0.22.1/src/xf86Wacom.h 2013-07-15 19:01:59.000000000 
+0200
+++ new/xf86-input-wacom-0.23.0/src/xf86Wacom.h 2013-09-20 02:05:07.000000000 
+0200
@@ -182,6 +182,7 @@
 extern WacomCommonPtr wcmRefCommon(WacomCommonPtr common);
 extern void wcmFreeCommon(WacomCommonPtr *common);
 extern WacomCommonPtr wcmNewCommon(void);
+extern void usbListModels(void);
 
 enum WacomSuppressMode {
        SUPPRESS_NONE = 8,      /* Process event normally */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xf86-input-wacom-0.22.1/tools/xsetwacom.c 
new/xf86-input-wacom-0.23.0/tools/xsetwacom.c
--- old/xf86-input-wacom-0.22.1/tools/xsetwacom.c       2013-07-15 
19:01:59.000000000 +0200
+++ new/xf86-input-wacom-0.23.0/tools/xsetwacom.c       2013-09-20 
01:13:08.000000000 +0200
@@ -921,16 +921,16 @@
        return (m->name != NULL);
 }
 
-static int special_map_keystrokes(Display *dpy, int argc, char **argv, 
unsigned long *ndata, unsigned long* data);
-static int special_map_button(Display *dpy, int argc, char **argv, unsigned 
long *ndata, unsigned long* data);
-static int special_map_core(Display *dpy, int argc, char **argv, unsigned long 
*ndata, unsigned long *data);
-static int special_map_modetoggle(Display *dpy, int argc, char **argv, 
unsigned long *ndata, unsigned long *data);
-static int special_map_displaytoggle(Display *dpy, int argc, char **argv, 
unsigned long *ndata, unsigned long *data);
+static int special_map_keystrokes(Display *dpy, int argc, char **argv, 
unsigned long *ndata, unsigned long* data, const size_t size);
+static int special_map_button(Display *dpy, int argc, char **argv, unsigned 
long *ndata, unsigned long* data, const size_t size);
+static int special_map_core(Display *dpy, int argc, char **argv, unsigned long 
*ndata, unsigned long *data, const size_t size);
+static int special_map_modetoggle(Display *dpy, int argc, char **argv, 
unsigned long *ndata, unsigned long *data, const size_t size);
+static int special_map_displaytoggle(Display *dpy, int argc, char **argv, 
unsigned long *ndata, unsigned long *data, const size_t size);
 
 /* Valid keywords for the --set ButtonX options */
 struct keywords {
        const char *keyword;
-       int (*func)(Display*, int, char **, unsigned long*, unsigned long *);
+       int (*func)(Display*, int, char **, unsigned long*, unsigned long *, 
const size_t size);
 } keywords[] = {
        {"key", special_map_keystrokes},
        {"button", special_map_button},
@@ -942,7 +942,7 @@
 
 /* the "core" keyword isn't supported anymore, we just have this here to
    tell people that. */
-static int special_map_core(Display *dpy, int argc, char **argv, unsigned long 
*ndata, unsigned long *data)
+static int special_map_core(Display *dpy, int argc, char **argv, unsigned long 
*ndata, unsigned long *data, const size_t size)
 {
        static int once_only = 1;
        if (once_only)
@@ -954,8 +954,12 @@
        return 0;
 }
 
-static int special_map_modetoggle(Display *dpy, int argc, char **argv, 
unsigned long *ndata, unsigned long *data)
+static int special_map_modetoggle(Display *dpy, int argc, char **argv, 
unsigned long *ndata, unsigned long *data, const size_t size)
 {
+       if (*ndata + 1 > size) {
+               fprintf(stderr, "Insufficient space to store all commands.\n");
+               return 0;
+       }
        data[*ndata] = AC_MODETOGGLE;
 
        *ndata += 1;
@@ -963,8 +967,12 @@
        return 0;
 }
 
-static int special_map_displaytoggle(Display *dpy, int argc, char **argv, 
unsigned long *ndata, unsigned long *data)
+static int special_map_displaytoggle(Display *dpy, int argc, char **argv, 
unsigned long *ndata, unsigned long *data, const size_t size)
 {
+       if (*ndata + 1 > size) {
+               fprintf(stderr, "Insufficient space to store all commands.\n");
+               return 0;
+       }
        data[*ndata] = AC_DISPLAYTOGGLE;
 
        *ndata += 1;
@@ -985,7 +993,7 @@
        return 0;
 }
 
-static int special_map_button(Display *dpy, int argc, char **argv, unsigned 
long *ndata, unsigned long *data)
+static int special_map_button(Display *dpy, int argc, char **argv, unsigned 
long *ndata, unsigned long *data, const size_t size)
 {
        int nitems = 0;
        int i;
@@ -1013,13 +1021,22 @@
                        need_press = need_release = 1;
 
                if (sscanf(btn, "%d", &button) != 1)
-                       return nitems;
+                       break;
 
 
                TRACE("Button map %d [%s,%s]\n", abs(button),
                                need_press ?  "press" : "",
                                need_release ?  "release" : "");
 
+               if (need_press && need_release && *ndata + nitems + 2 > size) {
+                       fprintf(stderr, "Insufficient space to store all 
commands.\n");
+                       break;
+               }
+               else if ((need_press || need_release) && *ndata + nitems + 1 > 
size) {
+                       fprintf(stderr, "Insufficient space to store all 
commands.\n");
+                       break;
+               }
+
                if (need_press)
                        data[*ndata + nitems++] = AC_BUTTON | AC_KEYBTNPRESS | 
abs(button);
                if (need_release)
@@ -1027,7 +1044,7 @@
        }
 
        *ndata += nitems;
-       return nitems;
+       return i;
 }
 
 /* Return the first keycode to have the required keysym in the current group.
@@ -1064,7 +1081,7 @@
    Map gibberish like "ctrl alt f2" into the matching AC_KEY values.
    Returns 1 on success or 0 otherwise.
  */
-static int special_map_keystrokes(Display *dpy, int argc, char **argv, 
unsigned long *ndata, unsigned long* data)
+static int special_map_keystrokes(Display *dpy, int argc, char **argv, 
unsigned long *ndata, unsigned long* data, const size_t size)
 {
        int i;
        int nitems = 0;
@@ -1123,6 +1140,15 @@
 
                kc = keysym_to_keycode(dpy, ks);
 
+               if (need_press && need_release && *ndata + nitems + 2 > size) {
+                       fprintf(stderr, "Insufficient space to store all 
commands.\n");
+                       break;
+               }
+               else if ((need_press || need_release) && *ndata + nitems + 1 > 
size) {
+                       fprintf(stderr, "Insufficient space to store all 
commands.\n");
+                       break;
+               }
+
                if (need_press)
                        data[*ndata + nitems++] = AC_KEY | AC_KEYBTNPRESS | kc;
                if (need_release)
@@ -1193,7 +1219,7 @@
  * @param data  Parsed action data
  * @return 'true' if the whole string was parsed sucessfully, else 'false'
  */
-static Bool parse_actions(Display *dpy, int argc, char **argv, unsigned long* 
data, unsigned long *nitems)
+static Bool parse_actions(Display *dpy, int argc, char **argv, unsigned long* 
data, unsigned long *nitems, const size_t size)
 {
        int  i = 0;
        int  nwords = 0;
@@ -1219,19 +1245,19 @@
                nwords = 2;
        }
 
-       for (i = 0; i < nwords; i++)
+       for (i = 0; i < nwords && *nitems < size; i++)
        {
                int j = 0;
                int keyword_found = 0;
 
-               while (keywords[j].keyword && i < nwords)
+               while (keywords[j].keyword && i < nwords && *nitems < size)
                {
                        int parsed = 0;
                        if (strcasecmp(words[i], keywords[j].keyword) == 0)
                        {
                                parsed = keywords[j].func(dpy, nwords - i - 1,
                                                          &words[i + 1],
-                                                         nitems, data);
+                                                         nitems, data, size);
                                i += parsed;
                                keyword_found = 1;
                        }
@@ -1281,7 +1307,7 @@
        unsigned long nitems = 0;
 
        data = calloc(256, sizeof(long));
-       if (!parse_actions(dpy, argc, argv, data, &nitems))
+       if (!parse_actions(dpy, argc, argv, data, &nitems, 256))
                goto out;
 
        /* obtain the button actions Atom */

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to