Module: wine Branch: master Commit: c642481305fb9de241760e1aa8d13943d8bc8120 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c642481305fb9de241760e1aa8...
Author: Francois Gouget fgouget@free.fr Date: Tue May 26 00:52:05 2009 +0200
winex11.drv: Replace an strdup() with HeapAlloc() in the OpenGL code.
Free the corresponding memory when the library is unloaded.
---
dlls/winex11.drv/opengl.c | 15 ++++++++++++--- dlls/winex11.drv/x11drv.h | 1 + dlls/winex11.drv/x11drv_main.c | 1 + 3 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c index b15b4e2..30eb95b 100644 --- a/dlls/winex11.drv/opengl.c +++ b/dlls/winex11.drv/opengl.c @@ -76,7 +76,7 @@ typedef struct wine_glextension {
struct WineGLInfo { const char *glVersion; - const char *glExtensions; + char *glExtensions;
int glxVersion[2];
@@ -274,12 +274,13 @@ MAKE_FUNCPTR(glFinish) MAKE_FUNCPTR(glFlush) #undef MAKE_FUNCPTR
+static BOOL infoInitialized = FALSE; static BOOL X11DRV_WineGL_InitOpenglInfo(void) { - static BOOL infoInitialized = FALSE;
int screen = DefaultScreen(gdi_display); Window win = RootWindow(gdi_display, screen); + const char* str; Visual *visual; XVisualInfo template; XVisualInfo *vis; @@ -318,7 +319,9 @@ static BOOL X11DRV_WineGL_InitOpenglInfo(void) }
WineGLInfo.glVersion = (const char *) pglGetString(GL_VERSION); - WineGLInfo.glExtensions = strdup((const char *) pglGetString(GL_EXTENSIONS)); + str = (const char *) pglGetString(GL_EXTENSIONS); + WineGLInfo.glExtensions = HeapAlloc(GetProcessHeap(), 0, strlen(str)+1); + strcpy(WineGLInfo.glExtensions, str);
/* Get the common GLX version supported by GLX client and server ( major/minor) */ pglXQueryVersion(gdi_display, &WineGLInfo.glxVersion[0], &WineGLInfo.glxVersion[1]); @@ -352,6 +355,12 @@ static BOOL X11DRV_WineGL_InitOpenglInfo(void) return TRUE; }
+void X11DRV_OpenGL_Cleanup(void) +{ + HeapFree(GetProcessHeap(), 0, WineGLInfo.glExtensions); + infoInitialized = FALSE; +} + static BOOL has_opengl(void) { static int init_done; diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index 7d0b2ba..b11e6a1 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -226,6 +226,7 @@ extern int CDECL X11DRV_DescribePixelFormat(X11DRV_PDEVICE *physDev, PIXELFORMATDESCRIPTOR *ppfd); extern int CDECL X11DRV_GetPixelFormat(X11DRV_PDEVICE *physDev); extern BOOL CDECL X11DRV_SwapBuffers(X11DRV_PDEVICE *physDev); +extern void X11DRV_OpenGL_Cleanup(void);
/* X11 driver internal functions */
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c index 020d6b5..41c866c 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c @@ -587,6 +587,7 @@ static void process_detach(void)
/* cleanup GDI */ X11DRV_GDI_Finalize(); + X11DRV_OpenGL_Cleanup();
IME_UnregisterClasses(); DeleteCriticalSection( &X11DRV_CritSection );