Revision: 45622
http://sourceforge.net/p/vice-emu/code/45622
Author: compyx
Date: 2025-04-02 06:30:48 +0000 (Wed, 02 Apr 2025)
Log Message:
-----------
Joystick: reject devices based on number of inputs
Reject devices when calling `joystick_device_register()` if the device in
question doesn't at least have one button and either at least two axes or at
least one hat. Call `driver->close()` and `joystick_device_free()` on rejected
device so the driver doesn't have to worry about cleaning up.
Modified Paths:
--------------
trunk/vice/src/arch/gtk3/joystickdrv/joystick_linux_evdev.c
trunk/vice/src/joyport/joystick.c
Modified: trunk/vice/src/arch/gtk3/joystickdrv/joystick_linux_evdev.c
===================================================================
--- trunk/vice/src/arch/gtk3/joystickdrv/joystick_linux_evdev.c 2025-04-01 22:10:11 UTC (rev 45621)
+++ trunk/vice/src/arch/gtk3/joystickdrv/joystick_linux_evdev.c 2025-04-02 06:30:48 UTC (rev 45622)
@@ -234,8 +234,12 @@
if (joydev != NULL && joydev->priv != NULL) {
joy_priv_t *priv = joydev->priv;
- close(priv->fd);
- libevdev_free(priv->evdev);
+ if (priv->fd >= 0) {
+ close(priv->fd);
+ }
+ if (priv->evdev != NULL) {
+ libevdev_free(priv->evdev);
+ }
priv->fd = -1;
priv->evdev = NULL;
}
@@ -413,11 +417,7 @@
//log_message(joy_evdev_log, "Possible device '%s'", namelist[i]->d_name);
joydev = scan_device(namelist[i]->d_name);
if (joydev != NULL) {
- if (!joystick_device_register(joydev)) {
- log_message(joy_evdev_log,
- "Failed to add device, continuing with next device.");
- joystick_device_free(joydev);
- }
+ joystick_device_register(joydev);
}
}
free(namelist);
Modified: trunk/vice/src/joyport/joystick.c
===================================================================
--- trunk/vice/src/joyport/joystick.c 2025-04-01 22:10:11 UTC (rev 45621)
+++ trunk/vice/src/joyport/joystick.c 2025-04-02 06:30:48 UTC (rev 45622)
@@ -3636,8 +3636,12 @@
*/
bool joystick_device_register(joystick_device_t *joydev)
{
- if (joydev == NULL || joydev->name == NULL) {
- /* TODO: reject devices with too little inputs */
+ /* reject devices with too little inputs */
+ if (!((joydev->num_axes >= 2 || joydev->num_hats >= 1) &&
+ joydev->num_buttons >= 1)) {
+ /* close and free device */
+ joy_driver.close(joydev);
+ joystick_device_free(joydev);
return false;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|