{
int retval;
struct evdev_list *list = file->private_data;
-
retval = fasync_helper(fd, file, on, &list->fasync);
-
return retval < 0 ? retval : 0;
}
-static int evdev_flush(struct file *file, fl_owner_t id)
+static int evdev_flush(struct file * file)
{
struct evdev_list *list = file->private_data;
-
- if (!list->evdev->exist)
- return -ENODEV;
-
+ if (!list->evdev->exist) return -ENODEV;
return input_flush_device(&list->evdev->handle, file);
}
{
struct evdev_list *list;
int i = iminor(inode) - EVDEV_MINOR_BASE;
+ int accept_err;
if (i >= EVDEV_MINORS || !evdev_table[i] || !evdev_table[i]->exist)
return -ENODEV;
- if (!(list = kzalloc(sizeof(struct evdev_list), GFP_KERNEL)))
+ if ((accept_err = input_accept_process(&(evdev_table[i]->handle), file)))
+ return accept_err;
+
+ if (!(list = kmalloc(sizeof(struct evdev_list), GFP_KERNEL)))
return -ENOMEM;
+ memset(list, 0, sizeof(struct evdev_list));
list->evdev = evdev_table[i];
list_add_tail(&list->node, &evdev_table[i]->list);
if (evdev_event_from_user(buffer + retval, &event))
return -EFAULT;
- input_inject_event(&list->evdev->handle, event.type, event.code, event.value);
+ input_event(list->evdev->handle.dev, event.type, event.code, event.value);
retval += evdev_event_size();
}
static unsigned int evdev_poll(struct file *file, poll_table *wait)
{
struct evdev_list *list = file->private_data;
-
poll_wait(file, &list->evdev->wait, wait);
return ((list->head == list->tail) ? 0 : (POLLIN | POLLRDNORM)) |
(list->evdev->exist ? 0 : (POLLHUP | POLLERR));
case EVIOCGID:
if (copy_to_user(p, &dev->id, sizeof(struct input_id)))
return -EFAULT;
- return 0;
-
- case EVIOCGREP:
- if (!test_bit(EV_REP, dev->evbit))
- return -ENOSYS;
- if (put_user(dev->rep[REP_DELAY], ip))
- return -EFAULT;
- if (put_user(dev->rep[REP_PERIOD], ip + 1))
- return -EFAULT;
- return 0;
-
- case EVIOCSREP:
- if (!test_bit(EV_REP, dev->evbit))
- return -ENOSYS;
- if (get_user(u, ip))
- return -EFAULT;
- if (get_user(v, ip + 1))
- return -EFAULT;
-
- input_inject_event(&evdev->handle, EV_REP, REP_DELAY, u);
- input_inject_event(&evdev->handle, EV_REP, REP_PERIOD, v);
return 0;
return NULL;
}
- if (!(evdev = kzalloc(sizeof(struct evdev), GFP_KERNEL)))
+ if (!(evdev = kmalloc(sizeof(struct evdev), GFP_KERNEL)))
return NULL;
+ memset(evdev, 0, sizeof(struct evdev));
INIT_LIST_HEAD(&evdev->list);
init_waitqueue_head(&evdev->wait);