From 72551662a09eedf696508aaacf6aa02c0254e4de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Tue, 29 Jul 2008 10:06:07 +0200 Subject: [PATCH] xf86-input-evdev: Fix EVIOCGBIT ioctl usage on big endian platforms. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With this fix, on my PowerBook HAL hotplugging correctly detects my USB mouse, and no longer thinks keyboards have random numbers of mouse buttons. :) The LONG_BITS and NBITS macro definitions are stolen from xf86-input-synaptics. Signed-off-by: Michel Dänzer Signed-off-by: Peter Hutterer --- src/evdev.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/evdev.c b/src/evdev.c index f831081..58aa3dc 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -346,7 +346,9 @@ EvdevReadInput(InputInfoPtr pInfo) } } -#define TestBit(bit, array) (array[(bit) / 8] & (1 << ((bit) % 8))) +#define LONG_BITS (sizeof(long) * 8) +#define NBITS(x) (((x) + LONG_BITS - 1) / LONG_BITS) +#define TestBit(bit, array) (array[(bit) / LONG_BITS]) & (1 << ((bit) % LONG_BITS)) static void EvdevPtrCtrlProc(DeviceIntPtr device, PtrCtrl *ctrl) @@ -980,9 +982,9 @@ EvdevProc(DeviceIntPtr device, int what) static int EvdevProbe(InputInfoPtr pInfo) { - char key_bitmask[(KEY_MAX + 7) / 8]; - char rel_bitmask[(REL_MAX + 7) / 8]; - char abs_bitmask[(ABS_MAX + 7) / 8]; + long key_bitmask[NBITS(KEY_MAX)]; + long rel_bitmask[NBITS(REL_MAX)]; + long abs_bitmask[NBITS(ABS_MAX)]; int i, has_axes, has_keys, num_buttons; EvdevPtr pEvdev = pInfo->private;