leaks--! this code is riddled with leaks! really really bad!
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 23 Mar 2009 10:27:54 +0000 (10:27 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 23 Mar 2009 10:27:54 +0000 (10:27 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/efreet@39647 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/efreet_icon.c
src/lib/efreet_menu.c
src/lib/efreet_mime.c
src/lib/efreet_utils.c

index 19c0652..df442df 100644 (file)
@@ -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)
 {
index b8d0fef..c8e9a98 100644 (file)
@@ -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 *
index 412229d..d0a8448 100644 (file)
@@ -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);
     }
+ */
 }
 
 /**
index 364d1fc..be41772 100644 (file)
@@ -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 */