diff options
Diffstat (limited to 'storage_xml.c')
-rw-r--r-- | storage_xml.c | 29 |
1 files changed, 9 insertions, 20 deletions
diff --git a/storage_xml.c b/storage_xml.c index a1892e73..0dd4ec53 100644 --- a/storage_xml.c +++ b/storage_xml.c @@ -258,7 +258,6 @@ static storage_status_t xml_check_pass(const char *my_nick, const char *password } -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) @@ -291,6 +290,8 @@ struct xt_node *xml_generate(irc_t *irc) xml_generate_settings(cur, &irc->b->set); for (acc = irc->b->accounts; acc; acc = acc->next) { + GHashTableIter iter; + gpointer key, value; unsigned char *pass_cr; char *pass_b64; int pass_len; @@ -311,14 +312,13 @@ struct xt_node *xml_generate(irc_t *irc) g_free(pass_b64); - /* 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 it - doesn't seem to be possible to abort the foreach on write - errors, so instead let's use the _find function and - return TRUE on write errors. Which means, if we found - something, there was an error. :-) */ - g_hash_table_find(acc->nicks, xml_generate_nick, cur); + g_hash_table_iter_init(&iter, acc->nicks); + while (g_hash_table_iter_next(&iter, &key, &value)) { + struct xt_node *node = xt_new_node("buddy", NULL, NULL); + xt_add_attr(node, "handle", key); + xt_add_attr(node, "nick", value); + xt_add_child(cur, node); + } xml_generate_settings(cur, &acc->set); @@ -344,17 +344,6 @@ struct xt_node *xml_generate(irc_t *irc) return root; } -static gboolean xml_generate_nick(gpointer key, gpointer value, gpointer data) -{ - struct xt_node *node = xt_new_node("buddy", NULL, NULL); - - xt_add_attr(node, "handle", key); - xt_add_attr(node, "nick", value); - xt_add_child((struct xt_node *) data, node); - - return FALSE; -} - static void xml_generate_settings(struct xt_node *cur, set_t **head) { set_t *set; |