Enlightenment CVS committal Author : sebastid Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_desktop Modified Files: Ecore_Desktop.h ecore_desktop_icon.c ecore_desktop_menu.c ecore_desktop_tree.c ecore_desktop_xmlame.c Log Message: Fix mem leaks. Is Ecore_Desktop_Tree buffers needed? =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/Ecore_Desktop.h,v retrieving revision 1.33 retrieving revision 1.34 diff -u -3 -r1.33 -r1.34 --- Ecore_Desktop.h 24 Sep 2006 11:17:03 -0000 1.33 +++ Ecore_Desktop.h 24 Sep 2006 12:26:09 -0000 1.34 @@ -131,8 +131,10 @@ { 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. */ }; =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/ecore_desktop_icon.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -3 -r1.35 -r1.36 --- ecore_desktop_icon.c 24 Sep 2006 09:28:21 -0000 1.35 +++ ecore_desktop_icon.c 24 Sep 2006 12:26:09 -0000 1.36 @@ -321,9 +321,13 @@ { 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; } =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/ecore_desktop_menu.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- ecore_desktop_menu.c 24 Sep 2006 11:17:03 -0000 1.22 +++ ecore_desktop_menu.c 24 Sep 2006 12:26:09 -0000 1.23 @@ -150,7 +150,6 @@ /* 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 @@ 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 @@ printf("\n\n"); #endif } +#endif } } else @@ -311,10 +312,10 @@ 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 @@ 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_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--) { =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/ecore_desktop_tree.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- ecore_desktop_tree.c 24 Sep 2006 11:17:03 -0000 1.5 +++ ecore_desktop_tree.c 24 Sep 2006 12:26:09 -0000 1.6 @@ -45,10 +45,12 @@ 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 @@ 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 * 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 @@ 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 @@ 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 @@ } /* Careful, this might screw up the freeing order if that is important. */ +#if 0 size = element->buffers_size; if (size) { @@ -160,6 +171,7 @@ } */ } +#endif return tree; } @@ -361,16 +373,22 @@ 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); } =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/ecore_desktop_xmlame.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- ecore_desktop_xmlame.c 24 Sep 2006 09:28:21 -0000 1.7 +++ ecore_desktop_xmlame.c 24 Sep 2006 12:26:09 -0000 1.8 @@ -64,7 +64,7 @@ ecore_desktop_tree_extend(tree, file); _ecore_desktop_xmlame_parse(tree, buffer); } - //FIXME: free(buffer); + free(buffer); } return tree; } @@ -119,7 +119,7 @@ { /* 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); ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs