diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2012-06-07 23:45:24 +0100 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2012-06-07 23:45:24 +0100 |
commit | e222c36bb432c77da90ce39609ad4ba472550bb7 (patch) | |
tree | 78fba49def7a9d2eb70076c8f5db86420131cc3a /storage_xml.c | |
parent | bb5ce5686638a490d21884c0d0abb7d9ced68a29 (diff) |
Add xml_generate_settings(), little less code duplication.
Diffstat (limited to 'storage_xml.c')
-rw-r--r-- | storage_xml.c | 41 |
1 files changed, 18 insertions, 23 deletions
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; |