Fixes a free in ecore_config.
Fixes a bug in ecore_sheap and adds a free callback.
Sebastian
Index: ecore/src/lib/ecore/Ecore_Data.h
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/Ecore_Data.h,v
retrieving revision 1.10
diff -u -r1.10 Ecore_Data.h
--- ecore/src/lib/ecore/Ecore_Data.h 5 Jan 2005 07:20:11 -0000 1.10
+++ ecore/src/lib/ecore/Ecore_Data.h 27 Jan 2005 12:40:39 -0000
@@ -442,12 +442,17 @@
char order, sorted;
+ /* Callback for comparing node values, default is direct comparison */
Ecore_Compare_Cb compare;
+
+ /* Callback for freeing node data, default is NULL */
+ Ecore_Free_Cb free_func;
};
Ecore_Sheap *ecore_sheap_new(Ecore_Compare_Cb compare, int size);
void ecore_sheap_destroy(Ecore_Sheap *heap);
int ecore_sheap_init(Ecore_Sheap *heap, Ecore_Compare_Cb compare, int size);
+ int ecore_sheap_set_free_cb(Ecore_Sheap *heap, Ecore_Free_Cb free_func);
int ecore_sheap_insert(Ecore_Sheap *heap, void *data);
void *ecore_sheap_extract(Ecore_Sheap *heap);
void *ecore_sheap_extreme(Ecore_Sheap *heap);
Index: ecore/src/lib/ecore/ecore_sheap.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_sheap.c,v
retrieving revision 1.4
diff -u -r1.4 ecore_sheap.c
--- ecore/src/lib/ecore/ecore_sheap.c 10 Aug 2004 00:30:49 -0000 1.4
+++ ecore/src/lib/ecore/ecore_sheap.c 27 Jan 2005 12:40:39 -0000
@@ -63,17 +63,39 @@
*/
void ecore_sheap_destroy(Ecore_Sheap *heap)
{
+ int i;
+
CHECK_PARAM_POINTER("heap", heap);
/*
- * FIXME: Need to setup destructor callbacks for this class.
+ * Free data in heap
*/
+ if (heap->free_func)
+ for (i = 0; i < heap->size; i++)
+ heap->free_func(heap->data[i]);
+
FREE(heap->data);
FREE(heap);
}
/**
+ * Set the function for freeing data.
+ * @param heap The heap that will use this function when nodes are
+ * destroyed.
+ * @param free_func The function that will free the key data.
+ * @return @c TRUE on successful set, @c FALSE otherwise.
+ */
+int ecore_sheap_set_free_cb(Ecore_Sheap *heap, Ecore_Free_Cb free_func)
+{
+ CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE);
+
+ heap->free_func = free_func;
+
+ return TRUE;
+}
+
+/**
* Insert new data into the heap.
* @param heap The heap to insert @a data.
* @param data The data to add to @a heap.
@@ -215,7 +237,7 @@
CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE);
- for (i = 0; i < heap->size && heap->compare(heap->data[i], item);
heap++);
+ for (i = 0; i < heap->size && heap->compare(heap->data[i], item); i++);
if (i < heap->size)
heap->data[i] = newval;
Index: ecore/src/lib/ecore_config/ecore_config.c
===================================================================
RCS file:
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_config/ecore_config.c,v
retrieving revision 1.57
diff -u -r1.57 ecore_config.c
--- ecore/src/lib/ecore_config/ecore_config.c 15 Jan 2005 10:06:28 -0000
1.57
+++ ecore/src/lib/ecore_config/ecore_config.c 27 Jan 2005 12:40:41 -0000
@@ -1454,8 +1454,9 @@
int
ecore_config_init(char *name)
{
- char *path;
- Ecore_Config_Prop *list;
+ char *path;
+ Ecore_Config_Prop *list;
+ Ecore_Config_Bundle *temp;
_ecore_config_system_init_no_load();
__ecore_config_app_name = strdup(name);
@@ -1463,11 +1464,12 @@
if (!__ecore_config_server_local)
return ECORE_CONFIG_ERR_FAIL;
- /* FIXME should free __ecore_config_bundle_local */
+ temp = __ecore_config_bundle_local;
list = __ecore_config_bundle_local->data;
__ecore_config_bundle_local =
ecore_config_bundle_new(__ecore_config_server_local, "config");
__ecore_config_bundle_local->data = list;
+ free(temp);
path = ecore_config_theme_default_path_get();
ecore_config_string_default("/e/themes/search_path", path);
