File xf86-input-evdev-max_fixes.diff of Package xorg-x11-driver-input

--- xf86-input-evdev-1.1.5/src/evdev.h
+++ xf86-input-evdev-1.1.5/src/evdev.h
@@ -162,12 +162,12 @@
 
 typedef struct {
     int		axes;
-    int		v[ABS_MAX];
+    int		v[ABS_MAX+1];
     int		old_x, old_y;
     int		count;
-    int		min[ABS_MAX];
-    int		max[ABS_MAX];
-    int		map[ABS_MAX];
+    int		min[ABS_MAX+1];
+    int		max[ABS_MAX+1];
+    int		map[ABS_MAX+1];
     int		scale[2];
     int		screen; /* Screen number for this device. */
     Bool	use_touch;
@@ -177,15 +177,15 @@
 
 typedef struct {
     int		axes;
-    int		v[REL_MAX];
+    int		v[REL_MAX+1];
     int		count;
-    int		map[REL_MAX];
-    int		btnMap[REL_MAX][2];
+    int		map[REL_MAX+1];
+    int		btnMap[REL_MAX+1][2];
 } evdevRelRec, *evdevRelPtr;
 
 typedef struct {
     int		axes;
-    int		v[ABS_MAX];
+    int		v[ABS_MAX+1];
 } evdevAxesRec, *evdevAxesPtr;
 
 typedef struct {
--- xf86-input-evdev-1.1.5/src/evdev_axes.c
+++ xf86-input-evdev-1.1.5/src/evdev_axes.c
@@ -206,10 +206,10 @@
 	    axes->v[0x3c], axes->v[0x3d], axes->v[0x3e], axes->v[0x3f]);
 
     if (!skip_xy)
-	for (i = 0; i < ABS_MAX; i++)
+	for (i = 0; i <= ABS_MAX; i++)
 	    state->axes->v[i] = 0;
     else if (skip_xy == 1)
-	for (i = 2; i < ABS_MAX; i++)
+	for (i = 2; i <= ABS_MAX; i++)
 	    state->axes->v[i] = 0;
     else if (skip_xy == 2)
 	for (i = 0; i < 2; i++)
@@ -224,7 +224,7 @@
     struct input_absinfo absinfo;
     int i;
 
-    for (i = 0; i < ABS_MAX; i++) {
+    for (i = 0; i <= ABS_MAX; i++) {
 	if (!test_bit (i, pEvdev->bits.abs))
 	    continue;
 
@@ -288,7 +288,7 @@
 	xf86XInputSetScreen (pInfo, state->abs->screen, conv_x, conv_y);
     }
 
-    for (; i < ABS_MAX; i++)
+    for (; i <= ABS_MAX; i++)
 	state->axes->v[i] = state->abs->v[i];
 
     EvdevAxesRealSyn (pInfo, 1, skip_xy);
@@ -306,7 +306,7 @@
     if (!state->axes || !state->rel || !state->rel->count)
 	return;
 
-    for (i = 0; i < REL_MAX; i++) {
+    for (i = 0; i <= REL_MAX; i++) {
 	if (rel->btnMap[i][0] || rel->btnMap[i][1]) {
 	    if ((rel->v[i] > 0) && (btn = rel->btnMap[i][0]))
 		EvdevBtnPostFakeClicks (pInfo, btn, rel->v[i]);
@@ -343,7 +343,7 @@
     evdevStatePtr state = &pEvdev->state;
     int map;
 
-    if (ev->code >= ABS_MAX)
+    if (ev->code > ABS_MAX)
 	return;
 
     /* FIXME: Handle inverted axes properly. */
@@ -366,7 +366,7 @@
     evdevStatePtr state = &pEvdev->state;
     int map;
 
-    if (ev->code >= REL_MAX)
+    if (ev->code > REL_MAX)
 	return;
 
     map = state->rel->map[ev->code];
@@ -403,7 +403,7 @@
     int i, j, k = 0, real_axes;
 
     real_axes = 0;
-    for (i = 0; i < ABS_MAX; i++)
+    for (i = 0; i <= ABS_MAX; i++)
 	if (test_bit (i, pEvdev->bits.abs))
 	    real_axes++;
 
@@ -419,7 +419,7 @@
     pInfo->type_name = XI_MOUSE;
     pInfo->conversion_proc = EvdevConvert;
 
-    for (i = 0, j = 0; i < ABS_MAX; i++) {
+    for (i = 0, j = 0; i <= ABS_MAX; i++) {
 	if (!test_bit (i, pEvdev->bits.abs))
 	    continue;
 
@@ -444,7 +444,7 @@
     }
 
     state->abs->axes = real_axes;
-    for (i = 0; i < ABS_MAX; i++) {
+    for (i = 0; i <= ABS_MAX; i++) {
 	if (state->abs->map[i] > state->abs->axes)
 	    state->abs->axes = state->abs->map[i];
     }
@@ -525,7 +525,7 @@
     int i, j, k = 0, real_axes;
 
     real_axes = 0;
-    for (i = 0; i < REL_MAX; i++)
+    for (i = 0; i <= REL_MAX; i++)
 	if (test_bit (i, pEvdev->bits.rel))
 	    real_axes++;
 
@@ -542,7 +542,7 @@
     pInfo->type_name = XI_MOUSE;
     pInfo->conversion_proc = EvdevConvert;
 
-    for (i = 0, j = 0; i < REL_MAX; i++) {
+    for (i = 0, j = 0; i <= REL_MAX; i++) {
 	if (!test_bit (i, pEvdev->bits.rel))
 	    continue;
 
@@ -579,7 +579,7 @@
     }
 
     state->rel->axes = real_axes;
-    for (i = 0; i < REL_MAX; i++)
+    for (i = 0; i <= REL_MAX; i++)
 	if (state->rel->map[i] > state->rel->axes)
 	    state->rel->axes = state->rel->map[i];
 
openSUSE Build Service is sponsored by