qulogic/gplugin

Merged in GNode2 (pull request #15)
develop
2019-05-22, Gary Kramlich
b4dff22932fc
Merged in GNode2 (pull request #15)

Fix N-ary tree data handling

Approved-by: Elliott Sales de Andrade
Approved-by: Gary Kramlich
--- a/gplugin/gplugin-file-tree.c Sat Feb 02 07:37:10 2019 +0000
+++ b/gplugin/gplugin-file-tree.c Wed May 22 02:27:07 2019 +0000
@@ -60,23 +60,15 @@
* Helpers
*****************************************************************************/
static gboolean
-gplugin_file_tree_free_leaves(GNode *n, gpointer d) {
- GNode *root = d;
+gplugin_file_tree_free_helper(GNode *n, G_GNUC_UNUSED gpointer d) {
GPluginFileTreeEntry *e = n->data;
- if (n != root)
+ if (e)
gplugin_file_tree_entry_free(e);
return FALSE;
}
-static gboolean
-gplugin_file_tree_free_non_leaves(GNode *n, G_GNUC_UNUSED gpointer d) {
- g_free(n->data);
-
- return FALSE;
-}
-
/******************************************************************************
* FileTree API
*****************************************************************************/
@@ -99,6 +91,7 @@
GDir *dir = NULL;
GError *error = NULL;
GNode *node_dir = NULL;
+ GPluginFileTreeEntry *entry = NULL;
const gchar *path = (const gchar *)iter->data;
const gchar *filename = NULL;
@@ -115,13 +108,13 @@
}
/* we have a usable directory, so prepend it into the tree */
- node_dir = g_node_new(g_strdup(path));
+ entry = gplugin_file_tree_entry_new(path);
+ node_dir = g_node_new(entry);
g_node_prepend(root, node_dir);
/* now run through all of the files and add then to the dir node */
while((filename = g_dir_read_name(dir)) != NULL) {
GNode *file = NULL;
- GPluginFileTreeEntry *entry = NULL;
entry = gplugin_file_tree_entry_new(filename);
file = g_node_new(entry);
@@ -146,10 +139,9 @@
gplugin_file_tree_free(GNode *root) {
g_return_if_fail(root);
- g_node_traverse(root, G_POST_ORDER, G_TRAVERSE_LEAVES, -1,
- gplugin_file_tree_free_leaves, root);
- g_node_traverse(root, G_POST_ORDER, G_TRAVERSE_NON_LEAVES, -1,
- gplugin_file_tree_free_non_leaves, NULL);
+ g_node_traverse(root, G_POST_ORDER,
+ G_TRAVERSE_LEAVES | G_TRAVERSE_NON_LEAVES,
+ -1, gplugin_file_tree_free_helper, NULL);
g_node_destroy(root);
}
--- a/gplugin/gplugin-manager.c Sat Feb 02 07:37:10 2019 +0000
+++ b/gplugin/gplugin-manager.c Wed May 22 02:27:07 2019 +0000
@@ -360,13 +360,13 @@
manager->refresh_needed = FALSE;
for(dir = root->children; dir; dir = dir->next) {
+ GPluginFileTreeEntry *e = dir->data;
GNode *file = NULL;
- const gchar *path = (const gchar *)dir->data;
+ const gchar *path = e->filename;
for(file = dir->children; file; file = file->next) {
GPluginPlugin *plugin = NULL;
GPluginLoader *loader = NULL;
- GPluginFileTreeEntry *e = NULL;
GError *error = NULL;
GSList *l = NULL;
gchar *filename = NULL;