more leak fixes
authorcaro <caro@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 23 Mar 2009 12:19:31 +0000 (12:19 +0000)
committercaro <caro@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 23 Mar 2009 12:19:31 +0000 (12:19 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/efreet@39650 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/efreet_base.c
src/lib/efreet_desktop.c
src/lib/efreet_icon.c
src/lib/efreet_menu.c
src/lib/efreet_mime.c
src/lib/efreet_private.h
src/lib/efreet_utils.c

index f4738e1..5464163 100644 (file)
@@ -39,8 +39,8 @@ efreet_base_shutdown(void)
     IF_RELEASE(xdg_config_home);
     IF_RELEASE(xdg_cache_home);
 
-    IF_FREE_LIST(xdg_data_dirs);
-    IF_FREE_LIST(xdg_config_dirs);
+    IF_FREE_LIST(xdg_data_dirs, eina_stringshare_del);
+    IF_FREE_LIST(xdg_config_dirs, eina_stringshare_del);
 
     eina_stringshare_shutdown();
 }
index 0927ba9..9357add 100644 (file)
@@ -371,8 +371,8 @@ efreet_desktop_clear(Efreet_Desktop *desktop)
     IF_FREE(desktop->path);
     IF_FREE(desktop->startup_wm_class);
 
-    IF_FREE_LIST(desktop->only_show_in);
-    IF_FREE_LIST(desktop->not_show_in);
+    IF_FREE_LIST(desktop->only_show_in, free);
+    IF_FREE_LIST(desktop->not_show_in, free);
     while (desktop->categories)
     {
         data = eina_list_data_get(desktop->categories);
@@ -511,8 +511,8 @@ efreet_desktop_free(Efreet_Desktop *desktop)
     IF_FREE(desktop->path);
     IF_FREE(desktop->startup_wm_class);
 
-    IF_FREE_LIST(desktop->only_show_in);
-    IF_FREE_LIST(desktop->not_show_in);
+    IF_FREE_LIST(desktop->only_show_in, free);
+    IF_FREE_LIST(desktop->not_show_in, free);
 
     EINA_LIST_FREE(desktop->categories, str)
         eina_stringshare_del(str);
index df442df..ab19b78 100644 (file)
@@ -132,26 +132,26 @@ efreet_icon_init(void)
 void
 efreet_icon_shutdown(void)
 {
-   void *d;
-   
+    void *d;
+
     if (--efreet_icon_init_count)
         return;
 
     IF_FREE(efreet_icon_user_dir);
     IF_FREE(efreet_icon_deprecated_user_dir);
 
-   EINA_LIST_FREE(efreet_icon_extensions, d) free(d);
+    IF_FREE_LIST(efreet_icon_extensions, free);
     IF_FREE_HASH(efreet_icon_themes);
-    IF_FREE_LIST(efreet_extra_icon_dirs);
+    efreet_extra_icon_dirs = eina_list_free(efreet_extra_icon_dirs);
 
     IF_FREE_HASH(efreet_icon_cache);
 
    if (fake_null)
-     {
-        efreet_icon_theme_free(fake_null);
-        fake_null = NULL;
-     }
-   
+   {
+       efreet_icon_theme_free(fake_null);
+       fake_null = NULL;
+   }
+
     ecore_shutdown();
     efreet_icon_init_count = 0;
 }
@@ -333,7 +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;
+        if ((fake_null) && (!theme_name)) return fake_null;
         theme = efreet_icon_theme_new();
         theme->fake = 1;
        if (theme_name)
@@ -990,7 +990,7 @@ efreet_icon_free(Efreet_Icon *icon)
 
     IF_FREE(icon->path);
     IF_FREE(icon->name);
-    IF_FREE_LIST(icon->attach_points);
+    IF_FREE_LIST(icon->attach_points, free);
 
     FREE(icon);
 }
@@ -1117,20 +1117,20 @@ efreet_icon_theme_new(void)
 static void
 efreet_icon_theme_free(Efreet_Icon_Theme *theme)
 {
-   void *d;
-   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);
 
-   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);
+    IF_FREE_LIST(theme->paths, free);
+    IF_FREE_LIST(theme->inherits, free);
+    IF_FREE_LIST(theme->directories, efreet_icon_theme_directory_free);
 
-   FREE(theme);
+    FREE(theme);
 }
 
 /**
@@ -1501,11 +1501,19 @@ efreet_icon_theme_directory_new(Efreet_Ini *ini, const char *name)
     return dir;
 }
 
+/**
+ * @internal
+ * @param dir: The Efreet_Icon_Theme_Directory to free
+ * @return Returns no value
+ * @brief Frees the given directory @a dir
+ */
 static void
 efreet_icon_theme_directory_free(Efreet_Icon_Theme_Directory *dir)
 {
-   free(dir->name);
-   free(dir);
+    if (!dir) return;
+
+    IF_FREE(dir->name);
+    FREE(dir);
 }
 
 static int
