x11-libs/libXi: uprev to 1.4.5 and mark as stable

This is required to build xinput-1.5.4, which fixes a bug when building
against inputproto-2.1

Note: This patch removes the older version.
Note: 1.4.3-xiquerydevice.patch is included in 1.4.5

BUG=chrome-os-partner:7875
TEST=emerge-${B} libXi
    -> builds clean; input drivers build clean

Change-Id: I66ce6321ed37c6499a029905c2c62a06d04f8df4
Reviewed-on: https://gerrit.chromium.org/gerrit/15313
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Stuart Abercrombie <sabercrombie@chromium.org>
Reviewed-by: Benson Leung <bleung@chromium.org>
Commit-Ready: Daniel Kurtz <djkurtz@chromium.org>
Reviewed-by: Daniel Kurtz <djkurtz@chromium.org>
Tested-by: Daniel Kurtz <djkurtz@chromium.org>
This commit is contained in:
Daniel Kurtz 2012-02-06 15:07:46 +08:00 committed by Gerrit
parent bb46ec2a8b
commit 067ab02490
3 changed files with 2 additions and 178 deletions

View File

@ -1 +0,0 @@
DIST libXi-1.4.3.tar.bz2 422637 RMD160 142d44e8e13abbb8a41826b7005f8ede1807e3ff SHA1 c66cfdee74e8d169a7992b5f257395e653ca761b SHA256 08c9d89a404740592621e6f5078414df86ccc78ca876e3da1af15639d81c74e0

View File

