示例#1
0
static ssize_t uinput_inject_events(struct uinput_device *udev,
                                    const char __user *buffer, size_t count)
{
    struct input_event ev;
    size_t bytes = 0;

    if (count != 0 && count < input_event_size())
        return -EINVAL;

    while (bytes + input_event_size() <= count) {
        /*
         * Note that even if some events were fetched successfully
         * we are still going to return EFAULT instead of partial
         * count to let userspace know that it got it's buffers
         * all wrong.
         */
        if (input_event_from_user(buffer + bytes, &ev))
            return -EFAULT;

        input_event(udev->dev, ev.type, ev.code, ev.value);
        bytes += input_event_size();
    }

    return bytes;
}
示例#2
0
static inline ssize_t uinput_inject_event(struct uinput_device *udev, const char __user *buffer, size_t count)
{
	struct input_event ev;

	if (count < input_event_size())
		return -EINVAL;

	if (input_event_from_user(buffer, &ev))
		return -EFAULT;

	input_event(udev->dev, ev.type, ev.code, ev.value);

	return input_event_size();
}