index c8e9a98..9f626fb 100644 (file)
@@ -289,6 +289,7 @@ static Efreet_Menu_Filter *efreet_menu_filter_new(void);
 static void efreet_menu_filter_free(Efreet_Menu_Filter *filter);
 
 static Efreet_Menu_Layout *efreet_menu_layout_new(void);
+static void efreet_menu_layout_free(Efreet_Menu_Layout *layout);
 
 static Efreet_Menu_Filter_Op *efreet_menu_filter_op_new(void);
 static void efreet_menu_filter_op_free(Efreet_Menu_Filter_Op *op);
@@ -501,7 +502,7 @@ efreet_menu_kde_legacy_init(void)
     char buf[PATH_MAX];
     char *p, *s;
 
-    IF_FREE_LIST(efreet_menu_kde_legacy_dirs);
+    IF_FREE_LIST(efreet_menu_kde_legacy_dirs, eina_stringshare_del);
 
     f = popen("kde-config --path apps", "r");
     if (!f) return 0;
@@ -548,7 +549,7 @@ efreet_menu_shutdown(void)
     IF_FREE_HASH(efreet_menu_move_cbs);
     IF_FREE_HASH(efreet_menu_layout_cbs);
 
-    IF_FREE_LIST(efreet_menu_kde_legacy_dirs);
+    IF_FREE_LIST(efreet_menu_kde_legacy_dirs, eina_stringshare_del);
 
     IF_FREE_HASH(efreet_merged_menus);
     IF_FREE_HASH(efreet_merged_dirs);
@@ -988,8 +989,8 @@ efreet_menu_internal_new(void)
 void
 efreet_menu_internal_free(Efreet_Menu_Internal *internal)
 {
-   void *d;
-   
+    void *d;
+
     if (!internal) return;
 
     IF_FREE(internal->file.path);
@@ -998,22 +999,21 @@ efreet_menu_internal_free(Efreet_Menu_Internal *internal)
     IF_RELEASE(internal->name.internal);
     internal->name.name = NULL;
 
-    IF_FREE_LIST(internal->applications);
+    internal->applications = eina_list_free(internal->applications);
 
     IF_FREE_DLIST(internal->directories);
-   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_LIST(internal->app_dirs, efreet_menu_app_dir_free);
+    IF_FREE_LIST(internal->app_pool, efreet_menu_desktop_free);
     IF_FREE_DLIST(internal->directory_dirs);
     IF_FREE_HASH(internal->directory_cache);
 
-    IF_FREE_LIST(internal->moves);
-    IF_FREE_LIST(internal->filters);
+    IF_FREE_LIST(internal->moves, efreet_menu_move_free);
+    IF_FREE_LIST(internal->filters, efreet_menu_filter_free);
 
-    IF_FREE_LIST(internal->sub_menus);
+    IF_FREE_LIST(internal->sub_menus, efreet_menu_internal_free);
 
-    IF_FREE_LIST(internal->layout);
-    IF_FREE_LIST(internal->default_layout);
+    IF_FREE_LIST(internal->layout, efreet_menu_layout_free);
+    IF_FREE_LIST(internal->default_layout, efreet_menu_layout_free);
 
     FREE(internal);
 }
@@ -1727,10 +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);
 
@@ -1902,7 +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_filter_free(filter);
                 efreet_menu_internal_free(legacy_internal);
                 FREE(path);
                 closedir(files);
@@ -1955,7 +1955,7 @@ efreet_menu_handle_legacy_dir_helper(Efreet_Menu_Internal *root,
     closedir(files);
 
     FREE(path);
-   efreet_menu_filter_free(filter);
+    efreet_menu_filter_free(filter);
     return legacy_internal;
 }
 
@@ -2436,6 +2436,21 @@ efreet_menu_layout_new(void)
 
 /**
  * @internal
+ * @param filter: The filter to work with
+ * @return Returns no data
+ * @brief Frees the given filter and all data
+ */
+static void
+efreet_menu_layout_free(Efreet_Menu_Layout *layout)
+{
+    if (!layout) return;
+
+    IF_FREE(layout->name);
+    FREE(layout);
+}
+
+/**
+ * @internal
  * @return Returns a new Efreet_Menu_Filter_Op on success or NULL on failure
  * @brief Creates and initializes an Efreet_Menu_Filter_Op structure
  */
@@ -2460,9 +2475,9 @@ efreet_menu_filter_op_free(Efreet_Menu_Filter_Op *op)
 {
     if (!op) return;
 
-    IF_FREE_LIST(op->categories);
-    IF_FREE_LIST(op->filenames);
-    IF_FREE_LIST(op->filters);
+    IF_FREE_LIST(op->categories, free);
+    IF_FREE_LIST(op->filenames, free);
+    IF_FREE_LIST(op->filters, efreet_menu_filter_op_free);
 
     FREE(op);
 }
