diff options
-rw-r--r-- | libxklavier/xklavier_config_xkb.c | 16 | ||||
-rw-r--r-- | libxklavier/xklavier_private.h | 3 | ||||
-rw-r--r-- | libxklavier/xklavier_props.c | 3 |
3 files changed, 13 insertions, 9 deletions
diff --git a/libxklavier/xklavier_config_xkb.c b/libxklavier/xklavier_config_xkb.c index 1d0af43..a0ee621 100644 --- a/libxklavier/xklavier_config_xkb.c +++ b/libxklavier/xklavier_config_xkb.c @@ -36,13 +36,17 @@ static char *locale; static char* _XklGetRulesSet( void ) { - static char* rf = NULL; - if ( rf == NULL ) - if( !XklGetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM], &rf, NULL ) ) + static char rulesSet[_XKB_RF_NAMES_PROP_MAXLEN] = ""; + if ( !rulesSet[0] ) + { + char* rf = NULL; + if( !XklGetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM], &rf, NULL ) || ( rf == NULL ) ) return NULL; - XklDebug( 100, "Rules set: [%s]\n", rf ); - return rf; -//!! tiny memory leak which hopefully can be afforded + strncpy( rulesSet, rf, sizeof rulesSet ); + free( rf ); + } + XklDebug( 100, "Rules set: [%s]\n", rulesSet ); + return rulesSet; } Bool XklConfigLoadRegistry( void ) diff --git a/libxklavier/xklavier_private.h b/libxklavier/xklavier_private.h index d0a894e..6707450 100644 --- a/libxklavier/xklavier_private.h +++ b/libxklavier/xklavier_private.h @@ -108,6 +108,9 @@ extern char *_xklIndicatorNames[]; #define XKLAVIER_STATE_PROP_LENGTH 2 +// taken from XFree86 maprules.c +#define _XKB_RF_NAMES_PROP_MAXLEN 1024 + extern Atom _xklAtoms[]; extern Bool _xklAllowSecondaryGroupOnce; diff --git a/libxklavier/xklavier_props.c b/libxklavier/xklavier_props.c index 83518f4..f0363a6 100644 --- a/libxklavier/xklavier_props.c +++ b/libxklavier/xklavier_props.c @@ -206,9 +206,6 @@ Bool XklRestoreNamesProp( ) return rv; } -// taken from XFree86 maprules.c -#define _XKB_RF_NAMES_PROP_MAXLEN 1024 - Bool XklGetNamesProp( Atom rulesAtom, char **rulesFileOut, XklConfigRecPtr data ) { |