Mercurial > pidgin
comparison libpurple/sound-loader.c @ 25119:fc8047e1fa39
fixed some leaks and made theme loading safer
author | Justin Rodriguez <ffdragon@soc.pidgin.im> |
---|---|
date | Fri, 08 Aug 2008 21:26:12 +0000 |
parents | fbf72bbd1084 |
children | b37ccfd1697b |
comparison
equal
deleted
inserted
replaced
25118:f76e9db37141 | 25119:fc8047e1fa39 |
---|---|
37 purple_sound_loader_build(const gchar *dir) | 37 purple_sound_loader_build(const gchar *dir) |
38 { | 38 { |
39 xmlnode *root_node, *sub_node; | 39 xmlnode *root_node, *sub_node; |
40 gchar *filename, *filename_full, *data; | 40 gchar *filename, *filename_full, *data; |
41 GDir *gdir; | 41 GDir *gdir; |
42 PurpleSoundTheme *theme; | 42 PurpleSoundTheme *theme = NULL; |
43 | 43 |
44 /* Find the theme file */ | 44 /* Find the theme file */ |
45 gdir = g_dir_open(dir, 0, NULL); | 45 gdir = g_dir_open(dir, 0, NULL); |
46 g_return_val_if_fail(gdir != NULL, NULL); | 46 g_return_val_if_fail(gdir != NULL, NULL); |
47 | 47 |
58 | 58 |
59 /* Parse the tree */ | 59 /* Parse the tree */ |
60 sub_node = xmlnode_get_child(root_node, "description"); | 60 sub_node = xmlnode_get_child(root_node, "description"); |
61 data = xmlnode_get_data(sub_node); | 61 data = xmlnode_get_data(sub_node); |
62 | 62 |
63 theme = g_object_new(PURPLE_TYPE_SOUND_THEME, | 63 if (xmlnode_get_attrib(root_node, "name") != NULL) { |
64 "type", "sound", | 64 theme = g_object_new(PURPLE_TYPE_SOUND_THEME, |
65 "name", xmlnode_get_attrib(root_node, "name"), | 65 "type", "sound", |
66 "author", xmlnode_get_attrib(root_node, "author"), | 66 "name", xmlnode_get_attrib(root_node, "name"), |
67 "image", xmlnode_get_attrib(root_node, "image"), | 67 "author", xmlnode_get_attrib(root_node, "author"), |
68 "directory", dir, | 68 "image", xmlnode_get_attrib(root_node, "image"), |
69 "description", data, NULL); | 69 "directory", dir, |
70 "description", data, NULL); | |
70 | 71 |
71 xmlnode_free(sub_node); | 72 xmlnode_free(sub_node); |
72 | 73 |
73 while ((sub_node = xmlnode_get_child(root_node, "event")) != NULL){ | 74 while ((sub_node = xmlnode_get_child(root_node, "event")) != NULL){ |
74 purple_sound_theme_set_file(theme, | 75 purple_sound_theme_set_file(theme, |
75 xmlnode_get_attrib(sub_node, "name"), | 76 xmlnode_get_attrib(sub_node, "name"), |
76 xmlnode_get_attrib(sub_node, "file")); | 77 xmlnode_get_attrib(sub_node, "file")); |
77 xmlnode_free(sub_node); | 78 xmlnode_free(sub_node); |
79 } | |
78 } | 80 } |
79 | 81 |
80 xmlnode_free(root_node); | 82 xmlnode_free(root_node); |
81 g_dir_close(gdir); | 83 g_dir_close(gdir); |
82 g_free(filename_full); | 84 g_free(filename_full); |