From 9dee4db9d7de1ee42df5a477251858b13ab3fce8 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 31 May 2013 11:26:58 +1000 Subject: Split libevdev_new() into _new and _new_from_fd() libevdev_new() can only fail on allocation failures, but with an fd the failure options are more. Split into a new function that can return an error code. Signed-off-by: Peter Hutterer --- libevdev/libevdev.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'libevdev/libevdev.c') diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index 81bee60..877abba 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -144,24 +144,39 @@ libevdev_noop_log_func(const char *format, va_list args) } struct libevdev* -libevdev_new(int fd) +libevdev_new(void) { struct libevdev *dev; dev = calloc(1, sizeof(*dev)); if (!dev) return NULL; + dev->fd = -1; dev->num_slots = -1; dev->current_slot = -1; dev->log = libevdev_noop_log_func; - if (fd >= 0) - libevdev_set_fd(dev, fd); - dev->fd = fd; - return dev; } +int +libevdev_new_from_fd(int fd, struct libevdev **dev) +{ + struct libevdev *d; + int rc; + + d = libevdev_new(); + if (!d) + return -ENOSPC; + + rc = libevdev_set_fd(d, fd); + if (rc < 0) + libevdev_free(d); + else + *dev = d; + return rc; +} + void libevdev_free(struct libevdev *dev) { -- cgit v1.2.1