commit 21b4199bf087c1ae45419434a08669eac5e718bb
parent 58da3b4e2e41a6700845df364c936acd3731b0ba
Author: Michael Forney <mforney@mforney.org>
Date: Mon, 20 Jan 2014 15:29:14 -0800
evdev_device: Fix error handling
Diffstat:
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/libswc/evdev_device.c b/libswc/evdev_device.c
@@ -200,25 +200,25 @@ struct swc_evdev_device * swc_evdev_device_new
if (device->fd == -1)
{
ERROR("Failed to open input device at %s\n", path);
- goto error0;
+ goto error1;
}
+ if (!(device->path = strdup(path)))
+ goto error2;
+
if (libevdev_new_from_fd(device->fd, &device->dev) != 0)
{
ERROR("Failed to create libevdev device\n");
- goto error1;
+ goto error3;
}
- if (!(device->path = strdup(path)))
- goto error2;
-
device->source = wl_event_loop_add_fd
(swc.event_loop, device->fd, WL_EVENT_READABLE, handle_data, device);
if (!device->source)
{
ERROR("Failed to add event source\n");
- goto error3;
+ goto error4;
}
DEBUG("Adding device %s\n", libevdev_get_name(device->dev));
@@ -245,12 +245,14 @@ struct swc_evdev_device * swc_evdev_device_new
return device;
- error3:
+ error4:
libevdev_free(device->dev);
+ error3:
+ free(device->path);
error2:
- libevdev_free(device->dev);
- error1:
close(device->fd);
+ error1:
+ free(device);
error0:
return NULL;
}