diff options
author | Sergey Udaltsov <svu@gnome.org> | 2004-12-29 01:52:00 +0000 |
---|---|---|
committer | Sergey Udaltsov <svu@gnome.org> | 2004-12-29 01:52:00 +0000 |
commit | a0d36aca420bb50fdad5eac7867ffa52beb800df (patch) | |
tree | 78b19066bd1449ee0a1122b752e0b175bf34a25c | |
parent | 8657f4a4a831cc24cce190e1da59a60ff392a152 (diff) | |
download | libxklavier-a0d36aca420bb50fdad5eac7867ffa52beb800df.tar.gz |
fixing the memory leak
-rw-r--r-- | libxklavier/xklavier_xkb.c | 22 |
1 files 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", |