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);

Reply via email to