summaryrefslogtreecommitdiffstats
path: root/src/plist.c
diff options
context:
space:
mode:
authorGravatar Jonathan Beck2009-02-14 17:32:19 +0100
committerGravatar Jonathan Beck2009-02-14 17:32:19 +0100
commitaa3a4c8d45be9da585d1aae141a546cfbbdf509f (patch)
tree5924d46f2392127fa75272daa99e85fc73c9e9bf /src/plist.c
parent461c947d1238a1ca5604ec34bd4fe84e040334f7 (diff)
downloadlibplist-aa3a4c8d45be9da585d1aae141a546cfbbdf509f.tar.gz
libplist-aa3a4c8d45be9da585d1aae141a546cfbbdf509f.tar.bz2
Fix some memory leaks.
Diffstat (limited to 'src/plist.c')
-rw-r--r--src/plist.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/plist.c b/src/plist.c
index 87a1de5..c69f4c1 100644
--- a/src/plist.c
+++ b/src/plist.c
@@ -44,16 +44,27 @@ plist_data_t plist_new_plist_data()
44 return data; 44 return data;
45} 45}
46 46
47void plist_free_plist_data(plist_data_t data) 47static void plist_free_node(GNode * node, gpointer none)
48{ 48{
49 plist_data_t data = plist_get_data(node);
49 if (data) { 50 if (data) {
50 switch (data->type) { 51 switch (data->type) {
51 52 case PLIST_KEY:
53 case PLIST_STRING:
54 free(data->strval);
55 break;
56 case PLIST_UNICODE:
57 free(data->unicodeval);
58 break;
59 case PLIST_DATA:
60 free(data->buff);
61 break;
52 default: 62 default:
53 break; 63 break;
54 } 64 }
55 free(data); 65 free(data);
56 } 66 }
67 node->data = NULL;
57} 68}
58 69
59plist_t plist_new_dict() 70plist_t plist_new_dict()
@@ -133,6 +144,7 @@ static plist_t plist_add_sub_element(plist_t node, plist_type type, const void *
133 144
134void plist_free(plist_t plist) 145void plist_free(plist_t plist)
135{ 146{
147 g_node_children_foreach(plist, G_TRAVERSE_ALL, plist_free_node, NULL);
136 g_node_destroy(plist); 148 g_node_destroy(plist);
137} 149}
138 150