[geany/geany] 1ab97f: Plug a memory leak when reading misnamed tag files
Colomban Wendling
git-noreply at xxxxx
Tue Sep 24 22:00:44 UTC 2013
Branch: refs/heads/master
Author: Colomban Wendling <ban at herbesfolles.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Tue, 24 Sep 2013 22:00:44 UTC
Commit: 1ab97fe2e0c4222900bb6e4e8d54655cfefd8756
https://github.com/geany/geany/commit/1ab97fe2e0c4222900bb6e4e8d54655cfefd8756
Log Message:
-----------
Plug a memory leak when reading misnamed tag files
Don't leak the file name if we can't determine to which filetype it
belongs. Thanks to Pavel Roschin for spotting this.
Also, remove an useless second function indirection that simply made
the code harder to understand. This will make Matthew happy ;)
Modified Paths:
--------------
src/symbols.c
Modified: src/symbols.c
46 files changed, 22 insertions(+), 24 deletions(-)
===================================================================
@@ -1862,37 +1862,16 @@ void symbols_show_load_tags_dialog(void)
}
-static void detect_tag_files(const GSList *file_list)
-{
- const GSList *node;
-
- for (node = file_list; node != NULL; node = g_slist_next(node))
- {
- gchar *fname = node->data;
- gchar *utf8_fname = utils_get_utf8_from_locale(fname);
- GeanyFiletype *ft = detect_global_tags_filetype(utf8_fname);
-
- g_free(utf8_fname);
-
- if (FILETYPE_ID(ft) != GEANY_FILETYPES_NONE)
- ft->priv->tag_files = g_slist_prepend(ft->priv->tag_files, fname);
- else
- geany_debug("Unknown filetype for file '%s'.", fname);
- }
-}
-
-
static void init_user_tags(void)
{
GSList *file_list = NULL, *list = NULL;
+ const GSList *node;
gchar *dir;
dir = g_build_filename(app->configdir, "tags", NULL);
/* create the user tags dir for next time if it doesn't exist */
if (! g_file_test(dir, G_FILE_TEST_IS_DIR))
- {
utils_mkdir(dir, FALSE);
- }
file_list = utils_get_file_list_full(dir, TRUE, FALSE, NULL);
SETPTR(dir, g_build_filename(app->datadir, "tags", NULL));
@@ -1900,8 +1879,27 @@ static void init_user_tags(void)
g_free(dir);
file_list = g_slist_concat(file_list, list);
- detect_tag_files(file_list);
- /* don't need to delete list contents because they are stored in ft->priv->tag_files */
+
+ /* populate the filetype-specific tag files lists */
+ for (node = file_list; node != NULL; node = node->next)
+ {
+ gchar *fname = node->data;
+ gchar *utf8_fname = utils_get_utf8_from_locale(fname);
+ GeanyFiletype *ft = detect_global_tags_filetype(utf8_fname);
+
+ g_free(utf8_fname);
+
+ if (FILETYPE_ID(ft) != GEANY_FILETYPES_NONE)
+ ft->priv->tag_files = g_slist_prepend(ft->priv->tag_files, fname);
+ else
+ {
+ geany_debug("Unknown filetype for file '%s'.", fname);
+ g_free(fname);
+ }
+ }
+
+ /* don't need to delete list contents because they are now stored in
+ * ft->priv->tag_files */
g_slist_free(file_list);
}
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list