diff options
author | Mattias Andrée <maandree@kth.se> | 2023-07-12 18:50:28 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@kth.se> | 2023-07-12 18:50:28 +0200 |
commit | a5adfb3ea93da5f62157bc619f9945ed4675e9e2 (patch) | |
tree | 7b784646c66d9293d18ae42e81ff5f372829d7e5 | |
parent | Add readme (diff) | |
download | libgamepad-a5adfb3ea93da5f62157bc619f9945ed4675e9e2.tar.gz libgamepad-a5adfb3ea93da5f62157bc619f9945ed4675e9e2.tar.bz2 libgamepad-a5adfb3ea93da5f62157bc619f9945ed4675e9e2.tar.xz |
Let name, unique_id, and physical_location be empty if unavailable
Signed-off-by: Mattias Andrée <maandree@kth.se>
-rw-r--r-- | libgamepad.h | 6 | ||||
-rw-r--r-- | libgamepad_open_device.c | 13 |
2 files changed, 18 insertions, 1 deletions
diff --git a/libgamepad.h b/libgamepad.h index cd574b0..f77e16b 100644 --- a/libgamepad.h +++ b/libgamepad.h @@ -1526,17 +1526,23 @@ struct libgamepad_device { /** * Human-readable device (sub- or superdevice) name + * + * Empty if not available */ char *name; /** * ID that is supposted to be unique to the device * (sub- or superdevice) + * + * Empty if not available */ char *unique_id; /** * The location if the device + * + * Empty if not available */ char *physical_location; diff --git a/libgamepad_open_device.c b/libgamepad_open_device.c index 27c5600..9fa438e 100644 --- a/libgamepad_open_device.c +++ b/libgamepad_open_device.c @@ -166,7 +166,18 @@ libgamepad_open_device(struct libgamepad_device *devicep, int dirfd, const char #define GET_STRING(EVIOCMACRO, OUTPUT)\ do {\ for (;;) {\ - DEFER_EINTR((r = ioctl(devicep->fd, EVIOCMACRO(bufsize), buf)) < 0, fail_free_buf);\ + while ((r = ioctl(devicep->fd, EVIOCMACRO(bufsize), buf)) < 0) {\ + if (errno == EINTR) {\ + devicep->internals->deferred_error = EINTR;\ + continue;\ + } else if (errno == ENOENT) {\ + if (bufsize)\ + r = 0;\ + break;\ + } else {\ + goto fail_free_buf;\ + }\ + }\ if ((size_t)r < bufsize)\ break;\ new = realloc(buf, bufsize += 32);\ |