protection and more mapper support for new mem code
[libpicofe.git] / linux / in_evdev.c
index 6eea20a..7866015 100644 (file)
@@ -256,7 +256,7 @@ int in_evdev_update(void *drv_data, const int *binds, int *result)
        int rd, ret, u;
 
        if (dev->kbits == NULL) {
-               ret = ioctl(dev->fd, EVIOCGKEY(sizeof(keybits)), keybits);
+               ret = ioctl(dev->fd, EVIOCGKEY(sizeof(keybits_)), keybits_);
                if (ret == -1) {
                        perror("in_evdev: ioctl failed");
                        return -1;
@@ -317,6 +317,16 @@ static void in_evdev_set_blocking(void *drv_data, int y)
                perror("in_evdev: F_GETFL fcntl failed");
                return;
        }
+
+       if (flags & O_NONBLOCK) {
+               /* flush the event queue */
+               struct input_event ev;
+               do {
+                       ret = read(dev->fd, &ev, sizeof(ev));
+               }
+               while (ret == sizeof(ev));
+       }
+
        if (y)
                flags &= ~O_NONBLOCK;
        else