@ -1,171 +0,0 @@
From 635c2c029b1e73311c3f650bcaf7eeb9e782134b Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed, 17 Aug 2011 05:20:48 +0000
Subject: Handle unknown device classes.
If the server sends an unknown device class in response to an XIQueryDevice
call, no memory is allocated for these classes but we still write type
and sourceid as well as setting to->classes[i]. The latter causes multiple
classes to point to the same memory field.
Move the common code of assigning these three into the respective class type
handlers so to automatically skip any unknown classes.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
diff --git a/src/XExtInt.c b/src/XExtInt.c
index 86a780e..9e1ad19 100644
--- a/src/XExtInt.c
+++ b/src/XExtInt.c
@@ -98,7 +98,7 @@ extern int _XiGetDevicePresenceNotifyEvent(
Display * /* dpy */
);
-int copy_classes(XIDeviceInfo *to, xXIAnyInfo* from, int nclasses);
+int copy_classes(XIDeviceInfo *to, xXIAnyInfo* from, int *nclasses);
int size_classes(xXIAnyInfo* from, int nclasses);
static XExtensionInfo *xinput_info;
@@ -1448,30 +1448,29 @@ size_classes(xXIAnyInfo* from, int nclasses)
* |______________________^
*/
_X_HIDDEN int
-copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses)
+copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses)
{
XIAnyClassInfo *any_lib;
xXIAnyInfo *any_wire;
void *ptr_lib;
char *ptr_wire;
int i, len;
+ int cls_idx = 0;
if (!to->classes)
return -1;
ptr_wire = (char*)from;
ptr_lib = to->classes;
- to->classes = next_block(&ptr_lib, nclasses * sizeof(XIAnyClassInfo*));
+ to->classes = next_block(&ptr_lib, *nclasses * sizeof(XIAnyClassInfo*));
+ memset(to->classes, 0, sizeof(*nclasses * sizeof(XIAnyClassInfo*)));
len = 0; /* count wire length */
- for (i = 0; i < nclasses; i++)
+ for (i = 0; i < *nclasses; i++)
{
any_lib = (XIAnyClassInfo*)ptr_lib;
any_wire = (xXIAnyInfo*)ptr_wire;
- to->classes[i] = any_lib;
- any_lib->type = any_wire->type;
- any_lib->sourceid = any_wire->sourceid;
switch(any_wire->type)
{
case XIButtonClass:
@@ -1485,6 +1484,8 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses)
cls_lib = next_block(&ptr_lib, sizeof(XIButtonClassInfo));
cls_wire = (xXIButtonInfo*)any_wire;
+ 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;
@@ -1499,6 +1500,7 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses)
for (j = 0; j < cls_lib->num_buttons; j++)
cls_lib->labels[j] = *atoms++;
+ to->classes[cls_idx++] = any_lib;
break;
}
case XIKeyClass:
@@ -1509,12 +1511,15 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses)
cls_lib = next_block(&ptr_lib, sizeof(XIKeyClassInfo));
cls_wire = (xXIKeyInfo*)any_wire;
+ 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));
memcpy(cls_lib->keycodes, &cls_wire[1],
cls_lib->num_keycodes);
+ to->classes[cls_idx++] = any_lib;
break;
}
case XIValuatorClass:
@@ -1525,6 +1530,8 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses)
cls_lib = next_block(&ptr_lib, sizeof(XIValuatorClassInfo));
cls_wire = (xXIValuatorInfo*)any_wire;
+ cls_lib->type = cls_wire->type;
+ cls_lib->sourceid = cls_wire->sourceid;
cls_lib->number = cls_wire->number;
cls_lib->label = cls_wire->label;
cls_lib->resolution = cls_wire->resolution;
@@ -1534,12 +1541,16 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses)
/* FIXME: fractional parts */
cls_lib->mode = cls_wire->mode;
+ to->classes[cls_idx++] = any_lib;
}
break;
}
len += any_wire->length * 4;
ptr_wire += any_wire->length * 4;
}
+
+ /* we may have skipped unknown classes, reset nclasses */
+ *nclasses = cls_idx;
return len;
}
@@ -1550,6 +1561,7 @@ wireToDeviceChangedEvent(xXIDeviceChangedEvent *in, XGenericEventCookie *cookie)
XIDeviceChangedEvent *out;
XIDeviceInfo info;
int len;
+ int nclasses = in->num_classes;
len = size_classes((xXIAnyInfo*)&in[1], in->num_classes);
@@ -1564,13 +1576,13 @@ wireToDeviceChangedEvent(xXIDeviceChangedEvent *in, XGenericEventCookie *cookie)
out->deviceid = in->deviceid;
out->sourceid = in->sourceid;
out->reason = in->reason;
- out->num_classes = in->num_classes;
out->classes = (XIAnyClassInfo**)&out[1];
info.classes = out->classes;
- copy_classes(&info, (xXIAnyInfo*)&in[1], in->num_classes);
+ copy_classes(&info, (xXIAnyInfo*)&in[1], &nclasses);
+ out->num_classes = nclasses;
return 1;
}
diff --git a/src/XIQueryDevice.c b/src/XIQueryDevice.c
index 4e2f392..c22aee1 100644
--- a/src/XIQueryDevice.c
+++ b/src/XIQueryDevice.c
@@ -29,7 +29,7 @@
#include <X11/extensions/extutil.h>
#include "XIint.h"
-extern int copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses);
+extern int copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses);
extern int size_classes(xXIAnyInfo* from, int nclasses);
XIDeviceInfo*
@@ -87,7 +87,7 @@ XIQueryDevice(Display *dpy, int deviceid, int *ndevices_return)
ptr += ((wire->name_len + 3)/4) * 4;
lib->classes = Xmalloc(size_classes((xXIAnyInfo*)ptr, lib->num_classes));
- ptr += copy_classes(lib, (xXIAnyInfo*)ptr, lib->num_classes);
+ ptr += copy_classes(lib, (xXIAnyInfo*)ptr, &lib->num_classes);
}
Xfree(buf);
--
cgit v0.9.0.2-2-gbebe

View File

@ -1,6 +1,6 @@
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/x11-libs/libXi/libXi-1.4.3-r1.ebuild,v 1.5 2011/12/27 21:09:21 maekke Exp $
# $Header: /var/cvsroot/gentoo-x86/x11-libs/libXi/libXi-1.4.5.ebuild,v 1.1 2011/12/20 21:55:44 chithanh Exp $
EAPI=4
@ -8,7 +8,7 @@ XORG_DOC=doc
inherit xorg-2
DESCRIPTION="X.Org Xi library"
KEYWORDS="~alpha amd64 arm hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc x86 ~x86-fbsd ~x64-freebsd ~x86-freebsd ~x86-interix ~amd64-linux ~x86-linux ~ppc-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris ~x86-winnt"
KEYWORDS="~alpha amd64 arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc x86 ~x86-fbsd ~x64-freebsd ~x86-freebsd ~x86-interix ~amd64-linux ~x86-linux ~ppc-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris ~x86-winnt"
IUSE=""
RDEPEND=">=x11-libs/libX11-1.3
@ -18,10 +18,6 @@ RDEPEND=">=x11-libs/libX11-1.3
>=x11-proto/xextproto-7.0.3"
DEPEND="${RDEPEND}"
PATCHES=(
"${FILESDIR}/${PN}-1.4.3-xiquerydevice.patch"
)
pkg_setup() {
xorg-2_pkg_setup
XORG_CONFIGURE_OPTIONS=(