Index: src/hid/platform/Linux/OFGameController.m ================================================================== --- src/hid/platform/Linux/OFGameController.m +++ src/hid/platform/Linux/OFGameController.m @@ -397,10 +397,12 @@ - (void)retrieveState { struct input_event event; for (;;) { + OFGameControllerButton button; + errno = 0; if (read(_fd, &event, sizeof(event)) < (int)sizeof(event)) { if (errno == EWOULDBLOCK) return; @@ -411,16 +413,17 @@ errNo: errno]; } switch (event.type) { case EV_KEY: - if (event.value) - [_pressedButtons addObject: buttonToName( - event.code, _vendorID, _productID)]; - else - [_pressedButtons removeObject: buttonToName( - event.code, _vendorID, _productID)]; + if ((button = buttonToName(event.code, _vendorID, + _productID)) != nil) { + if (event.value) + [_pressedButtons addObject: button]; + else + [_pressedButtons removeObject: button]; + } break; case EV_ABS: switch (event.code) { case ABS_X: _leftAnalogStickPosition.x = scale(event.value,