From: Peter Hutterer Date: Wed, 6 Apr 2016 05:32:56 +0000 (+1000) Subject: uinput: split uinput device creation into a helper function X-Git-Tag: libevdev-1.5.0~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7989eef75972d27ffc8b2b36eea4ca6c7fcd5435;p=platform%2Fupstream%2Flibevdev.git uinput: split uinput device creation into a helper function No functional changes. This is prep work for supporting the new UIDEV_DEV_SETUP ioctl. Signed-off-by: Peter Hutterer Reviewed-by: Benjamin Tissoires --- diff --git a/libevdev/libevdev-uinput.c b/libevdev/libevdev-uinput.c index 1316952..0046607 100644 --- a/libevdev/libevdev-uinput.c +++ b/libevdev/libevdev-uinput.c @@ -271,29 +271,12 @@ fetch_syspath_and_devnode(struct libevdev_uinput *uinput_dev) return uinput_dev->devnode ? 0 : -1; } -LIBEVDEV_EXPORT int -libevdev_uinput_create_from_device(const struct libevdev *dev, int fd, struct libevdev_uinput** uinput_dev) +static int +uinput_create(const struct libevdev *dev, int fd, + struct libevdev_uinput *new_device) { int rc; struct uinput_user_dev uidev; - struct libevdev_uinput *new_device; - int close_fd_on_error = (fd == LIBEVDEV_UINPUT_OPEN_MANAGED); - - new_device = alloc_uinput_device(libevdev_get_name(dev)); - if (!new_device) - return -ENOMEM; - - if (fd == LIBEVDEV_UINPUT_OPEN_MANAGED) { - fd = open("/dev/uinput", O_RDWR|O_CLOEXEC); - if (fd < 0) - goto error; - - new_device->fd_is_managed = 1; - } else if (fd < 0) { - log_bug(NULL, "Invalid fd %d\n", fd); - errno = EBADF; - goto error; - } memset(&uidev, 0, sizeof(uidev)); @@ -316,6 +299,39 @@ libevdev_uinput_create_from_device(const struct libevdev *dev, int fd, struct li goto error; } + errno = 0; + +error: + return -errno; +} + +LIBEVDEV_EXPORT int +libevdev_uinput_create_from_device(const struct libevdev *dev, int fd, struct libevdev_uinput** uinput_dev) +{ + int rc; + struct libevdev_uinput *new_device; + int close_fd_on_error = (fd == LIBEVDEV_UINPUT_OPEN_MANAGED); + + new_device = alloc_uinput_device(libevdev_get_name(dev)); + if (!new_device) + return -ENOMEM; + + if (fd == LIBEVDEV_UINPUT_OPEN_MANAGED) { + fd = open("/dev/uinput", O_RDWR|O_CLOEXEC); + if (fd < 0) + goto error; + + new_device->fd_is_managed = 1; + } else if (fd < 0) { + log_bug(NULL, "Invalid fd %d\n", fd); + errno = EBADF; + goto error; + } + + rc = uinput_create(dev, fd, new_device); + if (rc != 0) + goto error; + /* ctime notes time before/after ioctl to help us filter out devices when traversing /sys/devices/virtual/input to find the device node.