diff options
| author | 2009-07-09 18:28:26 +0200 | |
|---|---|---|
| committer | 2009-07-09 18:28:26 +0200 | |
| commit | 365e1199ee8d42b3ee66b098f883b08bb172d51f (patch) | |
| tree | decef46e9d5dee206b081cd4cf45cfd6c5482891 | |
| parent | 192f335086e55e5e550557e630c5b9de461570d0 (diff) | |
| download | libplist-365e1199ee8d42b3ee66b098f883b08bb172d51f.tar.gz libplist-365e1199ee8d42b3ee66b098f883b08bb172d51f.tar.bz2 | |
Make copy_plist actually copy plists (previously always returning NULL).
| -rw-r--r-- | src/plist.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/plist.c b/src/plist.c index cd563aa..c205d46 100644 --- a/src/plist.c +++ b/src/plist.c | |||
| @@ -139,7 +139,7 @@ void plist_free(plist_t plist) | |||
| 139 | g_node_destroy(plist); | 139 | g_node_destroy(plist); |
| 140 | } | 140 | } |
| 141 | 141 | ||
| 142 | static void plist_copy_node(GNode * node, gpointer parent_node) | 142 | static void plist_copy_node(GNode * node, gpointer parent_node_ptr) |
| 143 | { | 143 | { |
| 144 | plist_t newnode = NULL; | 144 | plist_t newnode = NULL; |
| 145 | plist_data_t data = plist_get_data(node); | 145 | plist_data_t data = plist_get_data(node); |
| @@ -150,15 +150,21 @@ static void plist_copy_node(GNode * node, gpointer parent_node) | |||
| 150 | memcpy(newdata, data, sizeof(struct plist_data_s)); | 150 | memcpy(newdata, data, sizeof(struct plist_data_s)); |
| 151 | newnode = plist_new_node(newdata); | 151 | newnode = plist_new_node(newdata); |
| 152 | 152 | ||
| 153 | if (parent_node) { | 153 | if (*(plist_t*)parent_node_ptr) { |
| 154 | g_node_append(parent_node, newnode); | 154 | g_node_append(*(plist_t*)parent_node_ptr, newnode); |
| 155 | } | 155 | } |
| 156 | g_node_children_foreach(node, G_TRAVERSE_ALL, plist_copy_node, newnode); | 156 | else { |
| 157 | *(plist_t*)parent_node_ptr = newnode; | ||
| 158 | } | ||
| 159 | |||
| 160 | g_node_children_foreach(node, G_TRAVERSE_ALL, plist_copy_node, &newnode); | ||
| 157 | } | 161 | } |
| 158 | 162 | ||
| 159 | plist_t plist_copy(plist_t node) | 163 | plist_t plist_copy(plist_t node) |
| 160 | { | 164 | { |
| 161 | plist_copy_node(node, NULL); | 165 | plist_t copied = NULL; |
| 166 | plist_copy_node(node, &copied); | ||
| 167 | return copied; | ||
| 162 | } | 168 | } |
| 163 | 169 | ||
| 164 | plist_t plist_get_first_child(plist_t node) | 170 | plist_t plist_get_first_child(plist_t node) |
