aboutsummaryrefslogtreecommitdiffstats
path: root/storage_xml.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2012-06-07 23:45:24 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2012-06-07 23:45:24 +0100
commite222c36bb432c77da90ce39609ad4ba472550bb7 (patch)
tree78fba49def7a9d2eb70076c8f5db86420131cc3a /storage_xml.c
parentbb5ce5686638a490d21884c0d0abb7d9ced68a29 (diff)
Add xml_generate_settings(), little less code duplication.
Diffstat (limited to 'storage_xml.c')
-rw-r--r--storage_xml.c41
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;