Mercurial > pidgin
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; |
