-
- ret = ioctl(dev->fd, EVIOCGKEY(sizeof(keybits)), keybits);
- if (ret == -1) {
- perror("in_evdev: ioctl failed");
- return -1;
+ else {
+ keybits = dev->kbits;
+ while (1) {
+ rd = read(dev->fd, ev, sizeof(ev));
+ if (rd < (int)sizeof(ev[0])) {
+ if (errno != EAGAIN)
+ perror("in_evdev: read failed");
+ break;
+ }
+ for (u = 0; u < rd / sizeof(ev[0]); u++) {
+ if (ev[u].type != EV_KEY)
+ continue;
+ else if (ev[u].value == 1)
+ KEYBITS_BIT_SET(ev[u].code);
+ else if (ev[u].value == 0)
+ KEYBITS_BIT_CLEAR(ev[u].code);
+ }
+ }