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

libxi: Changes to 'debian-unstable'



Rebased ref, commits from common ancestor:
commit 72f8a74868d7fa1dbadb5c264741ecf3148070c8
Author: Julien Cristau <jcristau@debian.org>
Date:   Thu Apr 19 23:38:41 2012 +0200

    Don't require (fake)root for debian/rules clean.

diff --git a/debian/changelog b/debian/changelog
index 547779b..f37a210 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+libxi (2:1.6.0-2) UNRELEASED; urgency=low
+
+  * Don't require (fake)root for debian/rules clean.
+
+ -- Julien Cristau <jcristau@debian.org>  Thu, 19 Apr 2012 23:38:32 +0200
+
 libxi (2:1.6.0-1) unstable; urgency=low
 
   [ Chase Douglas ]
diff --git a/debian/rules b/debian/rules
index 5d18886..724042e 100755
--- a/debian/rules
+++ b/debian/rules
@@ -60,18 +60,15 @@ build-stamp: build/config.status
 
 clean: xsfclean
 	dh_testdir
-	dh_testroot
 	rm -f build-stamp
-
 	rm -f config.cache config.log config.status
 	rm -f */config.cache */config.log */config.status
 	rm -f conftest* */conftest*
 	rm -rf autom4te.cache */autom4te.cache
 	rm -rf build
-	rm -f $$(find -name Makefile.in)
+	find -name Makefile.in -delete
 	rm -f INSTALL compile config.guess config.sub configure config.h.in
 	rm -f depcomp install-sh ltmain.sh missing aclocal.m4 mkinstalldirs
-
 	dh_clean
 
 install: build

commit 6aa6934673aaddb13604214ead5a5c7f4001361c
Author: Julien Cristau <jcristau@debian.org>
Date:   Thu Apr 19 20:40:22 2012 +0200

    Upload to unstable

diff --git a/debian/changelog b/debian/changelog
index 6b4853d..547779b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-libxi (2:1.6.0-1) UNRELEASED; urgency=low
+libxi (2:1.6.0-1) unstable; urgency=low
 
   [ Chase Douglas ]
   * New upstream release
