# HG changeset patch # User Elliott Sales de Andrade # Date 1214636130 0 # Node ID c4ec724b3b5396a9c601796ba233c43bc60b1f49 # Parent 3e3f5a25a135a7efa7016309309d5489ba091b64 Make sure xmlnode_copy also copies the prefix and namespace_map from the source xmlnode. This should fix operations on MSN member role lists. That means blocking and unblocking should work now. And removing new buddies from the pending list too, so you shouldn't get asked to add them every time you log in. diff -r 3e3f5a25a135 -r c4ec724b3b53 libpurple/xmlnode.c --- a/libpurple/xmlnode.c Sat Jun 28 06:02:50 2008 +0000 +++ b/libpurple/xmlnode.c Sat Jun 28 06:55:30 2008 +0000 @@ -728,6 +728,13 @@ return ret; } +static void +xmlnode_copy_foreach_ns(gpointer key, gpointer value, gpointer user_data) +{ + GHashTable *ret = (GHashTable *)user_data; + g_hash_table_insert(ret, g_strdup(key), g_strdup(value)); +} + xmlnode * xmlnode_copy(const xmlnode *src) { @@ -739,17 +746,23 @@ ret = new_node(src->name, src->type); ret->xmlns = g_strdup(src->xmlns); - if(src->data) { - if(src->data_sz) { + if (src->data) { + if (src->data_sz) { ret->data = g_memdup(src->data, src->data_sz); ret->data_sz = src->data_sz; } else { ret->data = g_strdup(src->data); } } + ret->prefix = g_strdup(src->prefix); + if (src->namespace_map) { + ret->namespace_map = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, g_free); + g_hash_table_foreach(src->namespace_map, xmlnode_copy_foreach_ns, ret->namespace_map); + } - for(child = src->child; child; child = child->next) { - if(sibling) { + for (child = src->child; child; child = child->next) { + if (sibling) { sibling->next = xmlnode_copy(child); sibling = sibling->next; } else {