Fix mem leaks.

Is Ecore_Desktop_Tree buffers needed?


SVN revision: 26091
This commit is contained in:
sebastid 2006-09-24 12:26:09 +00:00 committed by sebastid
parent 908e69de2e
commit 4bf62d9b21
5 changed files with 43 additions and 16 deletions

View File

@ -131,8 +131,10 @@ struct _Ecore_Desktop_Tree
{
Ecore_Desktop_Tree_Element *elements; /* An array of elements. */
int size; /* The size of the array. */
#if 0
char **buffers; /* An array of pointers to the bits of data. */
int buffers_size; /* The size of the array. */
#endif
Ecore_Desktop_Tree *parent; /* Parent if this is a child. */
};

View File

@ -321,9 +321,13 @@ ecore_desktop_icon_theme_list(void)
{
static int loaded = 0;
if (!loaded)
ecore_desktop_paths_file_find(ecore_desktop_paths_icons, "index.theme", 2,
_ecore_desktop_icon_theme_list_add, NULL);
loaded = 1;
{
char *tmp;
tmp = ecore_desktop_paths_file_find(ecore_desktop_paths_icons, "index.theme", 2,
_ecore_desktop_icon_theme_list_add, NULL);
loaded = 1;
free(tmp);
}
return icon_theme_cache;
}

View File

