From d1132cb3d17b30f36c14c5c3d7012dabadcf4d32 Mon Sep 17 00:00:00 2001 From: Camilla Berglund Date: Wed, 2 Jan 2013 01:52:28 +0100 Subject: [PATCH] Fixed Win32 joystick name memory leak. --- src/win32_init.c | 4 +++- src/win32_joystick.c | 32 +++++++++++++++++++++++++++++--- src/win32_platform.h | 8 +++++++- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/win32_init.c b/src/win32_init.c index c665825f..a77422a1 100644 --- a/src/win32_init.c +++ b/src/win32_init.c @@ -192,6 +192,8 @@ int _glfwPlatformInit(void) _glfwInitTimer(); + _glfwInitJoysticks(); + return GL_TRUE; } @@ -212,7 +214,7 @@ void _glfwPlatformTerminate(void) _glfw.win32.classAtom = 0; } - // TODO: Remove keyboard hook + _glfwTerminateJoysticks(); freeLibraries(); diff --git a/src/win32_joystick.c b/src/win32_joystick.c index 70597926..1259e826 100644 --- a/src/win32_joystick.c +++ b/src/win32_joystick.c @@ -71,6 +71,32 @@ static float calcJoystickPos(DWORD pos, DWORD min, DWORD max) } +////////////////////////////////////////////////////////////////////////// +////// GLFW internal API ////// +////////////////////////////////////////////////////////////////////////// + +//======================================================================== +// Initialize joystick interface +//======================================================================== + +void _glfwInitJoysticks(void) +{ +} + + +//======================================================================== +// Close all opened joystick handles +//======================================================================== + +void _glfwTerminateJoysticks(void) +{ + int i; + + for (i = 0; i < GLFW_JOYSTICK_LAST; i++) + free(_glfw.win32.joystick[i].name); +} + + ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// @@ -235,9 +261,9 @@ const char* _glfwPlatformGetJoystickName(int joy) _glfw_joyGetDevCaps(i, &jc, sizeof(JOYCAPS)); - free(_glfw.win32.joyNames[i]); - _glfw.win32.joyNames[i] = _glfwCreateUTF8FromWideString(jc.szPname); + free(_glfw.win32.joystick[i].name); + _glfw.win32.joystick[i].name = _glfwCreateUTF8FromWideString(jc.szPname); - return _glfw.win32.joyNames[i]; + return _glfw.win32.joystick[i].name; } diff --git a/src/win32_platform.h b/src/win32_platform.h index ee33288e..f1c72fad 100644 --- a/src/win32_platform.h +++ b/src/win32_platform.h @@ -189,7 +189,9 @@ typedef struct _GLFWlibraryWin32 } winmm; #endif // _GLFW_NO_DLOAD_WINMM - char* joyNames[GLFW_JOYSTICK_LAST + 1]; + struct { + char* name; + } joystick[GLFW_JOYSTICK_LAST + 1]; } _GLFWlibraryWin32; @@ -215,6 +217,10 @@ char* _glfwCreateUTF8FromWideString(const WCHAR* source); // Time void _glfwInitTimer(void); +// Joystick input +void _glfwInitJoysticks(void); +void _glfwTerminateJoysticks(void); + // OpenGL support int _glfwCreateContext(_GLFWwindow* window, const _GLFWwndconfig* wndconfig,