Mercurial > pidgin
diff libpurple/xmlnode.c @ 23855:e23b447aa5ca
propagate from branch 'im.pidgin.pidgin' (head e3ceb09b71185a9074ce73733f2a65b437c9a545)
to branch 'im.pidgin.soc.2008.vv' (head a94b36f0065825b75de573746f680ae616b34f41)
| author | Mike Ruprecht <maiku@soc.pidgin.im> |
|---|---|
| date | Wed, 16 Jul 2008 21:55:08 +0000 |
| parents | 84c7bb2ca41f c4ec724b3b53 |
| children | adf153852bcf |
line wrap: on
line diff
--- a/libpurple/xmlnode.c Wed Jul 16 21:42:13 2008 +0000 +++ b/libpurple/xmlnode.c Wed Jul 16 21:55:08 2008 +0000 @@ -734,6 +734,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) { @@ -745,17 +752,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 {
