Using LIBEVDEV_UINPUT_OPEN_MANAGED can leak the fd if an error occurs after
opening it.
Found by Coverity.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
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)
error:
rc = -errno;
libevdev_uinput_destroy(new_device);
+ if (fd != -1 && close_fd_on_error)
+ close(fd);
return rc;
}