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; }
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(); }