From a0d36aca420bb50fdad5eac7867ffa52beb800df Mon Sep 17 00:00:00 2001 From: Sergey Udaltsov Date: Wed, 29 Dec 2004 01:52:00 +0000 Subject: fixing the memory leak --- libxklavier/xklavier_xkb.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/libxklavier/xklavier_xkb.c b/libxklavier/xklavier_xkb.c index 09edd2f..ea6d080 100644 --- a/libxklavier/xklavier_xkb.c +++ b/libxklavier/xklavier_xkb.c @@ -90,6 +90,14 @@ unsigned _XklXkbGetNumGroups( void ) void _XklXkbFreeAllInfo( ) { + int i; + char **pi = _xklIndicatorNames; + for( i = 0; i < XkbNumIndicators; i++, pi++ ) + { + /* only free non-empty ones */ + if( *pi && **pi ) + XFree( *pi ); + } if( _xklXkb != NULL ) { int i; @@ -111,9 +119,10 @@ void _XklXkbFreeAllInfo( ) Bool _XklXkbLoadAllInfo( ) { int i; - unsigned bit; Atom *gna; + Atom *pia; char **groupName; + char **pi = _xklIndicatorNames; _xklXkb = XkbGetMap( _xklDpy, KBD_MASK, XkbUseCoreKbd ); if( _xklXkb == NULL ) @@ -159,15 +168,16 @@ Bool _XklXkbLoadAllInfo( ) return False; } - for( i = 0, bit = 1; i < XkbNumIndicators; i++, bit <<= 1 ) + pia = _xklXkb->names->indicators; + for( i = XkbNumIndicators; --i>=0; pi++, pia++ ) { - Atom a = _xklXkb->names->indicators[i]; + Atom a = *pia; if( a != None ) - _xklIndicatorNames[i] = XGetAtomName( _xklDpy, a ); + *pi = XGetAtomName( _xklDpy, a ); else - _xklIndicatorNames[i] = ""; + *pi = ""; - XklDebug( 200, "Indicator[%d] is %s\n", i, _xklIndicatorNames[i] ); + XklDebug( 200, "Indicator[%d] is %s\n", i, *pi ); } XklDebug( 200, "Real indicators are %X\n", -- cgit v1.2.1