Fixed Win32 joystick name memory leak.

This commit is contained in:
Camilla Berglund 2013-01-02 01:52:28 +01:00
parent b72a97d531
commit d1132cb3d1
3 changed files with 39 additions and 5 deletions

View File

@ -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();

View File

@ -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;
}

View File

@ -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,