From e222c36bb432c77da90ce39609ad4ba472550bb7 Mon Sep 17 00:00:00 2001 From: Wilmer van der Gaast Date: Thu, 7 Jun 2012 23:45:24 +0100 Subject: Add xml_generate_settings(), little less code duplication. --- storage_xml.c | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) (limited to 'storage_xml.c') diff --git a/storage_xml.c b/storage_xml.c index 4684686a..3b67edd4 100644 --- a/storage_xml.c +++ b/storage_xml.c @@ -250,11 +250,11 @@ static storage_status_t xml_check_pass( const char *my_nick, const char *passwor static gboolean xml_generate_nick( gpointer key, gpointer value, gpointer data ); +static void xml_generate_settings( struct xt_node *cur, set_t **head ); struct xt_node *xml_generate( irc_t *irc ) { char *pass_buf = NULL; - set_t *set; account_t *acc; md5_byte_t pass_md5[21]; md5_state_t md5_state; @@ -279,13 +279,7 @@ struct xt_node *xml_generate( irc_t *irc ) g_free( pass_buf ); - for( set = irc->b->set; set; set = set->next ) - if( set->value && !( set->flags & SET_NOSAVE ) ) - { - struct xt_node *xset; - xt_add_child( cur, xset = xt_new_node( "setting", set->value, NULL ) ); - xt_add_attr( xset, "name", set->key ); - } + xml_generate_settings( cur, &irc->b->set ); for( acc = irc->b->accounts; acc; acc = acc->next ) { @@ -308,14 +302,6 @@ struct xt_node *xml_generate( irc_t *irc ) g_free( pass_b64 ); - for( set = acc->set; set; set = set->next ) - if( set->value && !( set->flags & SET_NOSAVE ) ) - { - struct xt_node *xset; - xt_add_child( cur, xset = xt_new_node( "setting", set->value, NULL ) ); - xt_add_attr( xset, "name", set->key ); - } - /* This probably looks pretty strange. g_hash_table_foreach is quite a PITA already (but it can't get much better in C without using #define, I'm afraid), and since it @@ -325,6 +311,8 @@ struct xt_node *xml_generate( irc_t *irc ) something, there was an error. :-) */ g_hash_table_find( acc->nicks, xml_generate_nick, cur ); + xml_generate_settings( cur, &acc->set ); + xt_add_child( root, cur ); } @@ -339,13 +327,7 @@ struct xt_node *xml_generate( irc_t *irc ) xt_add_attr( cur, "name", ic->name ); xt_add_attr( cur, "type", set_getstr( &ic->set, "type" ) ); - for( set = ic->set; set; set = set->next ) - if( set->value && strcmp( set->key, "type" ) != 0 ) - { - struct xt_node *xset; - xt_add_child( cur, xset = xt_new_node( "setting", set->value, NULL ) ); - xt_add_attr( xset, "name", set->key ); - } + xml_generate_settings( cur, &ic->set ); xt_add_child( root, cur ); } @@ -363,6 +345,19 @@ static gboolean xml_generate_nick( gpointer key, gpointer value, gpointer data ) return FALSE; } +static void xml_generate_settings( struct xt_node *cur, set_t **head ) +{ + set_t *set; + + for( set = *head; set; set = set->next ) + if( set->value && !( set->flags & SET_NOSAVE ) ) + { + struct xt_node *xset; + xt_add_child( cur, xset = xt_new_node( "setting", set->value, NULL ) ); + xt_add_attr( xset, "name", set->key ); + } +} + static storage_status_t xml_save( irc_t *irc, int overwrite ) { storage_status_t ret = STORAGE_OK; -- cgit v1.2.3