aboutsummaryrefslogtreecommitdiffstats
path: root/libgamepad_open_device.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgamepad_open_device.c')
-rw-r--r--libgamepad_open_device.c13
1 files changed, 12 insertions, 1 deletions
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);\