summaryrefslogtreecommitdiff
path: root/libs/raylib/src/external/glfw/src/linux_joystick.c
diff options
context:
space:
mode:
Diffstat (limited to 'libs/raylib/src/external/glfw/src/linux_joystick.c')
-rw-r--r--libs/raylib/src/external/glfw/src/linux_joystick.c97
1 files changed, 46 insertions, 51 deletions
diff --git a/libs/raylib/src/external/glfw/src/linux_joystick.c b/libs/raylib/src/external/glfw/src/linux_joystick.c
index 1f9b35f..122bc66 100644
--- a/libs/raylib/src/external/glfw/src/linux_joystick.c
+++ b/libs/raylib/src/external/glfw/src/linux_joystick.c
@@ -264,9 +264,50 @@ static int compareJoysticks(const void* fp, const void* sp)
////// GLFW internal API //////
//////////////////////////////////////////////////////////////////////////
-// Initialize joystick interface
-//
-GLFWbool _glfwInitJoysticksLinux(void)
+void _glfwDetectJoystickConnectionLinux(void)
+{
+ if (_glfw.linjs.inotify <= 0)
+ return;
+
+ ssize_t offset = 0;
+ char buffer[16384];
+ const ssize_t size = read(_glfw.linjs.inotify, buffer, sizeof(buffer));
+
+ while (size > offset)
+ {
+ regmatch_t match;
+ const struct inotify_event* e = (struct inotify_event*) (buffer + offset);
+
+ offset += sizeof(struct inotify_event) + e->len;
+
+ if (regexec(&_glfw.linjs.regex, e->name, 1, &match, 0) != 0)
+ continue;
+
+ char path[PATH_MAX];
+ snprintf(path, sizeof(path), "/dev/input/%s", e->name);
+
+ if (e->mask & (IN_CREATE | IN_ATTRIB))
+ openJoystickDevice(path);
+ else if (e->mask & IN_DELETE)
+ {
+ for (int jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++)
+ {
+ if (strcmp(_glfw.joysticks[jid].linjs.path, path) == 0)
+ {
+ closeJoystick(_glfw.joysticks + jid);
+ break;
+ }
+ }
+ }
+ }
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+////// GLFW platform API //////
+//////////////////////////////////////////////////////////////////////////
+
+GLFWbool _glfwPlatformInitJoysticks(void)
{
const char* dirname = "/dev/input";
@@ -320,9 +361,7 @@ GLFWbool _glfwInitJoysticksLinux(void)
return GLFW_TRUE;
}
-// Close all opened joystick handles
-//
-void _glfwTerminateJoysticksLinux(void)
+void _glfwPlatformTerminateJoysticks(void)
{
int jid;
@@ -333,60 +372,16 @@ void _glfwTerminateJoysticksLinux(void)
closeJoystick(js);
}
- regfree(&_glfw.linjs.regex);
-
if (_glfw.linjs.inotify > 0)
{
if (_glfw.linjs.watch > 0)
inotify_rm_watch(_glfw.linjs.inotify, _glfw.linjs.watch);
close(_glfw.linjs.inotify);
+ regfree(&_glfw.linjs.regex);
}
}
-void _glfwDetectJoystickConnectionLinux(void)
-{
- if (_glfw.linjs.inotify <= 0)
- return;
-
- ssize_t offset = 0;
- char buffer[16384];
- const ssize_t size = read(_glfw.linjs.inotify, buffer, sizeof(buffer));
-
- while (size > offset)
- {
- regmatch_t match;
- const struct inotify_event* e = (struct inotify_event*) (buffer + offset);
-
- offset += sizeof(struct inotify_event) + e->len;
-
- if (regexec(&_glfw.linjs.regex, e->name, 1, &match, 0) != 0)
- continue;
-
- char path[PATH_MAX];
- snprintf(path, sizeof(path), "/dev/input/%s", e->name);
-
- if (e->mask & (IN_CREATE | IN_ATTRIB))
- openJoystickDevice(path);
- else if (e->mask & IN_DELETE)
- {
- for (int jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++)
- {
- if (strcmp(_glfw.joysticks[jid].linjs.path, path) == 0)
- {
- closeJoystick(_glfw.joysticks + jid);
- break;
- }
- }
- }
- }
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-////// GLFW platform API //////
-//////////////////////////////////////////////////////////////////////////
-
int _glfwPlatformPollJoystick(_GLFWjoystick* js, int mode)
{
// Read all queued events (non-blocking)