aboutsummaryrefslogtreecommitdiffstats
path: root/libgamepad_close_device.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2022-07-28 20:31:28 +0200
committerMattias Andrée <maandree@kth.se>2022-07-28 20:37:42 +0200
commit402bf1269c59db4b3a78077ab095a84181181808 (patch)
treeb9f445318d9f1e09a5af77ac39b23dc8e50c7a52 /libgamepad_close_device.c
parentMinor code improvement (diff)
downloadlibgamepad-402bf1269c59db4b3a78077ab095a84181181808.tar.gz
libgamepad-402bf1269c59db4b3a78077ab095a84181181808.tar.bz2
libgamepad-402bf1269c59db4b3a78077ab095a84181181808.tar.xz
Remove dependency on libevdev (mostly complete) + minor fixes
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'libgamepad_close_device.c')
-rw-r--r--libgamepad_close_device.c16
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;
}