comparison 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
comparison
equal deleted inserted replaced
23854:517062503b48 23855:e23b447aa5ca
732 732
733 g_free(xpd); 733 g_free(xpd);
734 return ret; 734 return ret;
735 } 735 }
736 736
737 static void
738 xmlnode_copy_foreach_ns(gpointer key, gpointer value, gpointer user_data)
739 {
740 GHashTable *ret = (GHashTable *)user_data;
741 g_hash_table_insert(ret, g_strdup(key), g_strdup(value));
742 }
743
737 xmlnode * 744 xmlnode *
738 xmlnode_copy(const xmlnode *src) 745 xmlnode_copy(const xmlnode *src)
739 { 746 {
740 xmlnode *ret; 747 xmlnode *ret;
741 xmlnode *child; 748 xmlnode *child;
743 750
744 g_return_val_if_fail(src != NULL, NULL); 751 g_return_val_if_fail(src != NULL, NULL);
745 752
746 ret = new_node(src->name, src->type); 753 ret = new_node(src->name, src->type);
747 ret->xmlns = g_strdup(src->xmlns); 754 ret->xmlns = g_strdup(src->xmlns);
748 if(src->data) { 755 if (src->data) {
749 if(src->data_sz) { 756 if (src->data_sz) {
750 ret->data = g_memdup(src->data, src->data_sz); 757 ret->data = g_memdup(src->data, src->data_sz);
751 ret->data_sz = src->data_sz; 758 ret->data_sz = src->data_sz;
752 } else { 759 } else {
753 ret->data = g_strdup(src->data); 760 ret->data = g_strdup(src->data);
754 } 761 }
755 } 762 }
756 763 ret->prefix = g_strdup(src->prefix);
757 for(child = src->child; child; child = child->next) { 764 if (src->namespace_map) {
758 if(sibling) { 765 ret->namespace_map = g_hash_table_new_full(g_str_hash, g_str_equal,
766 g_free, g_free);
767 g_hash_table_foreach(src->namespace_map, xmlnode_copy_foreach_ns, ret->namespace_map);
768 }
769
770 for (child = src->child; child; child = child->next) {
771 if (sibling) {
759 sibling->next = xmlnode_copy(child); 772 sibling->next = xmlnode_copy(child);
760 sibling = sibling->next; 773 sibling = sibling->next;
761 } else { 774 } else {
762 ret->child = xmlnode_copy(child); 775 ret->child = xmlnode_copy(child);
763 sibling = ret->child; 776 sibling = ret->child;