diff options
author | Sergey Udaltsov <svu@gnome.org> | 2004-01-11 00:51:10 +0000 |
---|---|---|
committer | Sergey Udaltsov <svu@gnome.org> | 2004-01-11 00:51:10 +0000 |
commit | 476b2173a53161b5694185d7231bb593b2c1dc00 (patch) | |
tree | bf9cdd8a48f75687a506c1ab3e52ffecfd7a4536 | |
parent | 38dc7b519ac5039e9788bf76cc74e649a5344735 (diff) | |
download | libxklavier-476b2173a53161b5694185d7231bb593b2c1dc00.tar.gz |
One extra function to compare configurations
-rw-r--r-- | libxklavier/xklavier_config.h | 12 | ||||
-rw-r--r-- | libxklavier/xklavier_props.c | 36 |
2 files changed, 46 insertions, 2 deletions
diff --git a/libxklavier/xklavier_config.h b/libxklavier/xklavier_config.h index 5087314..f59988b 100644 --- a/libxklavier/xklavier_config.h +++ b/libxklavier/xklavier_config.h @@ -365,12 +365,12 @@ extern "C" /** * @defgroup xklconfig XklConfigRec management utilities - * Little utilities for initing/destroying/resetting XklConfigRec. + * Little utilities for managing XklConfigRec. * @{ */ /** - * Initializes the record (actually, fills it with 0-s + * Initializes the record (actually, fills it with 0-s) * @param data is a record to initialize */ extern void XklConfigRecInit( XklConfigRecPtr data ); @@ -387,6 +387,14 @@ extern "C" */ extern void XklConfigRecDestroy( XklConfigRecPtr data ); +/** + * Compares the records + * @param data1 is a record to compare + * @param data2 is another record + * @return True if records are same + */ + extern Bool XklConfigRecEquals( XklConfigRecPtr data1, XklConfigRecPtr data2 ); + /** @} */ #ifdef __cplusplus diff --git a/libxklavier/xklavier_props.c b/libxklavier/xklavier_props.c index 5fb861c..53aaab8 100644 --- a/libxklavier/xklavier_props.c +++ b/libxklavier/xklavier_props.c @@ -19,6 +19,42 @@ void XklConfigRecInit( XklConfigRecPtr data ) memset( ( void * ) data, 0, sizeof( XklConfigRec ) ); } +static Bool PtrsEqual( char* p1, char* p2 ) +{ + if ( p1 == NULL && p2 == NULL ) + return True; + if ( ( p1 == NULL && p2 != NULL ) || + ( p1 != NULL && p2 == NULL ) ) + return False; + return !strcmp( p1, p2 ); +} + +static Bool ListsEqual( int numItems1, char** items1, + int numItems2, char** items2 ) +{ + int i; + if ( numItems1 != numItems2 ) + return False; + for( i = numItems1; --i >= 0; ) + if ( !PtrsEqual( *items1++ , *items2++ ) ) + return False; + return True; +} + +Bool XklConfigRecEquals( XklConfigRecPtr data1, XklConfigRecPtr data2 ) +{ + if ( !PtrsEqual( data1->model, data2->model ) ) + return False; + if ( !ListsEqual( data1->numLayouts, data1->layouts, + data2->numLayouts, data2->layouts ) ) + return False; + if ( !ListsEqual( data1->numVariants, data1->variants, + data2->numVariants, data2->variants ) ) + return False; + return ListsEqual( data1->numOptions, data1->options, + data2->numOptions, data2->options ); +} + void XklConfigRecDestroy( XklConfigRecPtr data ) { int i; |