@@ -12,8 +12,9 @@ libxi (2:1.6.0-1) UNRELEASED; urgency=low
       patch for bug#636920)
     - Move version comparison into a helper function
     - Set the RawEvent sourceid (#34240)
+  * Upload to unstable.
 
- -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 30 Mar 2012 17:54:20 -0700
+ -- Julien Cristau <jcristau@debian.org>  Mon, 16 Apr 2012 19:32:32 +0200
 
 libxi (2:1.5.99.2-1) experimental; urgency=low
 

commit f2f59519315d988f6ef9fe4fc8f2d82e844acc25
Author: Julien Cristau <jcristau@debian.org>
Date:   Mon Apr 16 19:30:39 2012 +0200

    Bump changelogs

diff --git a/ChangeLog b/ChangeLog
index 2d34b6a..9de2548 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,49 @@
+commit 2ac185d2fd2b884f4f59a7f7f61f414d139859aa
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Mar 26 09:07:34 2012 +1000
+
+    Set the RawEvent sourceid (#34240)
+    
+    XI 2.2 and later include the sourceid in raw events.
+    
+    X.Org Bug 34240 <http://bugs.freedesktop.org/show_bug.cgi?id=34240>
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit dfc101e4c6cdac4ff9a51732b2754287fbdc8582
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Mar 26 09:05:24 2012 +1000
+
+    Move version comparison into a helper function.
+    
+    No functional changes, this simply introduces a version helper function that
+    returns -1, 0 or 1 depending on the version comparison result. To be used
+    internally only.
+    
+    Needed for fix to #34240
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 8436c920953f288aea2d6d5f370f8eaaaef82d97
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Mar 15 11:51:41 2012 +1000
+
+    Fix wrong button label and mask copy on OS X
+    
+    Regression introduced in c1a5a70b51f12dedf354102217c7cd4247ed3a4b.
+    
+    If double-padding is applied, the length of the mask on the wire may be
+    smaller than libXi's mask_len. When copying, only the wire length must be
+    copied, with the remainder set to 0.
+    When advancing to the button labels, the wire length matters, not libXi's
+    internal length.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Tested-by: Jeremy Huddleston <jeremyhu@apple.com>
+
 commit 70b730b0548ca9e408f14f2576b972beb32a0ad0
 Author: Peter Hutterer <peter.hutterer@who-t.net>
 Date:   Thu Mar 8 16:03:50 2012 +1000
diff --git a/debian/changelog b/debian/changelog
index 31698c2..6b4853d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,9 +1,18 @@
 libxi (2:1.6.0-1) UNRELEASED; urgency=low
 
+  [ Chase Douglas ]
   * New upstream release
+    - Fix bus error on MIPS N32 (closes: #636920)
   * Bump build deps on x11proto-input-dev
   * Bump lintian standards version to 3.9.3
 
+  [ Julien Cristau ]
+  * Pull some more changes from upstream master:
+    - Fix wrong button label and mask copy on OS X (fixes regression in the
+      patch for bug#636920)
+    - Move version comparison into a helper function
+    - Set the RawEvent sourceid (#34240)
+
  -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 30 Mar 2012 17:54:20 -0700
 
 libxi (2:1.5.99.2-1) experimental; urgency=low

commit a67812efa86bb3f2594f966a95d3d354e8a3d8ce
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Fri Mar 30 17:54:54 2012 -0700

    Remove scroll increment patch, merged upstream

diff --git a/debian/changelog b/debian/changelog
index 1388991..31698c2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,11 +2,9 @@ libxi (2:1.6.0-1) UNRELEASED; urgency=low
 
   * New upstream release
   * Bump build deps on x11proto-input-dev
-  * Fix scroll valuator increment value on 32-bit machines
-    - Added 0001_scroll_increment_value.patch
   * Bump lintian standards version to 3.9.3
 
- -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 30 Mar 2012 17:51:18 -0700
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 30 Mar 2012 17:54:20 -0700
 
 libxi (2:1.5.99.2-1) experimental; urgency=low
 
diff --git a/debian/patches/0001_scroll_increment_value.patch b/debian/patches/0001_scroll_increment_value.patch
deleted file mode 100644
index 4c12f18..0000000
--- a/debian/patches/0001_scroll_increment_value.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 2a31d05ade5a37eac7874f3d118fda80f2fa074c Mon Sep 17 00:00:00 2001
-From: Chase Douglas <chase.douglas@canonical.com>
-Date: Wed, 7 Mar 2012 14:09:17 -0800
-Subject: [PATCH] Use unsigned long long for double fractional calculation
-
-This fixes scroll class increment values on 32-bit machines. Performing
-1UL << 32 shifts the bit off the end of a 32-bit unsigned long value. By
-expanding to 1ULL, we have the full 64-bits of an unsigned long long
-including on 32-bit machines.
-
-Before this change, xinput list --long would output scroll increment
-values of -nan.
-
-Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
----
- src/XExtInt.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/src/XExtInt.c b/src/XExtInt.c
-index 7694f06..89c0894 100644
---- a/src/XExtInt.c
-+++ b/src/XExtInt.c
-@@ -1695,7 +1695,7 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses)
-                     cls_lib->scroll_type= cls_wire->scroll_type;
-                     cls_lib->flags      = cls_wire->flags;
-                     cls_lib->increment  = cls_wire->increment.integral;
--                    cls_lib->increment += (unsigned int)cls_wire->increment.frac/(double)(1UL << 32);
-+                    cls_lib->increment += (unsigned int)cls_wire->increment.frac/(double)(1ULL << 32);
- 
-                     to->classes[cls_idx++] = any_lib;
-                 }
--- 
-1.7.9
-
diff --git a/debian/patches/series b/debian/patches/series
index b58d4b7..fdffa2a 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1 @@
-0001_scroll_increment_value.patch
+# placeholder

commit a8f9343158e7135c35d168a58c8bc6d75b84e79f
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Fri Mar 30 17:51:39 2012 -0700

    Bump lintian standards version to 3.9.3

diff --git a/debian/changelog b/debian/changelog
index fcd8366..1388991 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,8 +4,9 @@ libxi (2:1.6.0-1) UNRELEASED; urgency=low
   * Bump build deps on x11proto-input-dev
   * Fix scroll valuator increment value on 32-bit machines
     - Added 0001_scroll_increment_value.patch
+  * Bump lintian standards version to 3.9.3
 
- -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 30 Mar 2012 17:49:28 -0700
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 30 Mar 2012 17:51:18 -0700
 
 libxi (2:1.5.99.2-1) experimental; urgency=low
 
diff --git a/debian/control b/debian/control
index b7ff2cd..a503100 100644
--- a/debian/control
+++ b/debian/control
@@ -22,7 +22,7 @@ Build-Depends:
  xorg-sgml-doctools (>= 1:1.8),
  xsltproc,
  w3m,
-Standards-Version: 3.9.2
+Standards-Version: 3.9.3
 Vcs-Git: git://git.debian.org/git/pkg-xorg/lib/libxi
 Vcs-Browser: http://git.debian.org/?p=pkg-xorg/lib/libxi.git
 

commit fe729aa9d49255a753ab9b806600ccb647d53261
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Fri Mar 30 17:50:29 2012 -0700

    Bump changelogs.

diff --git a/ChangeLog b/ChangeLog
index d05afbf..2d34b6a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,44 @@
+commit 70b730b0548ca9e408f14f2576b972beb32a0ad0
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Mar 8 16:03:50 2012 +1000
+
+    libXi 1.6.0
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 1b9f0394c3d4d3833f8560ae8170a4d5842419ab
+Author: Chase Douglas <chase.douglas@canonical.com>
+Date:   Wed Mar 7 14:52:54 2012 -0800
+
+    Fix XIScrollClass increment value on 32-bit machines
+    
+    This fixes scroll class increment values on 32-bit machines. Performing
+    1UL << 32 shifts the bit off the end of a 32-bit unsigned long value. By
+    expanding to 1ULL, we have the full 64-bits of an unsigned long long
+    including on 32-bit machines.
+    
+    Before this change, xinput list --long would output scroll increment
+    values of -nan.
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit c1a5a70b51f12dedf354102217c7cd4247ed3a4b
+Author: Michał Masłowski <mtjm@mtjm.eu>
+Date:   Tue Feb 21 20:54:40 2012 +0100
+
+    Fix bus error on MIPS N32 for bug #38331.
+    
+    XIValuatorClassInfo and XIScrollClassInfo might have an address
+    of 4 bytes modulo 8, while they contain doubles which need 8 byte
+    alignment.  This is fixed by adding extra padding after each structure
+    or array in sizeDeviceClassType and adding helper functions to
+    determine sizes and padding only in one place.
+    
+    Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=38331
+    Signed-off-by: Michał Masłowski <mtjm@mtjm.eu>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
 commit 34964b05c16161de65709d60799b9ad97ce56296
 Author: Peter Hutterer <peter.hutterer@who-t.net>
 Date:   Fri Jan 27 15:35:44 2012 +1000
diff --git a/debian/changelog b/debian/changelog
index 542e326..fcd8366 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,11 +1,11 @@
-libxi (2:1.5.99.3-1) UNRELEASED; urgency=low
+libxi (2:1.6.0-1) UNRELEASED; urgency=low
 
-  * New upstream release candidate
+  * New upstream release
   * Bump build deps on x11proto-input-dev
   * Fix scroll valuator increment value on 32-bit machines
     - Added 0001_scroll_increment_value.patch
 
- -- Chase Douglas <chase.douglas@ubuntu.com>  Wed, 07 Mar 2012 14:18:45 -0800
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 30 Mar 2012 17:49:28 -0700
 
 libxi (2:1.5.99.2-1) experimental; urgency=low
 

commit 2ac185d2fd2b884f4f59a7f7f61f414d139859aa
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Mar 26 09:07:34 2012 +1000

    Set the RawEvent sourceid (#34240)
    
    XI 2.2 and later include the sourceid in raw events.
    
    X.Org Bug 34240 <http://bugs.freedesktop.org/show_bug.cgi?id=34240>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

diff --git a/src/XExtInt.c b/src/XExtInt.c
index 4f85667..43738a2 100644
--- a/src/XExtInt.c
+++ b/src/XExtInt.c
@@ -145,7 +145,7 @@ wireToDeviceChangedEvent(xXIDeviceChangedEvent *in, XGenericEventCookie *cookie)
 static int
 wireToHierarchyChangedEvent(xXIHierarchyEvent *in, XGenericEventCookie *cookie);
 static int
-wireToRawEvent(xXIRawEvent *in, XGenericEventCookie *cookie);
+wireToRawEvent(XExtDisplayInfo *info, xXIRawEvent *in, XGenericEventCookie *cookie);
 static int
 wireToEnterLeave(xXIEnterEvent *in, XGenericEventCookie *cookie);
 static int
@@ -1012,7 +1012,7 @@ XInputWireToCookie(
         case XI_RawTouchUpdate:
         case XI_RawTouchEnd:
             *cookie = *(XGenericEventCookie*)save;
-            if (!wireToRawEvent((xXIRawEvent*)event, cookie))
+            if (!wireToRawEvent(info, (xXIRawEvent*)event, cookie))
             {
                 printf("XInputWireToCookie: CONVERSION FAILURE!  evtype=%d\n",
                         ge->evtype);
@@ -1832,14 +1832,13 @@ wireToHierarchyChangedEvent(xXIHierarchyEvent *in, XGenericEventCookie *cookie)
 }
 
 static int
-wireToRawEvent(xXIRawEvent *in, XGenericEventCookie *cookie)
+wireToRawEvent(XExtDisplayInfo *info, xXIRawEvent *in, XGenericEventCookie *cookie)
 {
     int len, i, bits;
     FP3232 *values;
     XIRawEvent *out;
     void *ptr;
 
-
     len = sizeof(XIRawEvent) + in->valuators_len * 4;
     bits = count_bits((unsigned char*)&in[1], in->valuators_len * 4);
     len += bits * sizeof(double) * 2; /* raw + normal */
@@ -1857,9 +1856,14 @@ wireToRawEvent(xXIRawEvent *in, XGenericEventCookie *cookie)
     out->time           = in->time;
     out->detail         = in->detail;
     out->deviceid       = in->deviceid;
-    out->sourceid       = 0; /* https://bugs.freedesktop.org/show_bug.cgi?id=34240 */
     out->flags          = in->flags;
 
+    /* https://bugs.freedesktop.org/show_bug.cgi?id=34240 */
+    if (_XiCheckVersion(info, XInput_2_2) >= 0)
+        out->sourceid       = in->sourceid;
+    else
+        out->sourceid       = 0;
+
     out->valuators.mask_len = in->valuators_len * 4;
     out->valuators.mask = next_block(&ptr, out->valuators.mask_len);
     memcpy(out->valuators.mask, &in[1], out->valuators.mask_len);

commit dfc101e4c6cdac4ff9a51732b2754287fbdc8582
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Mar 26 09:05:24 2012 +1000

    Move version comparison into a helper function.
    
    No functional changes, this simply introduces a version helper function that
    returns -1, 0 or 1 depending on the version comparison result. To be used
    internally only.
    
    Needed for fix to #34240
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

diff --git a/src/XExtInt.c b/src/XExtInt.c
index 0c64f9a..4f85667 100644
--- a/src/XExtInt.c
+++ b/src/XExtInt.c
@@ -344,6 +344,43 @@ static int XInputCheckExtension(Display *dpy, XExtDisplayInfo *info)
     return 1;
 }
 
+/*****************************************************************
+ * Compare version numbers between info and the built-in version table.
+ * Returns
+ *   -1 if info's version is less than version_index's version,
+ *   0 if equal (or DontCheck),
+ *   1 if info's version is greater than version_index's version.
+ * Returns -2 on initialization errors which shouldn't happen if you call it
+ * correctly.
+ */
+_X_HIDDEN int
+_XiCheckVersion(XExtDisplayInfo *info,
+                int version_index)
+{
+    XExtensionVersion *ext;
+
+    if (versions[version_index].major_version == Dont_Check)
+        return 0;
+
+    if (!info->data)
+        return -2;
+
+    ext = ((XInputData *) info->data)->vers;
+    if (!ext)
+        return -2;
+
+    if (ext->major_version == versions[version_index].major_version &&
+        ext->minor_version == versions[version_index].minor_version)
+        return 0;
+
+    if (ext->major_version < versions[version_index].major_version ||
+        (ext->major_version == versions[version_index].major_version &&
+         ext->minor_version < versions[version_index].minor_version))
+        return -1;
+    else
+        return 1;
+}
+
 /***********************************************************************
  *
  * Check to see if the input extension is installed in the server.
@@ -357,8 +394,6 @@ _XiCheckExtInit(
     register int	 version_index,
     XExtDisplayInfo	*info)
 {
-    XExtensionVersion *ext;
-
     if (!XInputCheckExtension(dpy, info)) {
 	UnlockDisplay(dpy);
 	return (-1);
@@ -374,15 +409,11 @@ _XiCheckExtInit(
 	    _XiGetExtensionVersion(dpy, "XInputExtension", info);
     }
 
-    if (versions[version_index].major_version > Dont_Check) {
-	ext = ((XInputData *) info->data)->vers;
-	if ((ext->major_version < versions[version_index].major_version) ||
-	    ((ext->major_version == versions[version_index].major_version) &&
-	     (ext->minor_version < versions[version_index].minor_version))) {
-	    UnlockDisplay(dpy);
-	    return (-1);
-	}
+    if (_XiCheckVersion(info, version_index) < 0) {
+	UnlockDisplay(dpy);
+	return -1;
     }
+
     return (0);
 }
 
diff --git a/src/XIint.h b/src/XIint.h
index cc46754..be4eafb 100644
--- a/src/XIint.h
+++ b/src/XIint.h
@@ -26,6 +26,7 @@
 extern XExtDisplayInfo *XInput_find_display(Display *);
 
 extern int _XiCheckExtInit(Display *, int, XExtDisplayInfo *);
+extern int _XiCheckVersion(XExtDisplayInfo *info, int version_index);
 
 extern XExtensionVersion *_XiGetExtensionVersion(Display *, _Xconst char *, XExtDisplayInfo *);
 extern XExtensionVersion* _XiGetExtensionVersionRequest(Display *dpy, _Xconst char *name, int xi_opcode);

commit 8436c920953f288aea2d6d5f370f8eaaaef82d97
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Mar 15 11:51:41 2012 +1000

    Fix wrong button label and mask copy on OS X
    
    Regression introduced in c1a5a70b51f12dedf354102217c7cd4247ed3a4b.
    
    If double-padding is applied, the length of the mask on the wire may be
    smaller than libXi's mask_len. When copying, only the wire length must be
    copied, with the remainder set to 0.
    When advancing to the button labels, the wire length matters, not libXi's
    internal length.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
    Tested-by: Jeremy Huddleston <jeremyhu@apple.com>

diff --git a/src/XExtInt.c b/src/XExtInt.c
index 89c0894..0c64f9a 100644
--- a/src/XExtInt.c
+++ b/src/XExtInt.c
@@ -1610,12 +1610,14 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses)
                     int struct_size;
                     int state_size;
                     int labels_size;
+                    int wire_mask_size;
 
                     cls_wire = (xXIButtonInfo*)any_wire;
                     sizeXIButtonClassType(cls_wire->num_buttons,
                                           &struct_size, &state_size,
                                           &labels_size);
                     cls_lib = next_block(&ptr_lib, struct_size);
+                    wire_mask_size = ((cls_wire->num_buttons + 7)/8 + 3)/4 * 4;
 
                     cls_lib->type = cls_wire->type;
                     cls_lib->sourceid = cls_wire->sourceid;
@@ -1623,10 +1625,14 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses)
                     cls_lib->state.mask_len = state_size;
                     cls_lib->state.mask = next_block(&ptr_lib, state_size);
                     memcpy(cls_lib->state.mask, &cls_wire[1],
-                           cls_lib->state.mask_len);
+                           wire_mask_size);
+                    if (state_size != wire_mask_size)
+                        memset(&cls_lib->state.mask[wire_mask_size], 0,
+                               state_size - wire_mask_size);
 
                     cls_lib->labels = next_block(&ptr_lib, labels_size);
-                    atoms =(uint32_t*)((char*)&cls_wire[1] + cls_lib->state.mask_len);
+
+                    atoms =(uint32_t*)((char*)&cls_wire[1] + wire_mask_size);
                     for (j = 0; j < cls_lib->num_buttons; j++)
                         cls_lib->labels[j] = *atoms++;
 

commit 70b730b0548ca9e408f14f2576b972beb32a0ad0
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Mar 8 16:03:50 2012 +1000

    libXi 1.6.0
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/configure.ac b/configure.ac
index 77341da..fc8c1f2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,7 @@
 
 # Initialize Autoconf
 AC_PREREQ([2.60])
-AC_INIT([libXi], [1.5.99.3],
+AC_INIT([libXi], [1.6.0],
 	[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libXi])
 AC_CONFIG_SRCDIR([Makefile.am])
 AC_CONFIG_HEADERS([src/config.h])

commit 1b9f0394c3d4d3833f8560ae8170a4d5842419ab
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Wed Mar 7 14:52:54 2012 -0800

    Fix XIScrollClass increment value on 32-bit machines
    
    This fixes scroll class increment values on 32-bit machines. Performing
    1UL << 32 shifts the bit off the end of a 32-bit unsigned long value. By
    expanding to 1ULL, we have the full 64-bits of an unsigned long long
    including on 32-bit machines.
    
    Before this change, xinput list --long would output scroll increment
    values of -nan.
    
    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/src/XExtInt.c b/src/XExtInt.c
index 7694f06..89c0894 100644
--- a/src/XExtInt.c
+++ b/src/XExtInt.c
@@ -1695,7 +1695,7 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses)
                     cls_lib->scroll_type= cls_wire->scroll_type;
                     cls_lib->flags      = cls_wire->flags;
                     cls_lib->increment  = cls_wire->increment.integral;
-                    cls_lib->increment += (unsigned int)cls_wire->increment.frac/(double)(1UL << 32);
+                    cls_lib->increment += (unsigned int)cls_wire->increment.frac/(double)(1ULL << 32);
 
                     to->classes[cls_idx++] = any_lib;
                 }

commit 5a156117ffee21ae62e53fde6250b512b306fee6
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Wed Mar 7 14:20:22 2012 -0800

    Fix scroll valuator increment value on 32-bit machines
    
    * Fix scroll valuator increment value on 32-bit machines
      - Added 0001_scroll_increment_value.patch

diff --git a/debian/changelog b/debian/changelog
index 91085fc..542e326 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,8 +2,10 @@ libxi (2:1.5.99.3-1) UNRELEASED; urgency=low
 
   * New upstream release candidate
   * Bump build deps on x11proto-input-dev
+  * Fix scroll valuator increment value on 32-bit machines
+    - Added 0001_scroll_increment_value.patch
 
- -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 10 Feb 2012 22:49:23 +0100
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Wed, 07 Mar 2012 14:18:45 -0800
 
 libxi (2:1.5.99.2-1) experimental; urgency=low
 
diff --git a/debian/patches/0001_scroll_increment_value.patch b/debian/patches/0001_scroll_increment_value.patch
new file mode 100644
index 0000000..4c12f18
--- /dev/null
+++ b/debian/patches/0001_scroll_increment_value.patch
@@ -0,0 +1,34 @@
+From 2a31d05ade5a37eac7874f3d118fda80f2fa074c Mon Sep 17 00:00:00 2001
+From: Chase Douglas <chase.douglas@canonical.com>
+Date: Wed, 7 Mar 2012 14:09:17 -0800
+Subject: [PATCH] Use unsigned long long for double fractional calculation
+
+This fixes scroll class increment values on 32-bit machines. Performing
+1UL << 32 shifts the bit off the end of a 32-bit unsigned long value. By
+expanding to 1ULL, we have the full 64-bits of an unsigned long long
+including on 32-bit machines.
+
+Before this change, xinput list --long would output scroll increment
+values of -nan.
+
+Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+---
+ src/XExtInt.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/src/XExtInt.c b/src/XExtInt.c
+index 7694f06..89c0894 100644
+--- a/src/XExtInt.c
++++ b/src/XExtInt.c
+@@ -1695,7 +1695,7 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses)
+                     cls_lib->scroll_type= cls_wire->scroll_type;
+                     cls_lib->flags      = cls_wire->flags;
+                     cls_lib->increment  = cls_wire->increment.integral;
+-                    cls_lib->increment += (unsigned int)cls_wire->increment.frac/(double)(1UL << 32);
++                    cls_lib->increment += (unsigned int)cls_wire->increment.frac/(double)(1ULL << 32);
+ 
+                     to->classes[cls_idx++] = any_lib;
+                 }
+-- 
+1.7.9
+
diff --git a/debian/patches/series b/debian/patches/series
index 9bf2d52..b58d4b7 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1 @@
-# placeholder.
+0001_scroll_increment_value.patch

commit c1a5a70b51f12dedf354102217c7cd4247ed3a4b
Author: Michał Masłowski <mtjm@mtjm.eu>
Date:   Tue Feb 21 20:54:40 2012 +0100

    Fix bus error on MIPS N32 for bug #38331.
    
    XIValuatorClassInfo and XIScrollClassInfo might have an address
    of 4 bytes modulo 8, while they contain doubles which need 8 byte
    alignment.  This is fixed by adding extra padding after each structure
    or array in sizeDeviceClassType and adding helper functions to
    determine sizes and padding only in one place.
    
    Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=38331
    Signed-off-by: Michał Masłowski <mtjm@mtjm.eu>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/src/XExtInt.c b/src/XExtInt.c
index b12886d..7694f06 100644
--- a/src/XExtInt.c
+++ b/src/XExtInt.c
@@ -1036,6 +1036,55 @@ sizeDeviceEvent(int buttons_len, int valuators_len,
     return len;
 }
 
+/* Return the size with added padding so next element would be
+   double-aligned unless the architecture is known to allow unaligned
+   data accesses.  Not doing this can cause a bus error on
+   MIPS N32. */
+static int
+pad_to_double(int size)
+{
+#if !defined(__i386__) && !defined(__sh__)
+    if (size % sizeof(double) != 0)
+        size += sizeof(double) - size % sizeof(double);
+#endif
+    return size;
+}
+
+/**
+ * Set structure and atoms to size in bytes of XIButtonClassInfo, its
+ * button state mask and labels array.
+ */
+static void
+sizeXIButtonClassType(int num_buttons, int* structure, int* state, int* atoms)
+{
+    int size;
+    int labels;
+
+    *structure = pad_to_double(sizeof(XIButtonClassInfo));
+    size = ((((num_buttons + 7)/8) + 3)/4);
+
+    /* Force mask alignment with longs to avoid unaligned
+     * access when accessing the atoms. */
+    *state = pad_to_double(size * 4);
+    labels = num_buttons * sizeof(Atom);
+
+    /* Force mask alignment with longs to avoid
+     * unaligned access when accessing the atoms. */
+    labels += ((((num_buttons + 7)/8) + 3)/4) * sizeof(Atom);
+    *atoms = pad_to_double(labels);
+}
+
+/**
+ * Set structure and keycodes to size in bytes of XIKeyClassInfo and
+ * its keycodes array.
+ */
+static void
+sizeXIKeyClassType(int num_keycodes, int* structure, int* keycodes)
+{
+    *structure = pad_to_double(sizeof(XIKeyClassInfo));
+    *keycodes = pad_to_double(num_keycodes * sizeof(int));
+}
+
 /**
  * Return the size in bytes required to store the matching class type
  * num_elements is num_buttons for XIButtonClass or num_keycodes for
@@ -1047,27 +1096,26 @@ static int
 sizeDeviceClassType(int type, int num_elements)
 {
     int l = 0;
+    int extra1 = 0;
+    int extra2 = 0;
     switch(type)
     {
         case XIButtonClass:
-            l = sizeof(XIButtonClassInfo);
-            l += num_elements * sizeof(Atom);
-            /* Force mask alignment with longs to avoid
-             * unaligned access when accessing the atoms. */
-            l += ((((num_elements + 7)/8) + 3)/4) * sizeof(Atom);
+            sizeXIButtonClassType(num_elements, &l, &extra1, &extra2);
+            l += extra1 + extra2;
             break;
         case XIKeyClass:
-            l = sizeof(XIKeyClassInfo);
-            l += num_elements * sizeof(int);
+            sizeXIKeyClassType(num_elements, &l, &extra1);
+            l += extra1;
             break;
         case XIValuatorClass:
-            l = sizeof(XIValuatorClassInfo);
+            l = pad_to_double(sizeof(XIValuatorClassInfo));
             break;
         case XIScrollClass:
-            l = sizeof(XIScrollClassInfo);
+            l = pad_to_double(sizeof(XIScrollClassInfo));
             break;
         case XITouchClass:
-            l = sizeof(XITouchClassInfo);
+            l = pad_to_double(sizeof(XITouchClassInfo));
             break;
         default:
             printf("sizeDeviceClassType: unknown type %d\n", type);
@@ -1156,20 +1204,21 @@ copyDeviceChangedEvent(XGenericEventCookie *in_cookie,
         {
             case XIButtonClass:
                 {
-                    int size;
+                    int struct_size;
+                    int state_size;
+                    int labels_size;
                     XIButtonClassInfo *bin, *bout;
                     bin = (XIButtonClassInfo*)any;
-                    bout = next_block(&ptr, sizeof(XIButtonClass));
+                    sizeXIButtonClassType(bin->num_buttons, &struct_size,
+                                          &state_size, &labels_size);
+                    bout = next_block(&ptr, struct_size);
 
                     *bout = *bin;
-                    /* Force mask alignment with longs to avoid unaligned
-                     * access when accessing the atoms. */
-                    size = bout->state.mask_len/4 * sizeof(Atom);
-                    bout->state.mask = next_block(&ptr, size);
+                    bout->state.mask = next_block(&ptr, state_size);
                     memcpy(bout->state.mask, bin->state.mask,
                             bout->state.mask_len);
 
-                    bout->labels = next_block(&ptr, bout->num_buttons * sizeof(Atom));
+                    bout->labels = next_block(&ptr, labels_size);
                     memcpy(bout->labels, bin->labels, bout->num_buttons * sizeof(Atom));
                     out->classes[i] = (XIAnyClassInfo*)bout;
                     break;
@@ -1177,11 +1226,15 @@ copyDeviceChangedEvent(XGenericEventCookie *in_cookie,
             case XIKeyClass:
                 {
                     XIKeyClassInfo *kin, *kout;
+                    int struct_size;
+                    int keycodes_size;
                     kin = (XIKeyClassInfo*)any;
+                    sizeXIKeyClassType(kin->num_keycodes, &struct_size,
+                                       &keycodes_size);
 
-                    kout = next_block(&ptr, sizeof(XIKeyClass));
+                    kout = next_block(&ptr, struct_size);
                     *kout = *kin;
-                    kout->keycodes = next_block(&ptr, kout->num_keycodes * sizeof(int));
+                    kout->keycodes = next_block(&ptr, keycodes_size);
                     memcpy(kout->keycodes, kin->keycodes, kout->num_keycodes * sizeof(int));
                     out->classes[i] = (XIAnyClassInfo*)kout;
                     break;
@@ -1190,7 +1243,8 @@ copyDeviceChangedEvent(XGenericEventCookie *in_cookie,
                 {
                     XIValuatorClassInfo *vin, *vout;
                     vin = (XIValuatorClassInfo*)any;
-                    vout = next_block(&ptr, sizeof(XIValuatorClass));
+                    vout = next_block(&ptr,
+                                      sizeDeviceClassType(XIValuatorClass, 0));
                     *vout = *vin;
                     out->classes[i] = (XIAnyClassInfo*)vout;
                     break;
@@ -1199,7 +1253,8 @@ copyDeviceChangedEvent(XGenericEventCookie *in_cookie,
                 {
                     XIScrollClassInfo *sin, *sout;
                     sin = (XIScrollClassInfo*)any;
-                    sout = next_block(&ptr, sizeof(XIScrollClassInfo));
+                    sout = next_block(&ptr,
+                                      sizeDeviceClassType(XIScrollClass, 0));
                     *sout = *sin;
                     out->classes[i] = (XIAnyClassInfo*)sout;
                     break;
@@ -1478,7 +1533,8 @@ size_classes(xXIAnyInfo* from, int nclasses)
     xXIAnyInfo *any_wire;
     char *ptr_wire;
 
-    len = nclasses * sizeof(XIAnyClassInfo*); /* len for to->classes */
+    /* len for to->classes */
+    len = pad_to_double(nclasses * sizeof(XIAnyClassInfo*));
     ptr_wire = (char*)from;
     for (i = 0; i < nclasses; i++)
     {
@@ -1533,7 +1589,8 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses)
 
     ptr_wire = (char*)from;
     ptr_lib = to->classes;
-    to->classes = next_block(&ptr_lib, (*nclasses) * sizeof(XIAnyClassInfo*));
+    to->classes = next_block(&ptr_lib,
+                             pad_to_double((*nclasses) * sizeof(XIAnyClassInfo*)));
     memset(to->classes, 0, (*nclasses) * sizeof(XIAnyClassInfo*));
     len = 0; /* count wire length */
 
@@ -1549,24 +1606,26 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses)
                     XIButtonClassInfo *cls_lib;
                     xXIButtonInfo *cls_wire;
                     uint32_t *atoms;
-                    int size;
                     int j;
+                    int struct_size;
+                    int state_size;
+                    int labels_size;
 
-                    cls_lib = next_block(&ptr_lib, sizeof(XIButtonClassInfo));
                     cls_wire = (xXIButtonInfo*)any_wire;
+                    sizeXIButtonClassType(cls_wire->num_buttons,
+                                          &struct_size, &state_size,
+                                          &labels_size);
+                    cls_lib = next_block(&ptr_lib, struct_size);
 
                     cls_lib->type = cls_wire->type;
                     cls_lib->sourceid = cls_wire->sourceid;
                     cls_lib->num_buttons = cls_wire->num_buttons;
-                    size = ((((cls_wire->num_buttons + 7)/8) + 3)/4);
-                    cls_lib->state.mask_len = size * 4;
-                    /* Force mask alignment with longs to avoid unaligned
-                     * access when accessing the atoms. */
-                    cls_lib->state.mask = next_block(&ptr_lib, size * sizeof(Atom));
+                    cls_lib->state.mask_len = state_size;
+                    cls_lib->state.mask = next_block(&ptr_lib, state_size);
                     memcpy(cls_lib->state.mask, &cls_wire[1],
                            cls_lib->state.mask_len);
 
-                    cls_lib->labels = next_block(&ptr_lib, cls_lib->num_buttons * sizeof(Atom));
+                    cls_lib->labels = next_block(&ptr_lib, labels_size);
                     atoms =(uint32_t*)((char*)&cls_wire[1] + cls_lib->state.mask_len);
                     for (j = 0; j < cls_lib->num_buttons; j++)
                         cls_lib->labels[j] = *atoms++;
@@ -1578,15 +1637,18 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses)
                 {
                     XIKeyClassInfo *cls_lib;
                     xXIKeyInfo *cls_wire;
+                    int struct_size;
+                    int keycodes_size;
 
-                    cls_lib = next_block(&ptr_lib, sizeof(XIKeyClassInfo));
                     cls_wire = (xXIKeyInfo*)any_wire;
+                    sizeXIKeyClassType(cls_wire->num_keycodes,
+                                       &struct_size, &keycodes_size);
+                    cls_lib = next_block(&ptr_lib, struct_size);
 
                     cls_lib->type = cls_wire->type;
                     cls_lib->sourceid = cls_wire->sourceid;
                     cls_lib->num_keycodes = cls_wire->num_keycodes;
-                    cls_lib->keycodes = next_block(&ptr_lib,
-                            cls_lib->num_keycodes * sizeof(int));
+                    cls_lib->keycodes = next_block(&ptr_lib, keycodes_size);
                     memcpy(cls_lib->keycodes, &cls_wire[1],
                             cls_lib->num_keycodes);
 
@@ -1598,7 +1660,9 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses)
                     XIValuatorClassInfo *cls_lib;
                     xXIValuatorInfo *cls_wire;
 
-                    cls_lib = next_block(&ptr_lib, sizeof(XIValuatorClassInfo));
+                    cls_lib =
+                      next_block(&ptr_lib,
+                                 sizeDeviceClassType(XIValuatorClass, 0));
                     cls_wire = (xXIValuatorInfo*)any_wire;
 
                     cls_lib->type = cls_wire->type;
@@ -1620,7 +1684,9 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses)
                     XIScrollClassInfo *cls_lib;
                     xXIScrollInfo *cls_wire;
 
-                    cls_lib = next_block(&ptr_lib, sizeof(XIScrollClassInfo));
+                    cls_lib =
+                      next_block(&ptr_lib,
+                                 sizeDeviceClassType(XIScrollClass, 0));
                     cls_wire = (xXIScrollInfo*)any_wire;
 
                     cls_lib->type = cls_wire->type;

commit 2ea47a51df473ee553d4b1470d24df0c1ecccfcb
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Fri Feb 10 22:50:44 2012 +0100

    Bump build deps on x11proto-input-dev

diff --git a/debian/changelog b/debian/changelog
index 4bc4419..91085fc 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,9 @@
 libxi (2:1.5.99.3-1) UNRELEASED; urgency=low
 
   * New upstream release candidate
+  * Bump build deps on x11proto-input-dev
 
- -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 10 Feb 2012 22:47:39 +0100
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 10 Feb 2012 22:49:23 +0100
 
 libxi (2:1.5.99.2-1) experimental; urgency=low
 
diff --git a/debian/control b/debian/control
index 0af18dc..b7ff2cd 100644
--- a/debian/control
+++ b/debian/control
@@ -7,7 +7,7 @@ Build-Depends:
  debhelper (>= 8.1.3),


Reply to: