Francois Gouget : winex11.drv: Replace an strdup() with HeapAlloc() in the OpenGL code.
Alexandre Julliard
julliard at winehq.org
Tue May 26 09:24:56 CDT 2009
Module: wine
Branch: master
Commit: c642481305fb9de241760e1aa8d13943d8bc8120
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c642481305fb9de241760e1aa8d13943d8bc8120
Author: Francois Gouget <fgouget at 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 );
More information about the wine-cvs
mailing list