@ -150,7 +150,6 @@ ecore_desktop_menu_for_each(void (*func)
/* create the .desktop and order files from the menu */
ecore_desktop_tree_foreach(menus, 0, _ecore_desktop_menu_make_apps,
func);
// FIXME: Can't free this just yet, causes major memory corruption.
ecore_desktop_tree_del(menus);
}
free(menu_file);
@ -270,6 +269,7 @@ _ecore_desktop_menu_get0(char *file, Ecore_Desktop_Tree * merge_stack,
if (oops == 0)
{
#if 1
/* Get on with it. */
ecore_desktop_tree_foreach(menu_xml, 0, _ecore_desktop_menu_unxml,
&data);
@ -303,6 +303,7 @@ _ecore_desktop_menu_get0(char *file, Ecore_Desktop_Tree * merge_stack,
printf("\n\n");
#endif
}
#endif
}
}
else
@ -311,10 +312,10 @@ _ecore_desktop_menu_get0(char *file, Ecore_Desktop_Tree * merge_stack,
if (oops)
{
E_FN_DEL(ecore_desktop_tree_del, (menu_xml));
if (level == 0)
{
E_FN_DEL(ecore_desktop_tree_del, (merge_stack));
}
}
if (level == 0)
{
E_FN_DEL(ecore_desktop_tree_del, (merge_stack));
}
E_FN_DEL(ecore_desktop_tree_del, (data.stack));
E_FREE(data.path);
@ -609,6 +610,7 @@ _ecore_desktop_menu_unxml(const void *data, Ecore_Desktop_Tree * tree,
tree->elements[element].element = menu;
tree->elements[element].type =
ECORE_DESKTOP_TREE_ELEMENT_TYPE_TREE;
tree->elements[element].free = 1;
}
}
}
@ -1480,6 +1482,7 @@ _ecore_desktop_menu_generate(const void *data, Ecore_Desktop_Tree * tree,
ECORE_DESKTOP_TREE_ELEMENT_TYPE_HASH;
unxml_data->stack->elements[level].element =
generate_data.pool;
unxml_data->stack->elements[level].free = 0;
}
for (i = level - 1; i >= 0; i--)
{

View File

@ -45,10 +45,12 @@ ecore_desktop_tree_new(char *buffer)
tree = E_NEW(Ecore_Desktop_Tree, 1);
if ((tree) && (buffer))
{
#if 0
tree->buffers =
(char **)realloc(tree->buffers,
(tree->buffers_size + 1) * sizeof(char *));
tree->buffers[tree->buffers_size++] = strdup(buffer);
#endif
}
return tree;
}
@ -63,7 +65,7 @@ ecore_desktop_tree_add(Ecore_Desktop_Tree * tree, char *element)
sizeof
(Ecore_Desktop_Tree_Element));
tree->elements[tree->size].element = strdup(element);
tree->elements[tree->size].free = 0;
tree->elements[tree->size].free = 1;
tree->elements[tree->size++].type = ECORE_DESKTOP_TREE_ELEMENT_TYPE_STRING;
return tree;
}
@ -71,11 +73,14 @@ ecore_desktop_tree_add(Ecore_Desktop_Tree * tree, char *element)
Ecore_Desktop_Tree *
ecore_desktop_tree_extend(Ecore_Desktop_Tree * tree, char *element)
{
#if 0
tree->buffers =
(char **)realloc(tree->buffers,
(tree->buffers_size + 1) * sizeof(char *));
tree->buffers[tree->buffers_size++] = strdup(element);
tree = ecore_desktop_tree_add(tree, tree->buffers[tree->buffers_size - 1]);
#endif
tree = ecore_desktop_tree_add(tree, element);
return tree;
}
@ -83,13 +88,17 @@ ecore_desktop_tree_extend(Ecore_Desktop_Tree * tree, char *element)
void
ecore_desktop_tree_track(Ecore_Desktop_Tree * tree, void *element)
{
#if 0
tree->buffers =
(char **)realloc(tree->buffers,
(tree->buffers_size + 1) * sizeof(char *));
tree->buffers[tree->buffers_size++] = element;
#endif
}
/* OK, so we need an insert after all, and it falls into the dumb category. */
/* FIXME: Needs to handle .free */
#if 0
Ecore_Desktop_Tree *
ecore_desktop_tree_insert(Ecore_Desktop_Tree * tree, int before, void *element,
Ecore_Desktop_Tree_Element_Type type)
@ -114,6 +123,7 @@ ecore_desktop_tree_insert(Ecore_Desktop_Tree * tree, int before, void *element,
tree->elements[before].free = free;
return tree;
}
#endif
/* OK, so we need a tree merge after all, and it falls into the dumb category. */
Ecore_Desktop_Tree *
@ -147,6 +157,7 @@ ecore_desktop_tree_merge(Ecore_Desktop_Tree * tree, int before,
}
/* Careful, this might screw up the freeing order if that is important. */
#if 0
size = element->buffers_size;
if (size)
{
@ -160,6 +171,7 @@ ecore_desktop_tree_merge(Ecore_Desktop_Tree * tree, int before,
}
*/
}
#endif
return tree;
}
@ -361,16 +373,22 @@ ecore_desktop_tree_del(Ecore_Desktop_Tree * tree)
for (i = tree->size - 1; i >= 0; i--)
{
if (tree->elements[i].type == ECORE_DESKTOP_TREE_ELEMENT_TYPE_TREE)
ecore_desktop_tree_del((Ecore_Desktop_Tree *) tree->elements[i].element);
else if ((tree->elements[i].type == ECORE_DESKTOP_TREE_ELEMENT_TYPE_HASH) &&
(tree->elements[i].free))
ecore_hash_destroy((Ecore_Hash *) tree->elements[i].element);
if (tree->elements[i].free)
{
if (tree->elements[i].type == ECORE_DESKTOP_TREE_ELEMENT_TYPE_STRING)
free(tree->elements[i].element);
else if (tree->elements[i].type == ECORE_DESKTOP_TREE_ELEMENT_TYPE_TREE)
ecore_desktop_tree_del((Ecore_Desktop_Tree *) tree->elements[i].element);
else if (tree->elements[i].type == ECORE_DESKTOP_TREE_ELEMENT_TYPE_HASH)
ecore_hash_destroy((Ecore_Hash *) tree->elements[i].element);
}
}
E_FREE(tree->elements);
#if 0
for (i = tree->buffers_size - 1; i >= 0; i--)
E_FREE(tree->buffers[i]);
#endif
E_FREE(tree);
}

View File

@ -64,7 +64,7 @@ ecore_desktop_xmlame_get(char *file)
ecore_desktop_tree_extend(tree, file);
_ecore_desktop_xmlame_parse(tree, buffer);
}
//FIXME: free(buffer);
free(buffer);
}
return tree;
}
@ -119,7 +119,7 @@ _ecore_desktop_xmlame_parse(Ecore_Desktop_Tree * tree, char *buffer)
{ /* The beginning of an element. */
Ecore_Desktop_Tree *new_tree;
new_tree = ecore_desktop_xmlame_new(NULL);
new_tree = ecore_desktop_tree_new(NULL);
if (new_tree)
{
ecore_desktop_tree_add_child(tree, new_tree);