summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Udaltsov <svu@gnome.org>2004-12-29 01:52:00 +0000
committerSergey Udaltsov <svu@gnome.org>2004-12-29 01:52:00 +0000
commita0d36aca420bb50fdad5eac7867ffa52beb800df (patch)
tree78b19066bd1449ee0a1122b752e0b175bf34a25c
parent8657f4a4a831cc24cce190e1da59a60ff392a152 (diff)
downloadlibxklavier-a0d36aca420bb50fdad5eac7867ffa52beb800df.tar.gz
fixing the memory leak
-rw-r--r--libxklavier/xklavier_xkb.c22
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",