From 0da8e3bae58a4112feabfecc46cd186e7fa13f19 Mon Sep 17 00:00:00 2001 From: raster Date: Mon, 23 Mar 2009 10:27:54 +0000 Subject: [PATCH] leaks--! this code is riddled with leaks! really really bad! git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/efreet@39647 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/efreet_icon.c | 40 +++++++++++++++++++++++++++++----------- src/lib/efreet_menu.c | 21 ++++++++++++++++++++- src/lib/efreet_mime.c | 9 ++++++--- src/lib/efreet_utils.c | 7 +++++-- 4 files changed, 60 insertions(+), 17 deletions(-) diff --git a/src/lib/efreet_icon.c b/src/lib/efreet_icon.c index 19c0652..df442df 100644 --- a/src/lib/efreet_icon.c +++ b/src/lib/efreet_icon.c @@ -66,6 +66,7 @@ static void efreet_icon_theme_index_read(Efreet_Icon_Theme *theme, static Efreet_Icon_Theme_Directory *efreet_icon_theme_directory_new(Efreet_Ini *ini, const char *name); +static void efreet_icon_theme_directory_free(Efreet_Icon_Theme_Directory *dir); static void efreet_icon_theme_cache_check(Efreet_Icon_Theme *theme); static int efreet_icon_theme_cache_check_dir(Efreet_Icon_Theme *theme, @@ -131,18 +132,26 @@ efreet_icon_init(void) void efreet_icon_shutdown(void) { + void *d; + if (--efreet_icon_init_count) return; IF_FREE(efreet_icon_user_dir); IF_FREE(efreet_icon_deprecated_user_dir); - IF_FREE_LIST(efreet_icon_extensions); + EINA_LIST_FREE(efreet_icon_extensions, d) free(d); IF_FREE_HASH(efreet_icon_themes); IF_FREE_LIST(efreet_extra_icon_dirs); IF_FREE_HASH(efreet_icon_cache); + if (fake_null) + { + efreet_icon_theme_free(fake_null); + fake_null = NULL; + } + ecore_shutdown(); efreet_icon_init_count = 0; } @@ -324,6 +333,7 @@ efreet_icon_find_theme_check(const char *theme_name) if (theme_name) theme = efreet_icon_theme_find(theme_name); if (!theme) { + if ((fake_null) && (!theme_name)) return fake_null; theme = efreet_icon_theme_new(); theme->fake = 1; if (theme_name) @@ -1107,19 +1117,20 @@ efreet_icon_theme_new(void) static void efreet_icon_theme_free(Efreet_Icon_Theme *theme) { - if (!theme) return; + void *d; + if (!theme) return; - IF_RELEASE(theme->name.internal); - IF_RELEASE(theme->name.name); - - IF_FREE(theme->comment); - IF_FREE(theme->example_icon); + IF_RELEASE(theme->name.internal); + IF_RELEASE(theme->name.name); + + IF_FREE(theme->comment); + IF_FREE(theme->example_icon); - IF_FREE_LIST(theme->paths); - IF_FREE_LIST(theme->inherits); - IF_FREE_LIST(theme->directories); + EINA_LIST_FREE(theme->paths, d) free(d); + EINA_LIST_FREE(theme->inherits, d) free(d); + EINA_LIST_FREE(theme->directories, d) efreet_icon_theme_directory_free(d); - FREE(theme); + FREE(theme); } /** @@ -1490,6 +1501,13 @@ efreet_icon_theme_directory_new(Efreet_Ini *ini, const char *name) return dir; } +static void +efreet_icon_theme_directory_free(Efreet_Icon_Theme_Directory *dir) +{ + free(dir->name); + free(dir); +} + static int efreet_icon_cache_find(Efreet_Icon_Cache *value, const char *key) { diff --git a/src/lib/efreet_menu.c b/src/lib/efreet_menu.c index b8d0fef..c8e9a98 100644 --- a/src/lib/efreet_menu.c +++ b/src/lib/efreet_menu.c @@ -280,6 +280,7 @@ static void efreet_menu_create_default_layout_list(Efreet_Menu_Internal *interna static char *efreet_menu_path_get(Efreet_Menu_Internal *internal, const char *suffix); static Efreet_Menu_App_Dir *efreet_menu_app_dir_new(void); +static void efreet_menu_app_dir_free(Efreet_Menu_App_Dir *dir); static Efreet_Menu_Move *efreet_menu_move_new(void); static void efreet_menu_move_free(Efreet_Menu_Move *move); @@ -987,6 +988,8 @@ efreet_menu_internal_new(void) void efreet_menu_internal_free(Efreet_Menu_Internal *internal) { + void *d; + if (!internal) return; IF_FREE(internal->file.path); @@ -998,7 +1001,8 @@ efreet_menu_internal_free(Efreet_Menu_Internal *internal) IF_FREE_LIST(internal->applications); IF_FREE_DLIST(internal->directories); - IF_FREE_LIST(internal->app_dirs); + EINA_LIST_FREE(internal->app_dirs, d) efreet_menu_app_dir_free(d); +// IF_FREE_LIST(internal->app_dirs); IF_FREE_LIST(internal->app_pool); IF_FREE_DLIST(internal->directory_dirs); IF_FREE_HASH(internal->directory_cache); @@ -1723,7 +1727,10 @@ efreet_menu_merge_dir(Efreet_Menu_Internal *parent, Efreet_Xml *xml, const char snprintf(dir_path, PATH_MAX, "%s/%s", path, file->d_name); if (!efreet_menu_merge(parent, xml, dir_path)) + { + closedir(files); return 0; + } } closedir(files); @@ -1895,6 +1902,7 @@ efreet_menu_handle_legacy_dir_helper(Efreet_Menu_Internal *root, legacy_internal, file_path, prefix); if (!ret) { + efreet_menu_filter_free(filter); efreet_menu_internal_free(legacy_internal); FREE(path); closedir(files); @@ -1947,6 +1955,7 @@ efreet_menu_handle_legacy_dir_helper(Efreet_Menu_Internal *root, closedir(files); FREE(path); + efreet_menu_filter_free(filter); return legacy_internal; } @@ -3198,6 +3207,14 @@ efreet_menu_app_dir_new(void) return dir; } +static void +efreet_menu_app_dir_free(Efreet_Menu_App_Dir *dir) +{ + free(dir->path); + free(dir->prefix); + free(dir); +} + /** * @internal * @param a: The app dir to compare too @@ -3233,6 +3250,7 @@ efreet_menu_create_directory_dirs_list(Efreet_Menu_Internal *internal) if (!internal || internal->directory_dirs) return; internal->directory_dirs = ecore_dlist_new(); + ecore_dlist_free_cb_set(internal->directory_dirs, free); } static void @@ -3273,6 +3291,7 @@ efreet_menu_create_directories_list(Efreet_Menu_Internal *internal) if (!internal || internal->directories) return; internal->directories = ecore_dlist_new(); + ecore_dlist_free_cb_set(internal->directories, free); } static char * diff --git a/src/lib/efreet_mime.c b/src/lib/efreet_mime.c index 412229d..d0a8448 100644 --- a/src/lib/efreet_mime.c +++ b/src/lib/efreet_mime.c @@ -186,6 +186,8 @@ efreet_mime_init(void) EAPI void efreet_mime_shutdown(void) { + void *d; + if (_init_count == 0) return; _init_count--; @@ -194,8 +196,8 @@ efreet_mime_shutdown(void) efreet_mime_icons_debug(); - IF_FREE_LIST(globs); - IF_FREE_LIST(magics); + EINA_LIST_FREE(globs, d) efreet_mime_glob_free(d); + EINA_LIST_FREE(magics, d) efreet_mime_magic_free(d); IF_FREE_HASH(monitors); IF_FREE_HASH(wild); IF_FREE_HASH(mime_icons); @@ -1125,13 +1127,14 @@ efreet_mime_shared_mimeinfo_magic_parse(char *data, int size) } } } - +/* if (entry) { IF_FREE(entry->value); IF_FREE(entry->mask); FREE(entry); } + */ } /** diff --git a/src/lib/efreet_utils.c b/src/lib/efreet_utils.c index 364d1fc..be41772 100644 --- a/src/lib/efreet_utils.c +++ b/src/lib/efreet_utils.c @@ -540,7 +540,7 @@ efreet_util_cache_fill(__UNUSED__ void *data) double start; char buf[PATH_MAX]; - if (!fill->dirs) + if ((!fill->dirs) && (!fill->files)) { free(fill); idler = NULL; @@ -579,7 +579,10 @@ efreet_util_cache_fill(__UNUSED__ void *data) } start = ecore_time_get(); - if (!fill->files) fill->files = opendir(fill->current->path); + if (!fill->files) + { + fill->files = opendir(fill->current->path); + } if (!fill->files) { /* Couldn't open this dir, continue to next */ -- 2.7.4