- for (i = 0; i < dcount; i++)
- if (devs[i]->fd > fdmax) fdmax = devs[i]->fd;
-
- while (1)
- {
- struct input_event ev;
- in_evdev_t *dev = NULL;
- int ret, rd;
- fd_set fdset;
-
- FD_ZERO(&fdset);
- for (i = 0; i < dcount; i++)
- FD_SET(devs[i]->fd, &fdset);
-
- ret = select(fdmax + 1, &fdset, NULL, NULL, timeout);
- if (ret == -1)
- {
- perror("in_evdev: select failed");
- sleep(1);
- return 0;
- }
-
- if (ret == 0)
- return 0; /* timeout */
-
- for (i = 0; i < dcount; i++)
- if (FD_ISSET(devs[i]->fd, &fdset))
- *which = i, dev = devs[i];
+ rd = read(dev->fd, &ev, sizeof(ev));
+ if (rd < (int) sizeof(ev)) {
+ perror("in_evdev: error reading");
+ sleep(1);
+ return 0;
+ }