summaryrefslogtreecommitdiff
path: root/libevdev/libevdev.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-05-31 11:26:58 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-05-31 15:24:58 +1000
commit9dee4db9d7de1ee42df5a477251858b13ab3fce8 (patch)
tree48b59f39fa472888df34ed6a14741fb47cac2dde /libevdev/libevdev.c
parent0867f2f10a99c9e2ab643699406a8eb32384f044 (diff)
downloadlibevdev-9dee4db9d7de1ee42df5a477251858b13ab3fce8.tar.gz
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 <peter.hutterer@who-t.net>
Diffstat (limited to 'libevdev/libevdev.c')
-rw-r--r--libevdev/libevdev.c25
1 files changed, 20 insertions, 5 deletions
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)
{