@@ -2522,7 +2537,7 @@ efreet_menu_free(Efreet_Menu *entry)
 {
     IF_RELEASE(entry->name);
     IF_RELEASE(entry->icon);
-    IF_FREE_LIST(entry->entries);
+    entry->entries = eina_list_free(entry->entries);
     IF_RELEASE(entry->id);
     if (entry->desktop) efreet_desktop_free(entry->desktop);
     FREE(entry);
@@ -3088,7 +3103,7 @@ efreet_menu_resolve_moves(Efreet_Menu_Internal *internal)
             efreet_menu_internal_free(origin);
         }
     }
-    IF_FREE_LIST(internal->moves);
+    IF_FREE_LIST(internal->moves, efreet_menu_move_free);
 }
 
 /**
@@ -3207,12 +3222,20 @@ efreet_menu_app_dir_new(void)
     return dir;
 }
 
+/**
+ * @internal
+ * @param dir: The Efreet_Menu_App_Dir to free
+ * @return Returns no value.
+ * @brief Frees the given dir structure
+ */
 static void
 efreet_menu_app_dir_free(Efreet_Menu_App_Dir *dir)
 {
-   free(dir->path);
-   free(dir->prefix);
-   free(dir);
+    if (!dir) return;
+
+    IF_FREE(dir->path);
+    IF_FREE(dir->prefix);
+    FREE(dir);
 }
 
 /**
@@ -3291,7 +3314,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);
+    ecore_dlist_free_cb_set(internal->directories, free);
 }
 
 static char *
@@ -3783,7 +3806,7 @@ efreet_menu_layout_entries_get(Efreet_Menu *entry, Efreet_Menu_Internal *interna
                     entry->entries = eina_list_append(entry->entries, sub_entry);
                 }
             }
-            IF_FREE_LIST(internal->applications);
+            internal->applications = eina_list_free(internal->applications);
         }
         else if (internal->sub_menus && !strcmp(layout->name, "menus"))
         {
@@ -3861,7 +3884,7 @@ efreet_menu_layout_entries_get(Efreet_Menu *entry, Efreet_Menu_Internal *interna
                 }
                 efreet_menu_internal_free(sub);
             }
-            IF_FREE_LIST(internal->sub_menus);
+            IF_FREE_LIST(internal->sub_menus, efreet_menu_internal_free);
         }
         else if (internal->sub_menus && !strcmp(layout->name, "all"))
         {
index d0a8448..eb6af88 100644 (file)
@@ -186,8 +186,8 @@ efreet_mime_init(void)
 EAPI void
 efreet_mime_shutdown(void)
 {
-   void *d;
-   
+    void *d;
+
     if (_init_count == 0)
         return;
     _init_count--;
@@ -196,8 +196,8 @@ efreet_mime_shutdown(void)
 
     efreet_mime_icons_debug();
 
-   EINA_LIST_FREE(globs, d) efreet_mime_glob_free(d);
-   EINA_LIST_FREE(magics, d) efreet_mime_magic_free(d);
+    IF_FREE_LIST(globs, efreet_mime_glob_free);
+    IF_FREE_LIST(magics, efreet_mime_magic_free);
     IF_FREE_HASH(monitors);
     IF_FREE_HASH(wild);
     IF_FREE_HASH(mime_icons);
@@ -1015,7 +1015,7 @@ efreet_mime_shared_mimeinfo_magic_parse(char *data, int size)
             {
                 if (!(entry = NEW(Efreet_Mime_Magic_Entry, 1)))
                 {
-                    IF_FREE_LIST(magics);
+                    IF_FREE_LIST(magics, efreet_mime_magic_free);
                     return;
                 }
 
@@ -1041,7 +1041,7 @@ efreet_mime_shared_mimeinfo_magic_parse(char *data, int size)
 
                 case '=':
                     ptr++;
-       
+
                     memcpy(&tshort, ptr, sizeof(short));
                     entry->value_len = ntohs(tshort);
                     ptr += 2;
index 8bcdde9..43e59c4 100644 (file)
  * @def IF_FREE_LIST(x)
  * If x is a valid pointer destroy x and set to NULL
  */
-#define IF_FREE_LIST(x) do { \
-     x = eina_list_free(x);                    \
+#define IF_FREE_LIST(list, free_cb) do { \
+    while (list) \
+    { \
+        free_cb(eina_list_data_get(list)); \
+        list = eina_list_remove_list(list, list); \
+    } \
 } while (0)
 
 /**
index be41772..a4a812a 100644 (file)
@@ -580,9 +580,9 @@ efreet_util_cache_fill(__UNUSED__ void *data)
 
     start = ecore_time_get();
     if (!fill->files)
-     {
+    {
         fill->files = opendir(fill->current->path);
-     }
+    }
     if (!fill->files)
     {
         /* Couldn't open this dir, continue to next */