diff options
Diffstat (limited to '')
-rw-r--r-- | libgamepad_close_device.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/libgamepad_close_device.c b/libgamepad_close_device.c index 273c7f8..896d22e 100644 --- a/libgamepad_close_device.c +++ b/libgamepad_close_device.c @@ -2,17 +2,20 @@ #include "common.h" -void +int libgamepad_close_device(struct libgamepad_device *device) { + int deferred_error = 0; if (device) { if (device->internals) { + deferred_error = device->internals->deferred_error; if (device->internals->close_fd) - close(device->fd); - if (device->internals->dev) - libevdev_free(device->internals->dev); + if (close(device->fd)) + if (!deferred_error) + deferred_error = errno; free(device->internals->absinfo); free(device->internals->buttons); + free(device->internals->evbuf); free(device->internals); device->internals = NULL; } @@ -28,5 +31,10 @@ libgamepad_close_device(struct libgamepad_device *device) device->name = NULL; device->unique_id = NULL; device->physical_location = NULL; + if (deferred_error) { + errno = deferred_error; + return -1; + } } + return 0; } |