Re: 2.6.36/2.6.37: broken compatibility with userspace input-utils ?
From: Mark Lord <hidden>
Date: 2011-01-25 04:37:09
Also in:
lkml
On 11-01-24 11:20 PM, Dmitry Torokhov wrote:
On Mon, Jan 24, 2011 at 11:13:05PM -0500, Mark Lord wrote:quoted
On 11-01-24 07:55 PM, Dmitry Torokhov wrote:quoted
No, as far as I know we kept ABI intact.Okay, I hacked lsinput and input-kbd to ignore the protocol number. input-kbd is still broken: it thinks my remote control (Hauppauge) has only ten buttons, and won't allow me to remap codes larger than 10. I've now hacked around that too, but without determining exactly where the interface got broken. Ugh.Where are the sources? I can take a look...
I used "apt-get source input-utils" under Ubuntu-10.10.
The problem seems to be here somewhere:
static struct kbd_map* kbd_map_read(int fd)
{
struct kbd_entry entry;
struct kbd_map *map;
int rc;
map = malloc(sizeof(*map));
memset(map,0,sizeof(*map));
for (map->size = 0; map->size < 65536; map->size++) {
entry.scancode = map->size;
entry.keycode = KEY_RESERVED;
rc = ioctl(fd, EVIOCGKEYCODE, &entry);
if (rc < 0) {
break;
}
if (map->size >= map->alloc) {
map->alloc += 64;
map->map = realloc(map->map, map->alloc * sizeof(entry));
}
map->map[map->size] = entry;
if (KEY_RESERVED != entry.keycode)
map->keys++;
}
if (map->keys) {
printf("map: %d keys, size: %d/%d\n",
map->keys, map->size, map->alloc);
return map;
} else {
free(map);
return NULL;
}
}
This results in (map->size==10) for 2.6.36+ (wrong),
and a much larger map->size for 2.6.35 and earlier.
So perhaps EVIOCGKEYCODE has changed?