From: Gildas Bazin Date: Thu, 16 Dec 2004 13:59:51 +0000 (+0000) Subject: * modules/gui/skins2/*: fixed a whole bunch of memory leaks. X-Git-Tag: 0.8.2~1476 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=798c883b4d3d72314d2eed451f3873a7354bb01d;p=vlc * modules/gui/skins2/*: fixed a whole bunch of memory leaks. --- diff --git a/modules/gui/skins2/parser/interpreter.cpp b/modules/gui/skins2/parser/interpreter.cpp index 5f75b8ebae..2b0d208a5b 100644 --- a/modules/gui/skins2/parser/interpreter.cpp +++ b/modules/gui/skins2/parser/interpreter.cpp @@ -186,14 +186,14 @@ VarBool *Interpreter::getVarBool( const string &rName, Theme *pTheme ) { VarManager *pVarManager = VarManager::instance( getIntf() ); - // Convert the expression into Reverse Polish Notation - ExprEvaluator *pEvaluator = new ExprEvaluator( getIntf() ); - pEvaluator->parse( rName ); + // Convert the expression into Reverse Polish Notation + ExprEvaluator evaluator( getIntf() ); + evaluator.parse( rName ); list varStack; // Get the first token from the RPN stack - string token = pEvaluator->getToken(); + string token = evaluator.getToken(); while( !token.empty() ) { if( token == "and" ) @@ -295,7 +295,7 @@ VarBool *Interpreter::getVarBool( const string &rName, Theme *pTheme ) varStack.push_back( pVar ); } // Get the first token from the RPN stack - token = pEvaluator->getToken(); + token = evaluator.getToken(); } // The stack should contain a single variable diff --git a/modules/gui/skins2/parser/xmlparser.cpp b/modules/gui/skins2/parser/xmlparser.cpp index 37ff58e998..1d9734116d 100644 --- a/modules/gui/skins2/parser/xmlparser.cpp +++ b/modules/gui/skins2/parser/xmlparser.cpp @@ -149,11 +149,13 @@ bool XMLParser::parse() } handleBeginElement( eltName, attributes ); + free( eltName ); map ::iterator it = attributes.begin(); while( it != attributes.end() ) { + free( (char *)it->first ); free( (char *)it->second ); it++; } diff --git a/modules/gui/skins2/src/theme.cpp b/modules/gui/skins2/src/theme.cpp index b91f6c0403..d244d9b394 100755 --- a/modules/gui/skins2/src/theme.cpp +++ b/modules/gui/skins2/src/theme.cpp @@ -45,8 +45,7 @@ void Theme::loadConfig() // Get config from vlcrc file char *save = config_GetPsz( getIntf(), "skins2-config" ); - if( save == NULL ) - return; + if( !save ) return; // Initialization map::const_iterator it; @@ -75,6 +74,7 @@ void Theme::loadConfig() // Next window i++; } + free( save ); } diff --git a/modules/gui/skins2/src/theme_loader.cpp b/modules/gui/skins2/src/theme_loader.cpp index a80d1a7f7c..8385f45ed4 100755 --- a/modules/gui/skins2/src/theme_loader.cpp +++ b/modules/gui/skins2/src/theme_loader.cpp @@ -97,6 +97,7 @@ bool ThemeLoader::load( const string &fileName ) // Show the windows pNewTheme->getWindowManager().showAll(); } + if( skin_last ) free( skin_last ); return true; } @@ -244,6 +245,7 @@ bool ThemeLoader::findThemeFile( const string &rootDir, string &themeFilePath ) // Can we find the theme file in this subdirectory? if( findThemeFile( newURI, themeFilePath ) ) { + closedir( pCurrDir ); return true; } } @@ -254,6 +256,7 @@ bool ThemeLoader::findThemeFile( const string &rootDir, string &themeFilePath ) string( pDirContent->d_name ) ) { themeFilePath = newURI; + closedir( pCurrDir ); return true; } } @@ -262,6 +265,7 @@ bool ThemeLoader::findThemeFile( const string &rootDir, string &themeFilePath ) pDirContent = readdir( pCurrDir ); } + closedir( pCurrDir ); return false; } diff --git a/modules/gui/skins2/src/theme_repository.cpp b/modules/gui/skins2/src/theme_repository.cpp index ba27afaed2..b6c3f2898a 100755 --- a/modules/gui/skins2/src/theme_repository.cpp +++ b/modules/gui/skins2/src/theme_repository.cpp @@ -135,6 +135,8 @@ void ThemeRepository::parseDirectory( const string &rDir ) pDirContent = readdir( pDir ); } + + closedir( pDir ); } diff --git a/modules/gui/skins2/vars/playlist.cpp b/modules/gui/skins2/vars/playlist.cpp index f076c57e3b..da3d1c81d0 100644 --- a/modules/gui/skins2/vars/playlist.cpp +++ b/modules/gui/skins2/vars/playlist.cpp @@ -34,7 +34,7 @@ Playlist::Playlist( intf_thread_t *pIntf ): VarList( pIntf ) m_pPlaylist = pIntf->p_sys->p_playlist; // Try to guess the current charset - char *pCharset = (char*)malloc( 100 ); + char *pCharset; vlc_current_charset( &pCharset ); iconvHandle = vlc_iconv_open( "UTF-8", pCharset ); msg_Dbg( pIntf, "Using character encoding: %s", pCharset ); diff --git a/modules/gui/skins2/x11/x11_display.cpp b/modules/gui/skins2/x11/x11_display.cpp index 2ac70ad7ce..e5a61b8f7c 100644 --- a/modules/gui/skins2/x11/x11_display.cpp +++ b/modules/gui/skins2/x11/x11_display.cpp @@ -211,8 +211,10 @@ X11Display::X11Display( intf_thread_t *pIntf ): SkinObject( pIntf ), // Set an empty mask for the window Region mask = XCreateRegion(); - XShapeCombineRegion( m_pDisplay, m_mainWindow, ShapeBounding, 0, 0, mask, - ShapeSet ); + XShapeCombineRegion( m_pDisplay, m_mainWindow, ShapeBounding, 0, 0, + mask, ShapeSet ); + XDestroyRegion( mask ); + // Map the window XMapWindow( m_pDisplay, m_mainWindow);