diff options
| author | Peter Hutterer <peter.hutterer@who-t.net> | 2013-05-31 11:26:58 +1000 |
|---|---|---|
| committer | Peter Hutterer <peter.hutterer@who-t.net> | 2013-05-31 15:24:58 +1000 |
| commit | 9dee4db9d7de1ee42df5a477251858b13ab3fce8 (patch) | |
| tree | 48b59f39fa472888df34ed6a14741fb47cac2dde /libevdev/libevdev.c | |
| parent | 0867f2f10a99c9e2ab643699406a8eb32384f044 (diff) | |
| download | libevdev-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.c | 25 |
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) { |
