From daa71c69ffd689e08f6b31cc0b67d4bf3adf4b9e Mon Sep 17 00:00:00 2001 From: LarsDW223 Date: Mon, 2 Oct 2017 19:03:59 +0200 Subject: [PATCH 1/3] Workbench: fixed not closed file handles on directory scanning (thanks to techee). Fixes #607. --- workbench/src/plugin_main.c | 2 +- workbench/src/wb_project.c | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/workbench/src/plugin_main.c b/workbench/src/plugin_main.c index adfaf84b0..c233272aa 100644 --- a/workbench/src/plugin_main.c +++ b/workbench/src/plugin_main.c @@ -128,7 +128,7 @@ void geany_load_module(GeanyPlugin *plugin) /* Set metadata */ plugin->info->name = _("Workbench"); plugin->info->description = _("Manage and customize multiple projects."); - plugin->info->version = "1.0"; + plugin->info->version = "1.01"; plugin->info->author = "LarsGit223"; /* Set functions */ diff --git a/workbench/src/wb_project.c b/workbench/src/wb_project.c index 5411084ac..872c78113 100644 --- a/workbench/src/wb_project.c +++ b/workbench/src/wb_project.c @@ -228,6 +228,9 @@ static GSList *wb_project_dir_get_file_list(WB_PROJECT_DIR *root, const gchar *u { GSList *list = NULL; GDir *dir; + const gchar *child_name; + GSList *child; + GSList *children = NULL; gchar *locale_path = utils_get_locale_from_utf8(utf8_path); gchar *real_path = utils_get_real_path(locale_path); @@ -245,14 +248,17 @@ static GSList *wb_project_dir_get_file_list(WB_PROJECT_DIR *root, const gchar *u g_hash_table_insert(visited_paths, real_path, GINT_TO_POINTER(1)); - while (TRUE) + while ((child_name = g_dir_read_name(dir))) + children = g_slist_prepend(children, g_strdup(child_name)); + + g_dir_close(dir); + + foreach_slist(child, children) { const gchar *locale_name; gchar *locale_filename, *utf8_filename, *utf8_name; - locale_name = g_dir_read_name(dir); - if (!locale_name) - break; + locale_name = child->data; utf8_name = utils_get_utf8_from_locale(locale_name); locale_filename = g_build_filename(locale_path, locale_name, NULL); @@ -287,7 +293,7 @@ static GSList *wb_project_dir_get_file_list(WB_PROJECT_DIR *root, const gchar *u g_free(utf8_name); } - g_dir_close(dir); + g_slist_free_full(children, g_free); g_free(locale_path); return list; From d41742972cd0ae3e134f2411f2df18e008f5fcf3 Mon Sep 17 00:00:00 2001 From: LarsDW223 Date: Wed, 4 Oct 2017 20:45:16 +0200 Subject: [PATCH 2/3] workbench: Initialize 'child' to prevent cppcheck warning. --- workbench/src/wb_project.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workbench/src/wb_project.c b/workbench/src/wb_project.c index 872c78113..8748731b7 100644 --- a/workbench/src/wb_project.c +++ b/workbench/src/wb_project.c @@ -229,7 +229,7 @@ static GSList *wb_project_dir_get_file_list(WB_PROJECT_DIR *root, const gchar *u GSList *list = NULL; GDir *dir; const gchar *child_name; - GSList *child; + GSList *child = NULL; GSList *children = NULL; gchar *locale_path = utils_get_locale_from_utf8(utf8_path); gchar *real_path = utils_get_real_path(locale_path); From 45e8a2d3e5733368536f50359fd56a58b3518429 Mon Sep 17 00:00:00 2001 From: LarsDW223 Date: Thu, 5 Oct 2017 18:12:12 +0200 Subject: [PATCH 3/3] workbench: Small code re-factoring. --- workbench/src/wb_project.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/workbench/src/wb_project.c b/workbench/src/wb_project.c index 8748731b7..3e3aceea5 100644 --- a/workbench/src/wb_project.c +++ b/workbench/src/wb_project.c @@ -248,8 +248,10 @@ static GSList *wb_project_dir_get_file_list(WB_PROJECT_DIR *root, const gchar *u g_hash_table_insert(visited_paths, real_path, GINT_TO_POINTER(1)); - while ((child_name = g_dir_read_name(dir))) - children = g_slist_prepend(children, g_strdup(child_name)); + while ((child_name = g_dir_read_name(dir)) != NULL) + { + children = g_slist_prepend(children, g_strdup(child_name)); + } g_dir_close(dir);